algebra.hom.freiman
⟷
Mathlib.Algebra.Group.Freiman
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
list.replicate
and migrate to it (#18127)
This definition differs from list.repeat
by the order of arguments. The new order is in sync with the Lean 4 version.
@@ -196,7 +196,7 @@ ext $ λ x, rfl
def const (A : set α) (n : ℕ) (b : β) : A →*[n] β :=
{ to_fun := λ _, b,
map_prod_eq_map_prod' := λ s t _ _ hs ht _,
- by rw [multiset.map_const, multiset.map_const, prod_repeat, prod_repeat, hs, ht] }
+ by rw [multiset.map_const, multiset.map_const, prod_replicate, prod_replicate, hs, ht] }
@[simp, to_additive] lemma const_apply (n : ℕ) (b : β) (x : α) : const A n b x = b := rfl
@@ -341,7 +341,7 @@ begin
rw [hs, ht] },
rw [←hs, card_pos_iff_exists_mem] at hm,
obtain ⟨a, ha⟩ := hm,
- suffices : ((s + repeat a (n - m)).map f).prod = ((t + repeat a (n - m)).map f).prod,
+ suffices : ((s + replicate (n - m) a).map f).prod = ((t + replicate (n - m) a).map f).prod,
{ simp_rw [multiset.map_add, prod_add] at this,
exact mul_right_cancel this },
replace ha := hsA _ ha,
@@ -349,12 +349,12 @@ begin
rotate 2, assumption, -- Can't infer `A` and `n` from the context, so do it manually.
{ rw mem_add at hx,
refine hx.elim (hsA _) (λ h, _),
- rwa eq_of_mem_repeat h },
+ rwa eq_of_mem_replicate h },
{ rw mem_add at hx,
refine hx.elim (htA _) (λ h, _),
- rwa eq_of_mem_repeat h },
- { rw [card_add, hs, card_repeat, add_tsub_cancel_of_le h] },
- { rw [card_add, ht, card_repeat, add_tsub_cancel_of_le h] },
+ rwa eq_of_mem_replicate h },
+ { rw [card_add, hs, card_replicate, add_tsub_cancel_of_le h] },
+ { rw [card_add, ht, card_replicate, add_tsub_cancel_of_le h] },
{ rw [prod_add, prod_add, hst] }
end
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -450,7 +450,7 @@ instance : CommMonoid (A →*[n] β) where
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_pow, prod_map_pow, map_prod_eq_map_prod f hsA htA hs ht h] }
npow_zero f := by ext x; exact pow_zero _
- npow_succ n f := by ext x; exact pow_succ _ _
+ npow_succ n f := by ext x; exact pow_succ' _ _
/-- If `β` is a commutative group, then `A →*[n] β` is a commutative group too. -/
@[to_additive
@@ -466,8 +466,8 @@ instance {β} [CommGroup β] : CommGroup (A →*[n] β) :=
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_zpow, prod_map_zpow, map_prod_eq_map_prod f hsA htA hs ht h] }
zpow_zero' := fun f => by ext x; exact zpow_zero _
- zpow_succ' := fun n f => by ext x; simp_rw [zpow_coe_nat, pow_succ, mul_apply, coe_mk]
- zpow_neg' := fun n f => by ext x; simp_rw [zpow_negSucc, zpow_coe_nat]; rfl }
+ zpow_succ' := fun n f => by ext x; simp_rw [zpow_natCast, pow_succ', mul_apply, coe_mk]
+ zpow_neg' := fun n f => by ext x; simp_rw [zpow_negSucc, zpow_natCast]; rfl }
end FreimanHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -532,22 +532,22 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
(hst : s.Prod = t.Prod) (h : m ≤ n) : (s.map f).Prod = (t.map f).Prod :=
by
obtain rfl | hm := m.eq_zero_or_pos
- · rw [card_eq_zero] at hs ht
+ · rw [card_eq_zero] at hs ht
rw [hs, ht]
- rw [← hs, card_pos_iff_exists_mem] at hm
+ rw [← hs, card_pos_iff_exists_mem] at hm
obtain ⟨a, ha⟩ := hm
suffices ((s + replicate (n - m) a).map f).Prod = ((t + replicate (n - m) a).map f).Prod
by
- simp_rw [Multiset.map_add, prod_add] at this
+ simp_rw [Multiset.map_add, prod_add] at this
exact mul_right_cancel this
replace ha := hsA _ ha
refine' map_prod_eq_map_prod f (fun x hx => _) (fun x hx => _) _ _ _
rotate_left 2; assumption
-- Can't infer `A` and `n` from the context, so do it manually.
- · rw [mem_add] at hx
+ · rw [mem_add] at hx
refine' hx.elim (hsA _) fun h => _
rwa [eq_of_mem_replicate h]
- · rw [mem_add] at hx
+ · rw [mem_add] at hx
refine' hx.elim (htA _) fun h => _
rwa [eq_of_mem_replicate h]
· rw [card_add, hs, card_replicate, add_tsub_cancel_of_le h]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -466,8 +466,8 @@ instance {β} [CommGroup β] : CommGroup (A →*[n] β) :=
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_zpow, prod_map_zpow, map_prod_eq_map_prod f hsA htA hs ht h] }
zpow_zero' := fun f => by ext x; exact zpow_zero _
- zpow_succ' := fun n f => by ext x; simp_rw [zpow_ofNat, pow_succ, mul_apply, coe_mk]
- zpow_neg' := fun n f => by ext x; simp_rw [zpow_negSucc, zpow_ofNat]; rfl }
+ zpow_succ' := fun n f => by ext x; simp_rw [zpow_coe_nat, pow_succ, mul_apply, coe_mk]
+ zpow_neg' := fun n f => by ext x; simp_rw [zpow_negSucc, zpow_coe_nat]; rfl }
end FreimanHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -138,14 +138,14 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
namespace FreimanHom
-#print FreimanHom.instDFunLike /-
+#print FreimanHom.instFunLike /-
@[to_additive]
-instance instDFunLike : DFunLike (A →*[n] β) α fun _ => β
+instance instFunLike : DFunLike (A →*[n] β) α fun _ => β
where
coe := toFun
coe_injective' f g h := by cases f <;> cases g <;> congr
-#align freiman_hom.fun_like FreimanHom.instDFunLike
-#align add_freiman_hom.fun_like AddFreimanHom.instDFunLike
+#align freiman_hom.fun_like FreimanHom.instFunLike
+#align add_freiman_hom.fun_like AddFreimanHom.instFunLike
-/
#print FreimanHom.freimanHomClass /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -87,7 +87,7 @@ notation:25 A " →*[" n:25 "] " β:0 => FreimanHom A β n
/-- `add_freiman_hom_class F s β n` states that `F` is a type of `n`-ary sums-preserving morphisms.
You should extend this class when you extend `add_freiman_hom`. -/
class AddFreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _)
- [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
map_sum_eq_map_sum' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n) (h : s.Sum = t.Sum) :
(s.map f).Sum = (t.map f).Sum
@@ -100,7 +100,7 @@ You should extend this class when you extend `freiman_hom`. -/
@[to_additive AddFreimanHomClass
"`add_freiman_hom_class F A β n` states that `F` is a type of `n`-ary sums-preserving morphisms.\nYou should extend this class when you extend `add_freiman_hom`."]
class FreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _) [CommMonoid α]
- [CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [CommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n) (h : s.Prod = t.Prod) :
(s.map f).Prod = (t.map f).Prod
@@ -108,7 +108,7 @@ class FreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Ty
#align add_freiman_hom_class AddFreimanHomClass
-/
-variable [FunLike F α fun _ => β]
+variable [DFunLike F α fun _ => β]
section CommMonoid
@@ -138,14 +138,14 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
namespace FreimanHom
-#print FreimanHom.funLike /-
+#print FreimanHom.instDFunLike /-
@[to_additive]
-instance funLike : FunLike (A →*[n] β) α fun _ => β
+instance instDFunLike : DFunLike (A →*[n] β) α fun _ => β
where
coe := toFun
coe_injective' f g h := by cases f <;> cases g <;> congr
-#align freiman_hom.fun_like FreimanHom.funLike
-#align add_freiman_hom.fun_like AddFreimanHom.funLike
+#align freiman_hom.fun_like FreimanHom.instDFunLike
+#align add_freiman_hom.fun_like AddFreimanHom.instDFunLike
-/
#print FreimanHom.freimanHomClass /-
@@ -176,7 +176,7 @@ theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
#print FreimanHom.ext /-
@[ext, to_additive]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
- FunLike.ext f g h
+ DFunLike.ext f g h
#align freiman_hom.ext FreimanHom.ext
#align add_freiman_hom.ext AddFreimanHom.ext
-/
@@ -261,7 +261,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
g₁.comp f hg₁ = g₂.comp f hg₂ ↔ g₁ = g₂ :=
- ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
+ ⟨fun h => ext <| hf.forall.2 <| DFunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
#align freiman_hom.cancel_right FreimanHom.cancel_right
#align add_freiman_hom.cancel_right AddFreimanHom.cancel_right
-/
@@ -514,7 +514,7 @@ theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α
@[to_additive]
theorem MonoidHom.toFreimanHom_injective :
Function.Injective (MonoidHom.toFreimanHom A n : (α →* β) → A →*[n] β) := fun f g h =>
- MonoidHom.ext <| show _ from FunLike.ext_iff.mp h
+ MonoidHom.ext <| show _ from DFunLike.ext_iff.mp h
#align monoid_hom.to_freiman_hom_injective MonoidHom.toFreimanHom_injective
#align add_monoid_hom.to_freiman_hom_injective AddMonoidHom.toAddFreimanHom_injective
-/
@@ -594,7 +594,7 @@ theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) : (f.toFrei
@[to_additive]
theorem FreimanHom.toFreimanHom_injective (h : m ≤ n) :
Function.Injective (FreimanHom.toFreimanHom h : (A →*[n] β) → A →*[m] β) := fun f g hfg =>
- FreimanHom.ext <| by convert FunLike.ext_iff.1 hfg
+ FreimanHom.ext <| by convert DFunLike.ext_iff.1 hfg
#align freiman_hom.to_freiman_hom_injective FreimanHom.toFreimanHom_injective
#align add_freiman_hom.to_freiman_hom_injective AddFreimanHom.toAddFreimanHom_injective
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-/
-import Mathbin.Algebra.BigOperators.Multiset.Basic
-import Mathbin.Data.FunLike.Basic
+import Algebra.BigOperators.Multiset.Basic
+import Data.FunLike.Basic
#align_import algebra.hom.freiman from "leanprover-community/mathlib"@"68d1483e8a718ec63219f0e227ca3f0140361086"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -459,8 +459,8 @@ instance {β} [CommGroup β] : CommGroup (A →*[n] β) :=
{ FreimanHom.commMonoid with
inv := Inv.inv
div := Div.div
- div_eq_mul_inv := by intros; ext; apply div_eq_mul_inv
- mul_left_inv := by intros; ext; apply mul_left_inv
+ div_eq_hMul_inv := by intros; ext; apply div_eq_mul_inv
+ hMul_left_inv := by intros; ext; apply mul_left_inv
zpow := fun n f =>
{ toFun := fun x => f x ^ n
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module algebra.hom.freiman
-! leanprover-community/mathlib commit 68d1483e8a718ec63219f0e227ca3f0140361086
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.BigOperators.Multiset.Basic
import Mathbin.Data.FunLike.Basic
+#align_import algebra.hom.freiman from "leanprover-community/mathlib"@"68d1483e8a718ec63219f0e227ca3f0140361086"
+
/-!
# Freiman homomorphisms
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -82,10 +82,8 @@ structure FreimanHom (A : Set α) (β : Type _) [CommMonoid α] [CommMonoid β]
#align add_freiman_hom AddFreimanHom
-/
--- mathport name: add_freiman_hom
notation:25 A " →+[" n:25 "] " β:0 => AddFreimanHom A β n
--- mathport name: freiman_hom
notation:25 A " →*[" n:25 "] " β:0 => FreimanHom A β n
#print AddFreimanHomClass /-
@@ -120,6 +118,7 @@ section CommMonoid
variable [CommMonoid α] [CommMonoid β] [CommMonoid γ] [CommMonoid δ] [CommGroup G] {A : Set α}
{B : Set β} {C : Set γ} {n : ℕ} {a b c d : α}
+#print map_prod_eq_map_prod /-
@[to_additive]
theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
(hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A) (htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n)
@@ -127,7 +126,9 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
FreimanHomClass.map_prod_eq_map_prod' f hsA htA hs ht h
#align map_prod_eq_map_prod map_prod_eq_map_prod
#align map_sum_eq_map_sum map_sum_eq_map_sum
+-/
+#print map_mul_map_eq_map_mul_map /-
@[to_additive]
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
(hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d :=
@@ -136,6 +137,7 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
refine' map_prod_eq_map_prod f _ _ (card_pair _ _) (card_pair _ _) h <;> simp [ha, hb, hc, hd]
#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_map
#align map_add_map_eq_map_add_map map_add_map_eq_map_add_map
+-/
namespace FreimanHom
@@ -166,18 +168,23 @@ instance : CoeFun (A →*[n] β) fun _ => α → β :=
initialize_simps_projections FreimanHom (toFun → apply)
+#print FreimanHom.toFun_eq_coe /-
@[simp, to_additive]
theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
rfl
#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coe
#align add_freiman_hom.to_fun_eq_coe AddFreimanHom.toFun_eq_coe
+-/
+#print FreimanHom.ext /-
@[ext, to_additive]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
FunLike.ext f g h
#align freiman_hom.ext FreimanHom.ext
#align add_freiman_hom.ext AddFreimanHom.ext
+-/
+#print FreimanHom.coe_mk /-
@[simp, to_additive]
theorem coe_mk (f : α → β)
(h :
@@ -189,12 +196,15 @@ theorem coe_mk (f : α → β)
rfl
#align freiman_hom.coe_mk FreimanHom.coe_mk
#align add_freiman_hom.coe_mk AddFreimanHom.coe_mk
+-/
+#print FreimanHom.mk_coe /-
@[simp, to_additive]
theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
ext fun _ => rfl
#align freiman_hom.mk_coe FreimanHom.mk_coe
#align add_freiman_hom.mk_coe AddFreimanHom.mk_coe
+-/
#print FreimanHom.id /-
/-- The identity map from a commutative monoid to itself. -/
@@ -225,57 +235,73 @@ protected def comp (f : B →*[n] γ) (g : A →*[n] β) (hAB : A.MapsTo g B) :
#align add_freiman_hom.comp AddFreimanHom.comp
-/
+#print FreimanHom.coe_comp /-
@[simp, to_additive]
theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg) = f ∘ g :=
rfl
#align freiman_hom.coe_comp FreimanHom.coe_comp
#align add_freiman_hom.coe_comp AddFreimanHom.coe_comp
+-/
+#print FreimanHom.comp_apply /-
@[to_additive]
theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp g hfg x = f (g x) :=
rfl
#align freiman_hom.comp_apply FreimanHom.comp_apply
#align add_freiman_hom.comp_apply AddFreimanHom.comp_apply
+-/
+#print FreimanHom.comp_assoc /-
@[to_additive]
theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf hhg hgf}
{hh : A.MapsTo (g.comp f hgf) C} : (h.comp g hhg).comp f hf = h.comp (g.comp f hgf) hh :=
rfl
#align freiman_hom.comp_assoc FreimanHom.comp_assoc
#align add_freiman_hom.comp_assoc AddFreimanHom.comp_assoc
+-/
+#print FreimanHom.cancel_right /-
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
g₁.comp f hg₁ = g₂.comp f hg₂ ↔ g₁ = g₂ :=
⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
#align freiman_hom.cancel_right FreimanHom.cancel_right
#align add_freiman_hom.cancel_right AddFreimanHom.cancel_right
+-/
+#print FreimanHom.cancel_right_on /-
@[to_additive]
theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.SurjOn f B) {hf'} :
A.EqOn (g₁.comp f hf') (g₂.comp f hf') ↔ B.EqOn g₁ g₂ :=
hf.cancel_right hf'
#align freiman_hom.cancel_right_on FreimanHom.cancel_right_on
#align add_freiman_hom.cancel_right_on AddFreimanHom.cancel_right_on
+-/
+#print FreimanHom.cancel_left_on /-
@[to_additive]
theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.InjOn g) {hf₁ hf₂} :
A.EqOn (g.comp f₁ hf₁) (g.comp f₂ hf₂) ↔ A.EqOn f₁ f₂ :=
hg.cancel_left hf₁ hf₂
#align freiman_hom.cancel_left_on FreimanHom.cancel_left_on
#align add_freiman_hom.cancel_left_on AddFreimanHom.cancel_left_on
+-/
+#print FreimanHom.comp_id /-
@[simp, to_additive]
theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
ext fun x => rfl
#align freiman_hom.comp_id FreimanHom.comp_id
#align add_freiman_hom.comp_id AddFreimanHom.comp_id
+-/
+#print FreimanHom.id_comp /-
@[simp, to_additive]
theorem id_comp (f : A →*[n] β) {hf} : (FreimanHom.id B n).comp f hf = f :=
ext fun x => rfl
#align freiman_hom.id_comp FreimanHom.id_comp
#align add_freiman_hom.id_comp AddFreimanHom.id_comp
+-/
#print FreimanHom.const /-
/-- `freiman_hom.const A n b` is the Freiman homomorphism sending everything to `b`. -/
@@ -297,28 +323,34 @@ theorem const_apply (n : ℕ) (b : β) (x : α) : const A n b x = b :=
#align add_freiman_hom.const_apply AddFreimanHom.const_apply
-/
+#print FreimanHom.const_comp /-
@[simp, to_additive]
theorem const_comp (n : ℕ) (c : γ) (f : A →*[n] β) {hf} : (const B n c).comp f hf = const A n c :=
rfl
#align freiman_hom.const_comp FreimanHom.const_comp
#align add_freiman_hom.const_comp AddFreimanHom.const_comp
+-/
/-- `1` is the Freiman homomorphism sending everything to `1`. -/
@[to_additive "`0` is the Freiman homomorphism sending everything to `0`."]
instance : One (A →*[n] β) :=
⟨const A n 1⟩
+#print FreimanHom.one_apply /-
@[simp, to_additive]
theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
rfl
#align freiman_hom.one_apply FreimanHom.one_apply
#align add_freiman_hom.zero_apply AddFreimanHom.zero_apply
+-/
+#print FreimanHom.one_comp /-
@[simp, to_additive]
theorem one_comp (f : A →*[n] β) {hf} : (1 : B →*[n] γ).comp f hf = 1 :=
rfl
#align freiman_hom.one_comp FreimanHom.one_comp
#align add_freiman_hom.zero_comp AddFreimanHom.zero_comp
+-/
@[to_additive]
instance : Inhabited (A →*[n] β) :=
@@ -333,18 +365,22 @@ instance : Mul (A →*[n] β) :=
rw [prod_map_mul, prod_map_mul, map_prod_eq_map_prod f hsA htA hs ht h,
map_prod_eq_map_prod g hsA htA hs ht h] }⟩
+#print FreimanHom.mul_apply /-
@[simp, to_additive]
theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
rfl
#align freiman_hom.mul_apply FreimanHom.mul_apply
#align add_freiman_hom.add_apply AddFreimanHom.add_apply
+-/
+#print FreimanHom.mul_comp /-
@[to_additive]
theorem mul_comp (g₁ g₂ : B →*[n] γ) (f : A →*[n] β) {hg hg₁ hg₂} :
(g₁ * g₂).comp f hg = g₁.comp f hg₁ * g₂.comp f hg₂ :=
rfl
#align freiman_hom.mul_comp FreimanHom.mul_comp
#align add_freiman_hom.add_comp AddFreimanHom.add_comp
+-/
/-- If `f` is a Freiman homomorphism to a commutative group, then `f⁻¹` is the Freiman homomorphism
sending `x` to `(f x)⁻¹`. -/
@@ -356,17 +392,21 @@ instance : Inv (A →*[n] G) :=
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_inv, prod_map_inv, map_prod_eq_map_prod f hsA htA hs ht h] }⟩
+#print FreimanHom.inv_apply /-
@[simp, to_additive]
theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
rfl
#align freiman_hom.inv_apply FreimanHom.inv_apply
#align add_freiman_hom.neg_apply AddFreimanHom.neg_apply
+-/
+#print FreimanHom.inv_comp /-
@[simp, to_additive]
theorem inv_comp (f : B →*[n] G) (g : A →*[n] β) {hf hf'} : f⁻¹.comp g hf = (f.comp g hf')⁻¹ :=
ext fun x => rfl
#align freiman_hom.inv_comp FreimanHom.inv_comp
#align add_freiman_hom.neg_comp AddFreimanHom.neg_comp
+-/
/-- If `f` and `g` are Freiman homomorphisms to a commutative group, then `f / g` is the Freiman
homomorphism sending `x` to `f x / g x`. -/
@@ -379,18 +419,22 @@ instance : Div (A →*[n] G) :=
rw [prod_map_div, prod_map_div, map_prod_eq_map_prod f hsA htA hs ht h,
map_prod_eq_map_prod g hsA htA hs ht h] }⟩
+#print FreimanHom.div_apply /-
@[simp, to_additive]
theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
rfl
#align freiman_hom.div_apply FreimanHom.div_apply
#align add_freiman_hom.sub_apply AddFreimanHom.sub_apply
+-/
+#print FreimanHom.div_comp /-
@[simp, to_additive]
theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
(f₁ / f₂).comp g hf = f₁.comp g hf₁ / f₂.comp g hf₂ :=
ext fun x => rfl
#align freiman_hom.div_comp FreimanHom.div_comp
#align add_freiman_hom.sub_comp AddFreimanHom.sub_comp
+-/
/-! ### Instances -/
@@ -461,18 +505,22 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
#align add_monoid_hom.to_add_freiman_hom AddMonoidHom.toAddFreimanHom
-/
+#print MonoidHom.toFreimanHom_coe /-
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
rfl
#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coe
#align add_monoid_hom.to_freiman_hom_coe AddMonoidHom.toAddFreimanHom_coe
+-/
+#print MonoidHom.toFreimanHom_injective /-
@[to_additive]
theorem MonoidHom.toFreimanHom_injective :
Function.Injective (MonoidHom.toFreimanHom A n : (α →* β) → A →*[n] β) := fun f g h =>
MonoidHom.ext <| show _ from FunLike.ext_iff.mp h
#align monoid_hom.to_freiman_hom_injective MonoidHom.toFreimanHom_injective
#align add_monoid_hom.to_freiman_hom_injective AddMonoidHom.toAddFreimanHom_injective
+-/
end CommMonoid
@@ -480,6 +528,7 @@ section CancelCommMonoid
variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
+#print map_prod_eq_map_prod_of_le /-
@[to_additive]
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
(hsA : ∀ x ∈ s, x ∈ A) (htA : ∀ x ∈ t, x ∈ A) (hs : s.card = m) (ht : t.card = m)
@@ -509,6 +558,7 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
· rw [prod_add, prod_add, hst]
#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_le
#align map_sum_eq_map_sum_of_le map_sum_eq_map_sum_of_le
+-/
#print FreimanHom.toFreimanHom /-
/-- `α →*[n] β` is naturally included in `A →*[m] β` for any `m ≤ n`. -/
@@ -522,6 +572,7 @@ def FreimanHom.toFreimanHom (h : m ≤ n) (f : A →*[n] β) : A →*[m] β
#align add_freiman_hom.to_add_freiman_hom AddFreimanHom.toAddFreimanHom
-/
+#print FreimanHom.FreimanHomClass_of_le /-
/-- A `n`-Freiman homomorphism is also a `m`-Freiman homomorphism for any `m ≤ n`. -/
@[to_additive AddFreimanHom.addFreimanHomClass_of_le
"An additive `n`-Freiman homomorphism is\nalso an additive `m`-Freiman homomorphism for any `m ≤ n`."]
@@ -532,19 +583,24 @@ theorem FreimanHom.FreimanHomClass_of_le [FreimanHomClass F A β n] (h : m ≤ n
map_prod_eq_map_prod_of_le f hsA htA hs ht hst h }
#align freiman_hom.freiman_hom_class_of_le FreimanHom.FreimanHomClass_of_le
#align add_freiman_hom.add_freiman_hom_class_of_le AddFreimanHom.addFreimanHomClass_of_le
+-/
+#print FreimanHom.toFreimanHom_coe /-
@[simp, to_additive AddFreimanHom.toAddFreimanHom_coe]
theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) : (f.toFreimanHom h : α → β) = f :=
rfl
#align freiman_hom.to_freiman_hom_coe FreimanHom.toFreimanHom_coe
#align add_freiman_hom.to_add_freiman_hom_coe AddFreimanHom.toAddFreimanHom_coe
+-/
+#print FreimanHom.toFreimanHom_injective /-
@[to_additive]
theorem FreimanHom.toFreimanHom_injective (h : m ≤ n) :
Function.Injective (FreimanHom.toFreimanHom h : (A →*[n] β) → A →*[m] β) := fun f g hfg =>
FreimanHom.ext <| by convert FunLike.ext_iff.1 hfg
#align freiman_hom.to_freiman_hom_injective FreimanHom.toFreimanHom_injective
#align add_freiman_hom.to_freiman_hom_injective AddFreimanHom.toAddFreimanHom_injective
+-/
end CancelCommMonoid
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -92,7 +92,7 @@ notation:25 A " →*[" n:25 "] " β:0 => FreimanHom A β n
/-- `add_freiman_hom_class F s β n` states that `F` is a type of `n`-ary sums-preserving morphisms.
You should extend this class when you extend `add_freiman_hom`. -/
class AddFreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _)
- [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
map_sum_eq_map_sum' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n) (h : s.Sum = t.Sum) :
(s.map f).Sum = (t.map f).Sum
@@ -105,7 +105,7 @@ You should extend this class when you extend `freiman_hom`. -/
@[to_additive AddFreimanHomClass
"`add_freiman_hom_class F A β n` states that `F` is a type of `n`-ary sums-preserving morphisms.\nYou should extend this class when you extend `add_freiman_hom`."]
class FreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _) [CommMonoid α]
- [CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n) (h : s.Prod = t.Prod) :
(s.map f).Prod = (t.map f).Prod
@@ -132,7 +132,7 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
(hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d :=
by
- simp_rw [← prod_pair] at h⊢
+ simp_rw [← prod_pair] at h ⊢
refine' map_prod_eq_map_prod f _ _ (card_pair _ _) (card_pair _ _) h <;> simp [ha, hb, hc, hd]
#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_map
#align map_add_map_eq_map_add_map map_add_map_eq_map_add_map
@@ -418,8 +418,8 @@ instance {β} [CommGroup β] : CommGroup (A →*[n] β) :=
{ FreimanHom.commMonoid with
inv := Inv.inv
div := Div.div
- div_eq_mul_inv := by intros ; ext; apply div_eq_mul_inv
- mul_left_inv := by intros ; ext; apply mul_left_inv
+ div_eq_mul_inv := by intros; ext; apply div_eq_mul_inv
+ mul_left_inv := by intros; ext; apply mul_left_inv
zpow := fun n f =>
{ toFun := fun x => f x ^ n
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
@@ -486,22 +486,22 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
(hst : s.Prod = t.Prod) (h : m ≤ n) : (s.map f).Prod = (t.map f).Prod :=
by
obtain rfl | hm := m.eq_zero_or_pos
- · rw [card_eq_zero] at hs ht
+ · rw [card_eq_zero] at hs ht
rw [hs, ht]
- rw [← hs, card_pos_iff_exists_mem] at hm
+ rw [← hs, card_pos_iff_exists_mem] at hm
obtain ⟨a, ha⟩ := hm
suffices ((s + replicate (n - m) a).map f).Prod = ((t + replicate (n - m) a).map f).Prod
by
- simp_rw [Multiset.map_add, prod_add] at this
+ simp_rw [Multiset.map_add, prod_add] at this
exact mul_right_cancel this
replace ha := hsA _ ha
refine' map_prod_eq_map_prod f (fun x hx => _) (fun x hx => _) _ _ _
rotate_left 2; assumption
-- Can't infer `A` and `n` from the context, so do it manually.
- · rw [mem_add] at hx
+ · rw [mem_add] at hx
refine' hx.elim (hsA _) fun h => _
rwa [eq_of_mem_replicate h]
- · rw [mem_add] at hx
+ · rw [mem_add] at hx
refine' hx.elim (htA _) fun h => _
rwa [eq_of_mem_replicate h]
· rw [card_add, hs, card_replicate, add_tsub_cancel_of_le h]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -120,9 +120,6 @@ section CommMonoid
variable [CommMonoid α] [CommMonoid β] [CommMonoid γ] [CommMonoid δ] [CommGroup G] {A : Set α}
{B : Set β} {C : Set γ} {n : ℕ} {a b c d : α}
-/- warning: map_prod_eq_map_prod -> map_prod_eq_map_prod is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod map_prod_eq_map_prodₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
(hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A) (htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : s.card = n) (ht : t.card = n)
@@ -131,12 +128,6 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
#align map_prod_eq_map_prod map_prod_eq_map_prod
#align map_sum_eq_map_sum map_sum_eq_map_sum
-/- warning: map_mul_map_eq_map_mul_map -> map_mul_map_eq_map_mul_map is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u3} β] {A : Set.{u2} α} {a : α} {b : α} {c : α} {d : α} [_inst_7 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 _inst_3 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))) _inst_1] (f : F), (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) a A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) b A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) c A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) d A) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)))) a b) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)))) c d)) -> (Eq.{succ u3} β (HMul.hMul.{u3, u3, u3} β β β (instHMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (CommMonoid.toMonoid.{u3} β _inst_3)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f a) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f b)) (HMul.hMul.{u3, u3, u3} β β β (instHMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (CommMonoid.toMonoid.{u3} β _inst_3)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f c) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f d)))
-but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {a : α} {b : α} {c : α} {d : α} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) _inst_1] (f : F), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) a A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) b A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) c A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) d A) -> (Eq.{succ u3} α (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) a b) (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) c d)) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) b) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f a) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) d) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f c) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f d)))
-Case conversion may be inaccurate. Consider using '#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_mapₓ'. -/
@[to_additive]
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
(hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d :=
@@ -175,33 +166,18 @@ instance : CoeFun (A →*[n] β) fun _ => α → β :=
initialize_simps_projections FreimanHom (toFun → apply)
-/- warning: freiman_hom.to_fun_eq_coe -> FreimanHom.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n), Eq.{max (succ u1) (succ u2)} (α -> β) (FreimanHom.toFun.{u1, u2} α A β _inst_2 _inst_3 n f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n), Eq.{max (succ u2) (succ u1)} (α -> β) (FreimanHom.toFun.{u2, u1} α A β _inst_2 _inst_3 n f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coeₓ'. -/
@[simp, to_additive]
theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
rfl
#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coe
#align add_freiman_hom.to_fun_eq_coe AddFreimanHom.toFun_eq_coe
-/- warning: freiman_hom.ext -> FreimanHom.ext is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} {{f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) f g)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} {{f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) f g)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.ext FreimanHom.extₓ'. -/
@[ext, to_additive]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
FunLike.ext f g h
#align freiman_hom.ext FreimanHom.ext
#align add_freiman_hom.ext AddFreimanHom.ext
-/- warning: freiman_hom.coe_mk -> FreimanHom.coe_mk is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_mk FreimanHom.coe_mkₓ'. -/
@[simp, to_additive]
theorem coe_mk (f : α → β)
(h :
@@ -214,9 +190,6 @@ theorem coe_mk (f : α → β)
#align freiman_hom.coe_mk FreimanHom.coe_mk
#align add_freiman_hom.coe_mk AddFreimanHom.coe_mk
-/- warning: freiman_hom.mk_coe -> FreimanHom.mk_coe is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.mk_coe FreimanHom.mk_coeₓ'. -/
@[simp, to_additive]
theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
ext fun _ => rfl
@@ -252,33 +225,18 @@ protected def comp (f : B →*[n] γ) (g : A →*[n] β) (hAB : A.MapsTo g B) :
#align add_freiman_hom.comp AddFreimanHom.comp
-/
-/- warning: freiman_hom.coe_comp -> FreimanHom.coe_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_comp FreimanHom.coe_compₓ'. -/
@[simp, to_additive]
theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg) = f ∘ g :=
rfl
#align freiman_hom.coe_comp FreimanHom.coe_comp
#align add_freiman_hom.coe_comp AddFreimanHom.coe_comp
-/- warning: freiman_hom.comp_apply -> FreimanHom.comp_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g x))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_apply FreimanHom.comp_applyₓ'. -/
@[to_additive]
theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp g hfg x = f (g x) :=
rfl
#align freiman_hom.comp_apply FreimanHom.comp_apply
#align add_freiman_hom.comp_apply AddFreimanHom.comp_apply
-/- warning: freiman_hom.comp_assoc -> FreimanHom.comp_assoc is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_assoc FreimanHom.comp_assocₓ'. -/
@[to_additive]
theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf hhg hgf}
{hh : A.MapsTo (g.comp f hgf) C} : (h.comp g hhg).comp f hf = h.comp (g.comp f hgf) hh :=
@@ -286,9 +244,6 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
#align freiman_hom.comp_assoc FreimanHom.comp_assoc
#align add_freiman_hom.comp_assoc AddFreimanHom.comp_assoc
-/- warning: freiman_hom.cancel_right -> FreimanHom.cancel_right is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right FreimanHom.cancel_rightₓ'. -/
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
g₁.comp f hg₁ = g₂.comp f hg₂ ↔ g₁ = g₂ :=
@@ -296,9 +251,6 @@ theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Functio
#align freiman_hom.cancel_right FreimanHom.cancel_right
#align add_freiman_hom.cancel_right AddFreimanHom.cancel_right
-/- warning: freiman_hom.cancel_right_on -> FreimanHom.cancel_right_on is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right_on FreimanHom.cancel_right_onₓ'. -/
@[to_additive]
theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.SurjOn f B) {hf'} :
A.EqOn (g₁.comp f hf') (g₂.comp f hf') ↔ B.EqOn g₁ g₂ :=
@@ -306,9 +258,6 @@ theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.Su
#align freiman_hom.cancel_right_on FreimanHom.cancel_right_on
#align add_freiman_hom.cancel_right_on AddFreimanHom.cancel_right_on
-/- warning: freiman_hom.cancel_left_on -> FreimanHom.cancel_left_on is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_left_on FreimanHom.cancel_left_onₓ'. -/
@[to_additive]
theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.InjOn g) {hf₁ hf₂} :
A.EqOn (g.comp f₁ hf₁) (g.comp f₂ hf₂) ↔ A.EqOn f₁ f₂ :=
@@ -316,24 +265,12 @@ theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.Inj
#align freiman_hom.cancel_left_on FreimanHom.cancel_left_on
#align add_freiman_hom.cancel_left_on AddFreimanHom.cancel_left_on
-/- warning: freiman_hom.comp_id -> FreimanHom.comp_id is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u1} α α (coeFn.{succ u1, succ u1} (FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) (fun (_x : FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) => α -> α) (FreimanHom.hasCoeToFun.{u1, u1} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u1} α _inst_2 A n)) A A}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u1, u2} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u1} α _inst_2 A n) hf) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u2} α α (FunLike.coe.{succ u2, succ u2, succ u2} (FreimanHom.{u2, u2} α A α _inst_2 _inst_2 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => α) _x) (FreimanHom.funLike.{u2, u2} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u2} α _inst_2 A n)) A A}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u2, u1} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u2} α _inst_2 A n) hf) f
-Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_id FreimanHom.comp_idₓ'. -/
@[simp, to_additive]
theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
ext fun x => rfl
#align freiman_hom.comp_id FreimanHom.comp_id
#align add_freiman_hom.comp_id AddFreimanHom.comp_id
-/- warning: freiman_hom.id_comp -> FreimanHom.id_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u2, u2} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u2} β _inst_3 B n) f hf) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {B : Set.{u1} β} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u1, u1} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u1} β _inst_3 B n) f hf) f
-Case conversion may be inaccurate. Consider using '#align freiman_hom.id_comp FreimanHom.id_compₓ'. -/
@[simp, to_additive]
theorem id_comp (f : A →*[n] β) {hf} : (FreimanHom.id B n).comp f hf = f :=
ext fun x => rfl
@@ -360,12 +297,6 @@ theorem const_apply (n : ℕ) (b : β) (x : α) : const A n b x = b :=
#align add_freiman_hom.const_apply AddFreimanHom.const_apply
-/
-/- warning: freiman_hom.const_comp -> FreimanHom.const_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u3} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u1, u3} α γ _inst_2 _inst_4 A n c)
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u1} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u3, u1} α γ _inst_2 _inst_4 A n c)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.const_comp FreimanHom.const_compₓ'. -/
@[simp, to_additive]
theorem const_comp (n : ℕ) (c : γ) (f : A →*[n] β) {hf} : (const B n c).comp f hf = const A n c :=
rfl
@@ -377,24 +308,12 @@ theorem const_comp (n : ℕ) (c : γ) (f : A →*[n] β) {hf} : (const B n c).co
instance : One (A →*[n] β) :=
⟨const A n 1⟩
-/- warning: freiman_hom.one_apply -> FreimanHom.one_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (OfNat.mk.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.one.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasOne.{u1, u2} α β _inst_2 _inst_3 A n)))) x) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β (MulOneClass.toHasOne.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.toOfNat1.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.instOneFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n))) x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (Monoid.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (CommMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) _inst_3))))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.one_apply FreimanHom.one_applyₓ'. -/
@[simp, to_additive]
theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
rfl
#align freiman_hom.one_apply FreimanHom.one_apply
#align add_freiman_hom.zero_apply AddFreimanHom.zero_apply
-/- warning: freiman_hom.one_comp -> FreimanHom.one_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (OfNat.mk.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (One.one.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasOne.{u2, u3} β γ _inst_3 _inst_4 B n)))) f hf) (OfNat.ofNat.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (OfNat.mk.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (One.one.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasOne.{u1, u3} α γ _inst_2 _inst_4 A n))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) 1 (One.toOfNat1.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) (FreimanHom.instOneFreimanHom.{u2, u1} β γ _inst_3 _inst_4 B n))) f hf) (OfNat.ofNat.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) 1 (One.toOfNat1.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.instOneFreimanHom.{u3, u1} α γ _inst_2 _inst_4 A n)))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.one_comp FreimanHom.one_compₓ'. -/
@[simp, to_additive]
theorem one_comp (f : A →*[n] β) {hf} : (1 : B →*[n] γ).comp f hf = 1 :=
rfl
@@ -414,21 +333,12 @@ instance : Mul (A →*[n] β) :=
rw [prod_map_mul, prod_map_mul, map_prod_eq_map_prod f hsA htA hs ht h,
map_prod_eq_map_prod g hsA htA hs ht h] }⟩
-/- warning: freiman_hom.mul_apply -> FreimanHom.mul_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasMul.{u1, u2} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (instHMul.{max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.instMulFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) _inst_3)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_apply FreimanHom.mul_applyₓ'. -/
@[simp, to_additive]
theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
rfl
#align freiman_hom.mul_apply FreimanHom.mul_apply
#align add_freiman_hom.add_apply AddFreimanHom.add_apply
-/- warning: freiman_hom.mul_comp -> FreimanHom.mul_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_comp FreimanHom.mul_compₓ'. -/
@[to_additive]
theorem mul_comp (g₁ g₂ : B →*[n] γ) (f : A →*[n] β) {hg hg₁ hg₂} :
(g₁ * g₂).comp f hg = g₁.comp f hg₁ * g₂.comp f hg₂ :=
@@ -446,24 +356,12 @@ instance : Inv (A →*[n] G) :=
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_inv, prod_map_inv, map_prod_eq_map_prod f hsA htA hs ht h] }⟩
-/- warning: freiman_hom.inv_apply -> FreimanHom.inv_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (Inv.inv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasInv.{u1, u2} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (Inv.inv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) _inst_6))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_apply FreimanHom.inv_applyₓ'. -/
@[simp, to_additive]
theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
rfl
#align freiman_hom.inv_apply FreimanHom.inv_apply
#align add_freiman_hom.neg_apply AddFreimanHom.neg_apply
-/- warning: freiman_hom.inv_comp -> FreimanHom.inv_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (Inv.inv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u2, u3} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u1, u3} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f g hf'))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (Inv.inv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u2 u1} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f g hf'))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_comp FreimanHom.inv_compₓ'. -/
@[simp, to_additive]
theorem inv_comp (f : B →*[n] G) (g : A →*[n] β) {hf hf'} : f⁻¹.comp g hf = (f.comp g hf')⁻¹ :=
ext fun x => rfl
@@ -481,21 +379,12 @@ instance : Div (A →*[n] G) :=
rw [prod_map_div, prod_map_div, map_prod_eq_map_prod f hsA htA hs ht h,
map_prod_eq_map_prod g hsA htA hs ht h] }⟩
-/- warning: freiman_hom.div_apply -> FreimanHom.div_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasDiv.{u1, u2} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) g x))
-but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (g : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (instHDiv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) _inst_6)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) g x))
-Case conversion may be inaccurate. Consider using '#align freiman_hom.div_apply FreimanHom.div_applyₓ'. -/
@[simp, to_additive]
theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
rfl
#align freiman_hom.div_apply FreimanHom.div_apply
#align add_freiman_hom.sub_apply AddFreimanHom.sub_apply
-/- warning: freiman_hom.div_comp -> FreimanHom.div_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align freiman_hom.div_comp FreimanHom.div_compₓ'. -/
@[simp, to_additive]
theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
(f₁ / f₂).comp g hf = f₁.comp g hf₁ / f₂.comp g hf₂ :=
@@ -572,24 +461,12 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
#align add_monoid_hom.to_add_freiman_hom AddMonoidHom.toAddFreimanHom
-/
-/- warning: monoid_hom.to_freiman_hom_coe -> MonoidHom.toFreimanHom_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
rfl
#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coe
#align add_monoid_hom.to_freiman_hom_coe AddMonoidHom.toAddFreimanHom_coe
-/- warning: monoid_hom.to_freiman_hom_injective -> MonoidHom.toFreimanHom_injective is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat}, Function.Injective.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat}, Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_injective MonoidHom.toFreimanHom_injectiveₓ'. -/
@[to_additive]
theorem MonoidHom.toFreimanHom_injective :
Function.Injective (MonoidHom.toFreimanHom A n : (α →* β) → A →*[n] β) := fun f g h =>
@@ -603,9 +480,6 @@ section CancelCommMonoid
variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
-/- warning: map_prod_eq_map_prod_of_le -> map_prod_eq_map_prod_of_le is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_leₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
(hsA : ∀ x ∈ s, x ∈ A) (htA : ∀ x ∈ t, x ∈ A) (hs : s.card = m) (ht : t.card = m)
@@ -648,12 +522,6 @@ def FreimanHom.toFreimanHom (h : m ≤ n) (f : A →*[n] β) : A →*[m] β
#align add_freiman_hom.to_add_freiman_hom AddFreimanHom.toAddFreimanHom
-/
-/- warning: freiman_hom.freiman_hom_class_of_le -> FreimanHom.FreimanHomClass_of_le is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u3} β] {A : Set.{u2} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) n _inst_1], (LE.le.{0} Nat Nat.hasLe m n) -> (FreimanHomClass.{u2, u1, u3} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) m _inst_1)
-but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1], (LE.le.{0} Nat instLENat m n) -> (FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m _inst_1)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.freiman_hom_class_of_le FreimanHom.FreimanHomClass_of_leₓ'. -/
/-- A `n`-Freiman homomorphism is also a `m`-Freiman homomorphism for any `m ≤ n`. -/
@[to_additive AddFreimanHom.addFreimanHomClass_of_le
"An additive `n`-Freiman homomorphism is\nalso an additive `m`-Freiman homomorphism for any `m ≤ n`."]
@@ -665,24 +533,12 @@ theorem FreimanHom.FreimanHomClass_of_le [FreimanHomClass F A β n] (h : m ≤ n
#align freiman_hom.freiman_hom_class_of_le FreimanHom.FreimanHomClass_of_le
#align add_freiman_hom.add_freiman_hom_class_of_le AddFreimanHom.addFreimanHomClass_of_le
-/- warning: freiman_hom.to_freiman_hom_coe -> FreimanHom.toFreimanHom_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CancelCommMonoid.{u2} β] {A : Set.{u1} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat Nat.hasLe m n) (f : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A m) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A n) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n) (f : FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A n) f)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.to_freiman_hom_coe FreimanHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive AddFreimanHom.toAddFreimanHom_coe]
theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) : (f.toFreimanHom h : α → β) = f :=
rfl
#align freiman_hom.to_freiman_hom_coe FreimanHom.toFreimanHom_coe
#align add_freiman_hom.to_add_freiman_hom_coe AddFreimanHom.toAddFreimanHom_coe
-/- warning: freiman_hom.to_freiman_hom_injective -> FreimanHom.toFreimanHom_injective is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CancelCommMonoid.{u2} β] {A : Set.{u1} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat Nat.hasLe m n), Function.Injective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n), Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h)
-Case conversion may be inaccurate. Consider using '#align freiman_hom.to_freiman_hom_injective FreimanHom.toFreimanHom_injectiveₓ'. -/
@[to_additive]
theorem FreimanHom.toFreimanHom_injective (h : m ≤ n) :
Function.Injective (FreimanHom.toFreimanHom h : (A →*[n] β) → A →*[m] β) := fun f g hfg =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -510,29 +510,17 @@ theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
@[to_additive "`α →+[n] β` is an `add_comm_monoid`."]
instance : CommMonoid (A →*[n] β) where
mul := (· * ·)
- mul_assoc a b c := by
- ext
- apply mul_assoc
+ mul_assoc a b c := by ext; apply mul_assoc
one := 1
- one_mul a := by
- ext
- apply one_mul
- mul_one a := by
- ext
- apply mul_one
- mul_comm a b := by
- ext
- apply mul_comm
+ one_mul a := by ext; apply one_mul
+ mul_one a := by ext; apply mul_one
+ mul_comm a b := by ext; apply mul_comm
npow m f :=
{ toFun := fun x => f x ^ m
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_pow, prod_map_pow, map_prod_eq_map_prod f hsA htA hs ht h] }
- npow_zero f := by
- ext x
- exact pow_zero _
- npow_succ n f := by
- ext x
- exact pow_succ _ _
+ npow_zero f := by ext x; exact pow_zero _
+ npow_succ n f := by ext x; exact pow_succ _ _
/-- If `β` is a commutative group, then `A →*[n] β` is a commutative group too. -/
@[to_additive
@@ -541,28 +529,15 @@ instance {β} [CommGroup β] : CommGroup (A →*[n] β) :=
{ FreimanHom.commMonoid with
inv := Inv.inv
div := Div.div
- div_eq_mul_inv := by
- intros
- ext
- apply div_eq_mul_inv
- mul_left_inv := by
- intros
- ext
- apply mul_left_inv
+ div_eq_mul_inv := by intros ; ext; apply div_eq_mul_inv
+ mul_left_inv := by intros ; ext; apply mul_left_inv
zpow := fun n f =>
{ toFun := fun x => f x ^ n
map_prod_eq_map_prod' := fun s t hsA htA hs ht h => by
rw [prod_map_zpow, prod_map_zpow, map_prod_eq_map_prod f hsA htA hs ht h] }
- zpow_zero' := fun f => by
- ext x
- exact zpow_zero _
- zpow_succ' := fun n f => by
- ext x
- simp_rw [zpow_ofNat, pow_succ, mul_apply, coe_mk]
- zpow_neg' := fun n f => by
- ext x
- simp_rw [zpow_negSucc, zpow_ofNat]
- rfl }
+ zpow_zero' := fun f => by ext x; exact zpow_zero _
+ zpow_succ' := fun n f => by ext x; simp_rw [zpow_ofNat, pow_succ, mul_apply, coe_mk]
+ zpow_neg' := fun n f => by ext x; simp_rw [zpow_negSucc, zpow_ofNat]; rfl }
end FreimanHom
@@ -647,8 +622,7 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
exact mul_right_cancel this
replace ha := hsA _ ha
refine' map_prod_eq_map_prod f (fun x hx => _) (fun x hx => _) _ _ _
- rotate_left 2
- assumption
+ rotate_left 2; assumption
-- Can't infer `A` and `n` from the context, so do it manually.
· rw [mem_add] at hx
refine' hx.elim (hsA _) fun h => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -121,10 +121,7 @@ variable [CommMonoid α] [CommMonoid β] [CommMonoid γ] [CommMonoid δ] [CommGr
{B : Set β} {C : Set γ} {n : ℕ} {a b c d : α}
/- warning: map_prod_eq_map_prod -> map_prod_eq_map_prod is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u3} β] {A : Set.{u2} α} {n : Nat} [_inst_7 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 _inst_3 n _inst_1] (f : F) {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x s) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x t) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u3} β (Multiset.prod.{u3} β _inst_3 (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) s)) (Multiset.prod.{u3} β _inst_3 (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) t)))
-but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {n : Nat} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) n) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2032 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2032 : α) => β) _x) _inst_1 f) t)))
+<too large>
Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod map_prod_eq_map_prodₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
@@ -203,10 +200,7 @@ theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
#align add_freiman_hom.ext AddFreimanHom.ext
/- warning: freiman_hom.coe_mk -> FreimanHom.coe_mk is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u1} α) (t : Multiset.{u1} α), (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f t)))), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n f h)) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u2} α) (t : Multiset.{u2} α), (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f t)))), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n f (fun {s._@.Mathlib.Algebra.Hom.Freiman._hyg.2706 : Multiset.{u2} α} {t._@.Mathlib.Algebra.Hom.Freiman._hyg.2707 : Multiset.{u2} α} => h s._@.Mathlib.Algebra.Hom.Freiman._hyg.2706 t._@.Mathlib.Algebra.Hom.Freiman._hyg.2707))) f
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_mk FreimanHom.coe_mkₓ'. -/
@[simp, to_additive]
theorem coe_mk (f : α → β)
@@ -221,10 +215,7 @@ theorem coe_mk (f : α → β)
#align add_freiman_hom.coe_mk AddFreimanHom.coe_mk
/- warning: freiman_hom.mk_coe -> FreimanHom.mk_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u1} α} {t : Multiset.{u1} α}, (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) h) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) h) f
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.mk_coe FreimanHom.mk_coeₓ'. -/
@[simp, to_additive]
theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
@@ -286,10 +277,7 @@ theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp
#align add_freiman_hom.comp_apply AddFreimanHom.comp_apply
/- warning: freiman_hom.comp_assoc -> FreimanHom.comp_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] [_inst_5 : CommMonoid.{u4} δ] {A : Set.{u1} α} {B : Set.{u2} β} {C : Set.{u3} γ} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u3, u4} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u1) (succ u4)} (FreimanHom.{u1, u4} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u1, u2, u4} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u2, u3, u4} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u1, u3, u4} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_2 : CommMonoid.{u4} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] [_inst_5 : CommMonoid.{u1} δ] {A : Set.{u4} α} {B : Set.{u3} β} {C : Set.{u2} γ} {n : Nat} (f : FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u2, u1} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u4, u2} α γ (FunLike.coe.{max (succ u4) (succ u2), succ u4, succ u2} (FreimanHom.{u4, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u4, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u4) (succ u1)} (FreimanHom.{u4, u1} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u4, u3, u1} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u3, u2, u1} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u4, u2, u1} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_assoc FreimanHom.comp_assocₓ'. -/
@[to_additive]
theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf hhg hgf}
@@ -299,10 +287,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
#align add_freiman_hom.comp_assoc AddFreimanHom.comp_assoc
/- warning: freiman_hom.cancel_right -> FreimanHom.cancel_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) g₁ g₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u3) (succ u2)} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) g₁ g₂))
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right FreimanHom.cancel_rightₓ'. -/
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
@@ -312,10 +297,7 @@ theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Functio
#align add_freiman_hom.cancel_right AddFreimanHom.cancel_right
/- warning: freiman_hom.cancel_right_on -> FreimanHom.cancel_right_on is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₁) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₂) B))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₁) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₂) B))
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right_on FreimanHom.cancel_right_onₓ'. -/
@[to_additive]
theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.SurjOn f B) {hf'} :
@@ -325,10 +307,7 @@ theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.Su
#align add_freiman_hom.cancel_right_on AddFreimanHom.cancel_right_on
/- warning: freiman_hom.cancel_left_on -> FreimanHom.cancel_left_on is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A))
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_left_on FreimanHom.cancel_left_onₓ'. -/
@[to_additive]
theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.InjOn g) {hf₁ hf₂} :
@@ -448,10 +427,7 @@ theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
#align add_freiman_hom.add_apply AddFreimanHom.add_apply
/- warning: freiman_hom.mul_comp -> FreimanHom.mul_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (instHMul.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasMul.{u2, u3} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasMul.{u1, u3} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (instHMul.{max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.instMulFreimanHom.{u3, u2} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.instMulFreimanHom.{u1, u2} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_comp FreimanHom.mul_compₓ'. -/
@[to_additive]
theorem mul_comp (g₁ g₂ : B →*[n] γ) (f : A →*[n] β) {hg hg₁ hg₂} :
@@ -518,10 +494,7 @@ theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
#align add_freiman_hom.sub_apply AddFreimanHom.sub_apply
/- warning: freiman_hom.div_comp -> FreimanHom.div_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f₁ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (f₂ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (HDiv.hDiv.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u2, u3} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u1, u3} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₂ g hf₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f₁ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (f₂ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (HDiv.hDiv.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₂ g hf₂))
+<too large>
Case conversion may be inaccurate. Consider using '#align freiman_hom.div_comp FreimanHom.div_compₓ'. -/
@[simp, to_additive]
theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
@@ -656,10 +629,7 @@ section CancelCommMonoid
variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
/- warning: map_prod_eq_map_prod_of_le -> map_prod_eq_map_prod_of_le is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u3} β] {A : Set.{u2} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x s) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x t) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) s) m) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) t) m) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (LE.le.{0} Nat Nat.hasLe m n) -> (Eq.{succ u3} β (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) s)) (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) t)))
-but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) m) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) m) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (LE.le.{0} Nat instLENat m n) -> (Eq.{succ u1} β (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5933 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5933 : α) => β) _x) _inst_1 f) t)))
+<too large>
Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_leₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -628,7 +628,7 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -182,7 +182,7 @@ initialize_simps_projections FreimanHom (toFun → apply)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n), Eq.{max (succ u1) (succ u2)} (α -> β) (FreimanHom.toFun.{u1, u2} α A β _inst_2 _inst_3 n f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n), Eq.{max (succ u2) (succ u1)} (α -> β) (FreimanHom.toFun.{u2, u1} α A β _inst_2 _inst_3 n f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n), Eq.{max (succ u2) (succ u1)} (α -> β) (FreimanHom.toFun.{u2, u1} α A β _inst_2 _inst_3 n f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f)
Case conversion may be inaccurate. Consider using '#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coeₓ'. -/
@[simp, to_additive]
theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
@@ -194,7 +194,7 @@ theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} {{f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) f g)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} {{f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) f g)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} {{f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) f g)
Case conversion may be inaccurate. Consider using '#align freiman_hom.ext FreimanHom.extₓ'. -/
@[ext, to_additive]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -206,7 +206,7 @@ theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u1} α) (t : Multiset.{u1} α), (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f t)))), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n f h)) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u2} α) (t : Multiset.{u2} α), (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f t)))), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n f (fun {s._@.Mathlib.Algebra.Hom.Freiman._hyg.2708 : Multiset.{u2} α} {t._@.Mathlib.Algebra.Hom.Freiman._hyg.2709 : Multiset.{u2} α} => h s._@.Mathlib.Algebra.Hom.Freiman._hyg.2708 t._@.Mathlib.Algebra.Hom.Freiman._hyg.2709))) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u2} α) (t : Multiset.{u2} α), (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f t)))), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n f (fun {s._@.Mathlib.Algebra.Hom.Freiman._hyg.2706 : Multiset.{u2} α} {t._@.Mathlib.Algebra.Hom.Freiman._hyg.2707 : Multiset.{u2} α} => h s._@.Mathlib.Algebra.Hom.Freiman._hyg.2706 t._@.Mathlib.Algebra.Hom.Freiman._hyg.2707))) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_mk FreimanHom.coe_mkₓ'. -/
@[simp, to_additive]
theorem coe_mk (f : α → β)
@@ -224,7 +224,7 @@ theorem coe_mk (f : α → β)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u1} α} {t : Multiset.{u1} α}, (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) h) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) h) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) h) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.mk_coe FreimanHom.mk_coeₓ'. -/
@[simp, to_additive]
theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
@@ -265,7 +265,7 @@ protected def comp (f : B →*[n] γ) (g : A →*[n] β) (hAB : A.MapsTo g B) :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g))
Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_comp FreimanHom.coe_compₓ'. -/
@[simp, to_additive]
theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg) = f ∘ g :=
@@ -277,7 +277,7 @@ theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g x))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_apply FreimanHom.comp_applyₓ'. -/
@[to_additive]
theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp g hfg x = f (g x) :=
@@ -289,7 +289,7 @@ theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] [_inst_5 : CommMonoid.{u4} δ] {A : Set.{u1} α} {B : Set.{u2} β} {C : Set.{u3} γ} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u3, u4} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u1) (succ u4)} (FreimanHom.{u1, u4} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u1, u2, u4} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u2, u3, u4} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u1, u3, u4} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_2 : CommMonoid.{u4} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] [_inst_5 : CommMonoid.{u1} δ] {A : Set.{u4} α} {B : Set.{u3} β} {C : Set.{u2} γ} {n : Nat} (f : FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u2, u1} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u4, u2} α γ (FunLike.coe.{max (succ u4) (succ u2), succ u4, succ u2} (FreimanHom.{u4, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u4, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u4) (succ u1)} (FreimanHom.{u4, u1} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u4, u3, u1} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u3, u2, u1} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u4, u2, u1} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
+ forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_2 : CommMonoid.{u4} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] [_inst_5 : CommMonoid.{u1} δ] {A : Set.{u4} α} {B : Set.{u3} β} {C : Set.{u2} γ} {n : Nat} (f : FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u2, u1} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u4, u2} α γ (FunLike.coe.{max (succ u4) (succ u2), succ u4, succ u2} (FreimanHom.{u4, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u4, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u4) (succ u1)} (FreimanHom.{u4, u1} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u4, u3, u1} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u3, u2, u1} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u4, u2, u1} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_assoc FreimanHom.comp_assocₓ'. -/
@[to_additive]
theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf hhg hgf}
@@ -302,7 +302,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) g₁ g₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u3) (succ u2)} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) g₁ g₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u3) (succ u2)} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) g₁ g₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right FreimanHom.cancel_rightₓ'. -/
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
@@ -315,7 +315,7 @@ theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Functio
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₁) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₂) B))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₁) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₂) B))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₁) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₂) B))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right_on FreimanHom.cancel_right_onₓ'. -/
@[to_additive]
theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.SurjOn f B) {hf'} :
@@ -328,7 +328,7 @@ theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.Su
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_left_on FreimanHom.cancel_left_onₓ'. -/
@[to_additive]
theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.InjOn g) {hf₁ hf₂} :
@@ -341,7 +341,7 @@ theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.Inj
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u1} α α (coeFn.{succ u1, succ u1} (FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) (fun (_x : FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) => α -> α) (FreimanHom.hasCoeToFun.{u1, u1} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u1} α _inst_2 A n)) A A}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u1, u2} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u1} α _inst_2 A n) hf) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u2} α α (FunLike.coe.{succ u2, succ u2, succ u2} (FreimanHom.{u2, u2} α A α _inst_2 _inst_2 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => α) _x) (FreimanHom.funLike.{u2, u2} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u2} α _inst_2 A n)) A A}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u2, u1} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u2} α _inst_2 A n) hf) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u2} α α (FunLike.coe.{succ u2, succ u2, succ u2} (FreimanHom.{u2, u2} α A α _inst_2 _inst_2 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => α) _x) (FreimanHom.funLike.{u2, u2} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u2} α _inst_2 A n)) A A}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u2, u1} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u2} α _inst_2 A n) hf) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_id FreimanHom.comp_idₓ'. -/
@[simp, to_additive]
theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
@@ -353,7 +353,7 @@ theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u2, u2} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u2} β _inst_3 B n) f hf) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {B : Set.{u1} β} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u1, u1} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u1} β _inst_3 B n) f hf) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {B : Set.{u1} β} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u1, u1} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u1} β _inst_3 B n) f hf) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.id_comp FreimanHom.id_compₓ'. -/
@[simp, to_additive]
theorem id_comp (f : A →*[n] β) {hf} : (FreimanHom.id B n).comp f hf = f :=
@@ -385,7 +385,7 @@ theorem const_apply (n : ℕ) (b : β) (x : α) : const A n b x = b :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u3} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u1, u3} α γ _inst_2 _inst_4 A n c)
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u1} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u3, u1} α γ _inst_2 _inst_4 A n c)
+ forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u1} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u3, u1} α γ _inst_2 _inst_4 A n c)
Case conversion may be inaccurate. Consider using '#align freiman_hom.const_comp FreimanHom.const_compₓ'. -/
@[simp, to_additive]
theorem const_comp (n : ℕ) (c : γ) (f : A →*[n] β) {hf} : (const B n c).comp f hf = const A n c :=
@@ -402,7 +402,7 @@ instance : One (A →*[n] β) :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (OfNat.mk.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.one.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasOne.{u1, u2} α β _inst_2 _inst_3 A n)))) x) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β (MulOneClass.toHasOne.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.toOfNat1.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.instOneFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n))) x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (Monoid.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (CommMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) _inst_3))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.toOfNat1.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.instOneFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n))) x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (Monoid.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (CommMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) _inst_3))))
Case conversion may be inaccurate. Consider using '#align freiman_hom.one_apply FreimanHom.one_applyₓ'. -/
@[simp, to_additive]
theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
@@ -414,7 +414,7 @@ theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (OfNat.mk.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (One.one.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasOne.{u2, u3} β γ _inst_3 _inst_4 B n)))) f hf) (OfNat.ofNat.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (OfNat.mk.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (One.one.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasOne.{u1, u3} α γ _inst_2 _inst_4 A n))))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) 1 (One.toOfNat1.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) (FreimanHom.instOneFreimanHom.{u2, u1} β γ _inst_3 _inst_4 B n))) f hf) (OfNat.ofNat.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) 1 (One.toOfNat1.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.instOneFreimanHom.{u3, u1} α γ _inst_2 _inst_4 A n)))
+ forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) 1 (One.toOfNat1.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) (FreimanHom.instOneFreimanHom.{u2, u1} β γ _inst_3 _inst_4 B n))) f hf) (OfNat.ofNat.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) 1 (One.toOfNat1.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.instOneFreimanHom.{u3, u1} α γ _inst_2 _inst_4 A n)))
Case conversion may be inaccurate. Consider using '#align freiman_hom.one_comp FreimanHom.one_compₓ'. -/
@[simp, to_additive]
theorem one_comp (f : A →*[n] β) {hf} : (1 : B →*[n] γ).comp f hf = 1 :=
@@ -439,7 +439,7 @@ instance : Mul (A →*[n] β) :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasMul.{u1, u2} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (instHMul.{max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.instMulFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) _inst_3)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (instHMul.{max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.instMulFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) x) _inst_3)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_apply FreimanHom.mul_applyₓ'. -/
@[simp, to_additive]
theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
@@ -451,7 +451,7 @@ theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (instHMul.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasMul.{u2, u3} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasMul.{u1, u3} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (instHMul.{max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.instMulFreimanHom.{u3, u2} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.instMulFreimanHom.{u1, u2} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (instHMul.{max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.instMulFreimanHom.{u3, u2} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.instMulFreimanHom.{u1, u2} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_comp FreimanHom.mul_compₓ'. -/
@[to_additive]
theorem mul_comp (g₁ g₂ : B →*[n] γ) (f : A →*[n] β) {hg hg₁ hg₂} :
@@ -474,7 +474,7 @@ instance : Inv (A →*[n] G) :=
lean 3 declaration is
forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (Inv.inv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasInv.{u1, u2} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x))
but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (Inv.inv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) _inst_6))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x))
+ forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (Inv.inv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) _inst_6))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_apply FreimanHom.inv_applyₓ'. -/
@[simp, to_additive]
theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
@@ -486,7 +486,7 @@ theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (Inv.inv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u2, u3} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u1, u3} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f g hf'))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (Inv.inv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u2 u1} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f g hf'))
+ forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (Inv.inv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u2 u1} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f g hf'))
Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_comp FreimanHom.inv_compₓ'. -/
@[simp, to_additive]
theorem inv_comp (f : B →*[n] G) (g : A →*[n] β) {hf hf'} : f⁻¹.comp g hf = (f.comp g hf')⁻¹ :=
@@ -509,7 +509,7 @@ instance : Div (A →*[n] G) :=
lean 3 declaration is
forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasDiv.{u1, u2} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) g x))
but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (g : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (instHDiv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) _inst_6)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) g x))
+ forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (g : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (instHDiv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) x) _inst_6)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.div_apply FreimanHom.div_applyₓ'. -/
@[simp, to_additive]
theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
@@ -521,7 +521,7 @@ theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f₁ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (f₂ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (HDiv.hDiv.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u2, u3} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u1, u3} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₂ g hf₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f₁ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (f₂ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (HDiv.hDiv.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₂ g hf₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f₁ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (f₂ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (HDiv.hDiv.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₂ g hf₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.div_comp FreimanHom.div_compₓ'. -/
@[simp, to_additive]
theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
@@ -628,7 +628,7 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
@@ -659,7 +659,7 @@ variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u3} β] {A : Set.{u2} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x s) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x t) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) s) m) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) t) m) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (LE.le.{0} Nat Nat.hasLe m n) -> (Eq.{succ u3} β (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) s)) (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) t)))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) m) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) m) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (LE.le.{0} Nat instLENat m n) -> (Eq.{succ u1} β (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5935 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5935 : α) => β) _x) _inst_1 f) t)))
+ forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) m) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) m) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (LE.le.{0} Nat instLENat m n) -> (Eq.{succ u1} β (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5933 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5933 : α) => β) _x) _inst_1 f) t)))
Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_leₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
@@ -725,7 +725,7 @@ theorem FreimanHom.FreimanHomClass_of_le [FreimanHomClass F A β n] (h : m ≤ n
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CancelCommMonoid.{u2} β] {A : Set.{u1} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat Nat.hasLe m n) (f : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A m) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A n) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n) (f : FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A n) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n) (f : FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2336 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A n) f)
Case conversion may be inaccurate. Consider using '#align freiman_hom.to_freiman_hom_coe FreimanHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive AddFreimanHom.toAddFreimanHom_coe]
theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) : (f.toFreimanHom h : α → β) = f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -124,7 +124,7 @@ variable [CommMonoid α] [CommMonoid β] [CommMonoid γ] [CommMonoid δ] [CommGr
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u3} β] {A : Set.{u2} α} {n : Nat} [_inst_7 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 _inst_3 n _inst_1] (f : F) {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x s) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x t) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u3} β (Multiset.prod.{u3} β _inst_3 (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) s)) (Multiset.prod.{u3} β _inst_3 (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) t)))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {n : Nat} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) n) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2020 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2020 : α) => β) _x) _inst_1 f) t)))
+ forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {n : Nat} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) n) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2032 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2032 : α) => β) _x) _inst_1 f) t)))
Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod map_prod_eq_map_prodₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
@@ -138,7 +138,7 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u3} β] {A : Set.{u2} α} {a : α} {b : α} {c : α} {d : α} [_inst_7 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 _inst_3 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))) _inst_1] (f : F), (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) a A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) b A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) c A) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) d A) -> (Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)))) a b) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)))) c d)) -> (Eq.{succ u3} β (HMul.hMul.{u3, u3, u3} β β β (instHMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (CommMonoid.toMonoid.{u3} β _inst_3)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f a) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f b)) (HMul.hMul.{u3, u3, u3} β β β (instHMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (CommMonoid.toMonoid.{u3} β _inst_3)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f c) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f d)))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {a : α} {b : α} {c : α} {d : α} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) _inst_1] (f : F), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) a A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) b A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) c A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) d A) -> (Eq.{succ u3} α (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) a b) (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) c d)) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) b) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) a) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) _x) _inst_1 f a) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) _x) _inst_1 f b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) d) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) c) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) _x) _inst_1 f c) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2142 : α) => β) _x) _inst_1 f d)))
+ forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u3} α} {a : α} {b : α} {c : α} {d : α} [_inst_7 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 _inst_3 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) _inst_1] (f : F), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) a A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) b A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) c A) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) d A) -> (Eq.{succ u3} α (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) a b) (HMul.hMul.{u3, u3, u3} α α α (instHMul.{u3} α (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α (CommMonoid.toMonoid.{u3} α _inst_2)))) c d)) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) b) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) a) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f a) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) d) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) c) _inst_3)))) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f c) (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2158 : α) => β) _x) _inst_1 f d)))
Case conversion may be inaccurate. Consider using '#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_mapₓ'. -/
@[to_additive]
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
@@ -182,7 +182,7 @@ initialize_simps_projections FreimanHom (toFun → apply)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n), Eq.{max (succ u1) (succ u2)} (α -> β) (FreimanHom.toFun.{u1, u2} α A β _inst_2 _inst_3 n f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n), Eq.{max (succ u2) (succ u1)} (α -> β) (FreimanHom.toFun.{u2, u1} α A β _inst_2 _inst_3 n f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n), Eq.{max (succ u2) (succ u1)} (α -> β) (FreimanHom.toFun.{u2, u1} α A β _inst_2 _inst_3 n f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f)
Case conversion may be inaccurate. Consider using '#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coeₓ'. -/
@[simp, to_additive]
theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
@@ -194,7 +194,7 @@ theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} {{f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) f g)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} {{f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) f g)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} {{f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}} {{g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x)) -> (Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) f g)
Case conversion may be inaccurate. Consider using '#align freiman_hom.ext FreimanHom.extₓ'. -/
@[ext, to_additive]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -206,7 +206,7 @@ theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u1} α) (t : Multiset.{u1} α), (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β f t)))), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n f h)) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u2} α) (t : Multiset.{u2} α), (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f t)))), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n f (fun {s._@.Mathlib.Algebra.Hom.Freiman._hyg.2683 : Multiset.{u2} α} {t._@.Mathlib.Algebra.Hom.Freiman._hyg.2684 : Multiset.{u2} α} => h s._@.Mathlib.Algebra.Hom.Freiman._hyg.2683 t._@.Mathlib.Algebra.Hom.Freiman._hyg.2684))) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : α -> β) (h : forall (s : Multiset.{u2} α) (t : Multiset.{u2} α), (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β f t)))), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n f (fun {s._@.Mathlib.Algebra.Hom.Freiman._hyg.2708 : Multiset.{u2} α} {t._@.Mathlib.Algebra.Hom.Freiman._hyg.2709 : Multiset.{u2} α} => h s._@.Mathlib.Algebra.Hom.Freiman._hyg.2708 t._@.Mathlib.Algebra.Hom.Freiman._hyg.2709))) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_mk FreimanHom.coe_mkₓ'. -/
@[simp, to_additive]
theorem coe_mk (f : α → β)
@@ -224,7 +224,7 @@ theorem coe_mk (f : α → β)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u1} α} {t : Multiset.{u1} α}, (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Multiset.{u1} α) (Multiset.hasMem.{u1} α) x t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) s) n) -> (Eq.{1} Nat (coeFn.{succ u1, succ u1} (AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u1} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u1, 0} (Multiset.{u1} α) Nat (AddMonoid.toAddZeroClass.{u1} (Multiset.{u1} α) (AddRightCancelMonoid.toAddMonoid.{u1} (Multiset.{u1} α) (AddCancelMonoid.toAddRightCancelMonoid.{u1} (Multiset.{u1} α) (AddCancelCommMonoid.toAddCancelMonoid.{u1} (Multiset.{u1} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u1} (Multiset.{u1} α) (Multiset.orderedCancelAddCommMonoid.{u1} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u1} α) t) n) -> (Eq.{succ u1} α (Multiset.prod.{u1} α _inst_2 s) (Multiset.prod.{u1} α _inst_2 t)) -> (Eq.{succ u2} β (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u2} β _inst_3 (Multiset.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u1, u2} α A β _inst_2 _inst_3 n (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) h) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) h) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (h : forall {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x s) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (forall {{x : α}}, (Membership.mem.{u2, u2} α (Multiset.{u2} α) (Multiset.instMembershipMultiset.{u2} α) x t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) s) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) s) n) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) t) (FunLike.coe.{succ u2, succ u2, 1} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) (fun (_x : Multiset.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u2} α) => Nat) _x) (AddHomClass.toFunLike.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddZeroClass.toAdd.{u2} (Multiset.{u2} α) (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u2, u2, 0} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u2} α) t) n) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (Eq.{succ u1} β (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) s)) (Multiset.prod.{u1} β _inst_3 (Multiset.map.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) t)))), Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.mk.{u2, u1} α A β _inst_2 _inst_3 n (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) h) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.mk_coe FreimanHom.mk_coeₓ'. -/
@[simp, to_additive]
theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
@@ -265,7 +265,7 @@ protected def comp (f : B →*[n] γ) (g : A →*[n] β) (hAB : A.MapsTo g B) :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (α -> γ) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g))
Case conversion may be inaccurate. Consider using '#align freiman_hom.coe_comp FreimanHom.coe_compₓ'. -/
@[simp, to_additive]
theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg) = f ∘ g :=
@@ -277,7 +277,7 @@ theorem coe_comp (f : B →*[n] γ) (g : A →*[n] β) {hfg} : ⇑(f.comp g hfg)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g x))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hfg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n f g hfg) x) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_apply FreimanHom.comp_applyₓ'. -/
@[to_additive]
theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp g hfg x = f (g x) :=
@@ -289,7 +289,7 @@ theorem comp_apply (f : B →*[n] γ) (g : A →*[n] β) {hfg} (x : α) : f.comp
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] [_inst_5 : CommMonoid.{u4} δ] {A : Set.{u1} α} {B : Set.{u2} β} {C : Set.{u3} γ} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u3, u4} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u1) (succ u4)} (FreimanHom.{u1, u4} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u1, u2, u4} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u2, u3, u4} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u1, u3, u4} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_2 : CommMonoid.{u4} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] [_inst_5 : CommMonoid.{u1} δ] {A : Set.{u4} α} {B : Set.{u3} β} {C : Set.{u2} γ} {n : Nat} (f : FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u2, u1} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u4, u2} α γ (FunLike.coe.{max (succ u4) (succ u2), succ u4, succ u2} (FreimanHom.{u4, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u4, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u4) (succ u1)} (FreimanHom.{u4, u1} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u4, u3, u1} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u3, u2, u1} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u4, u2, u1} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
+ forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_2 : CommMonoid.{u4} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] [_inst_5 : CommMonoid.{u1} δ] {A : Set.{u4} α} {B : Set.{u3} β} {C : Set.{u2} γ} {n : Nat} (f : FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (h : FreimanHom.{u2, u1} γ C δ _inst_4 _inst_5 n) {hf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hhg : Set.MapsTo.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B C} {hgf : Set.MapsTo.{u4, u3} α β (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (FreimanHom.{u4, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u4, u3} α β _inst_2 _inst_3 A n) f) A B} {hh : Set.MapsTo.{u4, u2} α γ (FunLike.coe.{max (succ u4) (succ u2), succ u4, succ u2} (FreimanHom.{u4, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u4, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf)) A C}, Eq.{max (succ u4) (succ u1)} (FreimanHom.{u4, u1} α A δ _inst_2 _inst_5 n) (FreimanHom.comp.{u4, u3, u1} α β δ _inst_2 _inst_3 _inst_5 A B n (FreimanHom.comp.{u3, u2, u1} β γ δ _inst_3 _inst_4 _inst_5 B C n h g hhg) f hf) (FreimanHom.comp.{u4, u2, u1} α γ δ _inst_2 _inst_4 _inst_5 A C n h (FreimanHom.comp.{u4, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f hgf) hh)
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_assoc FreimanHom.comp_assocₓ'. -/
@[to_additive]
theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf hhg hgf}
@@ -302,7 +302,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) g₁ g₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u3) (succ u2)} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) g₁ g₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f)) -> (forall {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂)) (Eq.{max (succ u3) (succ u2)} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) g₁ g₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right FreimanHom.cancel_rightₓ'. -/
@[to_additive]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
@@ -315,7 +315,7 @@ theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Functio
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₁) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g₂) B))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₁) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₂) B))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.SurjOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B) -> (forall {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hf')) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hf')) A) (Set.EqOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₁) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g₂) B))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_right_on FreimanHom.cancel_right_onₓ'. -/
@[to_additive]
theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.SurjOn f B) {hf'} :
@@ -328,7 +328,7 @@ theorem cancel_right_on {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : A.Su
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} {g : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (fun (_x : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) => β -> γ) (FreimanHom.hasCoeToFun.{u2, u3} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u3} α γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (fun (_x : FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) => α -> γ) (FreimanHom.hasCoeToFun.{u1, u3} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f₂) A))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} {g : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n} {f₁ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n} {f₂ : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n}, (Set.InjOn.{u3, u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) β (fun (_x : β) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : β) => γ) _x) (FreimanHom.funLike.{u3, u2} β γ _inst_3 _inst_4 B n) g) B) -> (forall {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A B}, Iff (Set.EqOn.{u1, u2} α γ (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₁ hf₁)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => γ) _x) (FreimanHom.funLike.{u1, u2} α γ _inst_2 _inst_4 A n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g f₂ hf₂)) A) (Set.EqOn.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₁) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f₂) A))
Case conversion may be inaccurate. Consider using '#align freiman_hom.cancel_left_on FreimanHom.cancel_left_onₓ'. -/
@[to_additive]
theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.InjOn g) {hf₁ hf₂} :
@@ -341,7 +341,7 @@ theorem cancel_left_on {g : B →*[n] γ} {f₁ f₂ : A →*[n] β} (hg : B.Inj
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u1} α α (coeFn.{succ u1, succ u1} (FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) (fun (_x : FreimanHom.{u1, u1} α A α _inst_2 _inst_2 n) => α -> α) (FreimanHom.hasCoeToFun.{u1, u1} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u1} α _inst_2 A n)) A A}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u1, u2} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u1} α _inst_2 A n) hf) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u2} α α (FunLike.coe.{succ u2, succ u2, succ u2} (FreimanHom.{u2, u2} α A α _inst_2 _inst_2 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => α) _x) (FreimanHom.funLike.{u2, u2} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u2} α _inst_2 A n)) A A}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u2, u1} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u2} α _inst_2 A n) hf) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u2} α α (FunLike.coe.{succ u2, succ u2, succ u2} (FreimanHom.{u2, u2} α A α _inst_2 _inst_2 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => α) _x) (FreimanHom.funLike.{u2, u2} α α _inst_2 _inst_2 A n) (FreimanHom.id.{u2} α _inst_2 A n)) A A}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u2, u1} α α β _inst_2 _inst_2 _inst_3 A A n f (FreimanHom.id.{u2} α _inst_2 A n) hf) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.comp_id FreimanHom.comp_idₓ'. -/
@[simp, to_additive]
theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
@@ -353,7 +353,7 @@ theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u1, u2, u2} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u2} β _inst_3 B n) f hf) f
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {B : Set.{u1} β} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u1, u1} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u1} β _inst_3 B n) f hf) f
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {B : Set.{u1} β} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u2, u1} α β (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u2) (succ u1)} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.comp.{u2, u1, u1} α β β _inst_2 _inst_3 _inst_3 A B n (FreimanHom.id.{u1} β _inst_3 B n) f hf) f
Case conversion may be inaccurate. Consider using '#align freiman_hom.id_comp FreimanHom.id_compₓ'. -/
@[simp, to_additive]
theorem id_comp (f : A →*[n] β) {hf} : (FreimanHom.id B n).comp f hf = f :=
@@ -385,7 +385,7 @@ theorem const_apply (n : ℕ) (b : β) (x : α) : const A n b x = b :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u3} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u1, u3} α γ _inst_2 _inst_4 A n c)
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u1} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u3, u1} α γ _inst_2 _inst_4 A n c)
+ forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} (n : Nat) (c : γ) (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (FreimanHom.const.{u2, u1} β γ _inst_3 _inst_4 B n c) f hf) (FreimanHom.const.{u3, u1} α γ _inst_2 _inst_4 A n c)
Case conversion may be inaccurate. Consider using '#align freiman_hom.const_comp FreimanHom.const_compₓ'. -/
@[simp, to_additive]
theorem const_comp (n : ℕ) (c : γ) (f : A →*[n] β) {hf} : (const B n c).comp f hf = const A n c :=
@@ -402,7 +402,7 @@ instance : One (A →*[n] β) :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (OfNat.mk.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.one.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasOne.{u1, u2} α β _inst_2 _inst_3 A n)))) x) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β (MulOneClass.toHasOne.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))))))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.toOfNat1.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.instOneFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n))) x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (Monoid.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (CommMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) _inst_3))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u2} α β _inst_2 _inst_3 A n) (OfNat.ofNat.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) 1 (One.toOfNat1.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.instOneFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n))) x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (Monoid.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (CommMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) _inst_3))))
Case conversion may be inaccurate. Consider using '#align freiman_hom.one_apply FreimanHom.one_applyₓ'. -/
@[simp, to_additive]
theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
@@ -414,7 +414,7 @@ theorem one_apply (x : α) : (1 : A →*[n] β) x = 1 :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (OfNat.mk.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) 1 (One.one.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasOne.{u2, u3} β γ _inst_3 _inst_4 B n)))) f hf) (OfNat.ofNat.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (OfNat.mk.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) 1 (One.one.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasOne.{u1, u3} α γ _inst_2 _inst_4 A n))))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) 1 (One.toOfNat1.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) (FreimanHom.instOneFreimanHom.{u2, u1} β γ _inst_3 _inst_4 B n))) f hf) (OfNat.ofNat.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) 1 (One.toOfNat1.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.instOneFreimanHom.{u3, u1} α γ _inst_2 _inst_4 A n)))
+ forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u1} γ] {A : Set.{u3} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u3, u2} α β (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (FreimanHom.{u3, u2} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u3, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u3) (succ u1)} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u3, u2, u1} α β γ _inst_2 _inst_3 _inst_4 A B n (OfNat.ofNat.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) 1 (One.toOfNat1.{max u2 u1} (FreimanHom.{u2, u1} β B γ _inst_3 _inst_4 n) (FreimanHom.instOneFreimanHom.{u2, u1} β γ _inst_3 _inst_4 B n))) f hf) (OfNat.ofNat.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) 1 (One.toOfNat1.{max u3 u1} (FreimanHom.{u3, u1} α A γ _inst_2 _inst_4 n) (FreimanHom.instOneFreimanHom.{u3, u1} α γ _inst_2 _inst_4 A n)))
Case conversion may be inaccurate. Consider using '#align freiman_hom.one_comp FreimanHom.one_compₓ'. -/
@[simp, to_additive]
theorem one_comp (f : A →*[n] β) {hf} : (1 : B →*[n] γ).comp f hf = 1 :=
@@ -439,7 +439,7 @@ instance : Mul (A →*[n] β) :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (FreimanHom.hasMul.{u1, u2} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g x))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (instHMul.{max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.instMulFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) x) _inst_3)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (g : FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (instHMul.{max u2 u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) (FreimanHom.instMulFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) x) _inst_3)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_apply FreimanHom.mul_applyₓ'. -/
@[simp, to_additive]
theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
@@ -451,7 +451,7 @@ theorem mul_apply (f g : A →*[n] β) (x : α) : (f * g) x = f x * g x :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_4 : CommMonoid.{u3} γ] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (g₁ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (instHMul.{max u2 u3} (FreimanHom.{u2, u3} β B γ _inst_3 _inst_4 n) (FreimanHom.hasMul.{u2, u3} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u3} (FreimanHom.{u1, u3} α A γ _inst_2 _inst_4 n) (FreimanHom.hasMul.{u1, u3} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u2, u3} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (instHMul.{max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.instMulFreimanHom.{u3, u2} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.instMulFreimanHom.{u1, u2} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_4 : CommMonoid.{u2} γ] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (g₁ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (g₂ : FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (f : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hg : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B} {hg₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) f) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (instHMul.{max u3 u2} (FreimanHom.{u3, u2} β B γ _inst_3 _inst_4 n) (FreimanHom.instMulFreimanHom.{u3, u2} β γ _inst_3 _inst_4 B n)) g₁ g₂) f hg) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (instHMul.{max u1 u2} (FreimanHom.{u1, u2} α A γ _inst_2 _inst_4 n) (FreimanHom.instMulFreimanHom.{u1, u2} α γ _inst_2 _inst_4 A n)) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₁ f hg₁) (FreimanHom.comp.{u1, u3, u2} α β γ _inst_2 _inst_3 _inst_4 A B n g₂ f hg₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.mul_comp FreimanHom.mul_compₓ'. -/
@[to_additive]
theorem mul_comp (g₁ g₂ : B →*[n] γ) (f : A →*[n] β) {hg hg₁ hg₂} :
@@ -474,7 +474,7 @@ instance : Inv (A →*[n] G) :=
lean 3 declaration is
forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (Inv.inv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasInv.{u1, u2} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x))
but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (Inv.inv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) _inst_6))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x))
+ forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (Inv.inv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) _inst_6))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_apply FreimanHom.inv_applyₓ'. -/
@[simp, to_additive]
theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
@@ -486,7 +486,7 @@ theorem inv_apply (f : A →*[n] G) (x : α) : f⁻¹ x = (f x)⁻¹ :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (Inv.inv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u2, u3} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasInv.{u1, u3} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f g hf'))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (Inv.inv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u2 u1} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f g hf'))
+ forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf' : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (Inv.inv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n) f) g hf) (Inv.inv.{max u2 u1} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instInvFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f g hf'))
Case conversion may be inaccurate. Consider using '#align freiman_hom.inv_comp FreimanHom.inv_compₓ'. -/
@[simp, to_additive]
theorem inv_comp (f : B →*[n] G) (g : A →*[n] β) {hf hf'} : f⁻¹.comp g hf = (f.comp g hf')⁻¹ :=
@@ -509,7 +509,7 @@ instance : Div (A →*[n] G) :=
lean 3 declaration is
forall {α : Type.{u1}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {n : Nat} (f : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (x : α), Eq.{succ u2} G (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.hasDiv.{u1, u2} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G _inst_6)))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) f x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (fun (_x : FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) => α -> G) (FreimanHom.hasCoeToFun.{u1, u2} α G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) A n) g x))
but is expected to have type
- forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (g : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (instHDiv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) x) _inst_6)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) g x))
+ forall {α : Type.{u2}} {G : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_6 : CommGroup.{u1} G] {A : Set.{u2} α} {n : Nat} (f : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (g : FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (instHDiv.{max u2 u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u2, u1} α G _inst_2 _inst_6 A n)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) x) _inst_6)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => G) _x) (FreimanHom.funLike.{u2, u1} α G _inst_2 (CommGroup.toCommMonoid.{u1} G _inst_6) A n) g x))
Case conversion may be inaccurate. Consider using '#align freiman_hom.div_apply FreimanHom.div_applyₓ'. -/
@[simp, to_additive]
theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
@@ -521,7 +521,7 @@ theorem div_apply (f g : A →*[n] G) (x : α) : (f / g) x = f x / g x :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {G : Type.{u3}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] [_inst_6 : CommGroup.{u3} G] {A : Set.{u1} α} {B : Set.{u2} β} {n : Nat} (f₁ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (f₂ : FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (g : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u3)} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n (HDiv.hDiv.{max u2 u3, max u2 u3, max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u2 u3} (FreimanHom.{u2, u3} β B G _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u2, u3} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u3, max u1 u3, max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (instHDiv.{max u1 u3} (FreimanHom.{u1, u3} α A G _inst_2 (CommGroup.toCommMonoid.{u3} G _inst_6) n) (FreimanHom.hasDiv.{u1, u3} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u2, u3} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u3} G _inst_6) A B n f₂ g hf₂))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f₁ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (f₂ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (HDiv.hDiv.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₂ g hf₂))
+ forall {α : Type.{u1}} {β : Type.{u3}} {G : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u3} β] [_inst_6 : CommGroup.{u2} G] {A : Set.{u1} α} {B : Set.{u3} β} {n : Nat} (f₁ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (f₂ : FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (g : FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) {hf : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₁ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B} {hf₂ : Set.MapsTo.{u1, u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (FreimanHom.{u1, u3} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u1, u3} α β _inst_2 _inst_3 A n) g) A B}, Eq.{max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n (HDiv.hDiv.{max u3 u2, max u3 u2, max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u3 u2} (FreimanHom.{u3, u2} β B G _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u3, u2} β G _inst_3 _inst_6 B n)) f₁ f₂) g hf) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (instHDiv.{max u1 u2} (FreimanHom.{u1, u2} α A G _inst_2 (CommGroup.toCommMonoid.{u2} G _inst_6) n) (FreimanHom.instDivFreimanHomToCommMonoid.{u1, u2} α G _inst_2 _inst_6 A n)) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₁ g hf₁) (FreimanHom.comp.{u1, u3, u2} α β G _inst_2 _inst_3 (CommGroup.toCommMonoid.{u2} G _inst_6) A B n f₂ g hf₂))
Case conversion may be inaccurate. Consider using '#align freiman_hom.div_comp FreimanHom.div_compₓ'. -/
@[simp, to_additive]
theorem div_comp (f₁ f₂ : B →*[n] G) (g : A →*[n] β) {hf hf₁ hf₂} :
@@ -628,7 +628,7 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
@@ -659,7 +659,7 @@ variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : FunLike.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u3} β] {A : Set.{u2} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u2, u1, u3} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u2} α} {t : Multiset.{u2} α}, (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x s) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (forall (x : α), (Membership.Mem.{u2, u2} α (Multiset.{u2} α) (Multiset.hasMem.{u2} α) x t) -> (Membership.Mem.{u2, u2} α (Set.{u2} α) (Set.hasMem.{u2} α) x A)) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) s) m) -> (Eq.{1} Nat (coeFn.{succ u2, succ u2} (AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (fun (_x : AddMonoidHom.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) => (Multiset.{u2} α) -> Nat) (AddMonoidHom.hasCoeToFun.{u2, 0} (Multiset.{u2} α) Nat (AddMonoid.toAddZeroClass.{u2} (Multiset.{u2} α) (AddRightCancelMonoid.toAddMonoid.{u2} (Multiset.{u2} α) (AddCancelMonoid.toAddRightCancelMonoid.{u2} (Multiset.{u2} α) (AddCancelCommMonoid.toAddCancelMonoid.{u2} (Multiset.{u2} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u2} (Multiset.{u2} α) (Multiset.orderedCancelAddCommMonoid.{u2} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.card.{u2} α) t) m) -> (Eq.{succ u2} α (Multiset.prod.{u2} α _inst_2 s) (Multiset.prod.{u2} α _inst_2 t)) -> (LE.le.{0} Nat Nat.hasLe m n) -> (Eq.{succ u3} β (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) s)) (Multiset.prod.{u3} β (CancelCommMonoid.toCommMonoid.{u3} β _inst_3) (Multiset.map.{u2, u3} α β (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) _inst_1) f) t)))
but is expected to have type
- forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) m) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) m) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (LE.le.{0} Nat instLENat m n) -> (Eq.{succ u1} β (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5869 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5869 : α) => β) _x) _inst_1 f) t)))
+ forall {F : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_1 : FunLike.{succ u2, succ u3, succ u1} F α (fun (_x : α) => β)] [_inst_2 : CommMonoid.{u3} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u3} α} {m : Nat} {n : Nat} [_inst_4 : FreimanHomClass.{u3, u2, u1} α F A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n _inst_1] (f : F) {s : Multiset.{u3} α} {t : Multiset.{u3} α}, (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x s) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (forall (x : α), (Membership.mem.{u3, u3} α (Multiset.{u3} α) (Multiset.instMembershipMultiset.{u3} α) x t) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x A)) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) s) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) s) m) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) t) (FunLike.coe.{succ u3, succ u3, 1} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) (fun (_x : Multiset.{u3} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : Multiset.{u3} α) => Nat) _x) (AddHomClass.toFunLike.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddZeroClass.toAdd.{u3} (Multiset.{u3} α) (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α))))))) (AddZeroClass.toAdd.{0} Nat (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (AddMonoidHomClass.toAddHomClass.{u3, u3, 0} (AddMonoidHom.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)) (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid) (AddMonoidHom.addMonoidHomClass.{u3, 0} (Multiset.{u3} α) Nat (AddMonoid.toAddZeroClass.{u3} (Multiset.{u3} α) (AddRightCancelMonoid.toAddMonoid.{u3} (Multiset.{u3} α) (AddCancelMonoid.toAddRightCancelMonoid.{u3} (Multiset.{u3} α) (AddCancelCommMonoid.toAddCancelMonoid.{u3} (Multiset.{u3} α) (OrderedCancelAddCommMonoid.toCancelAddCommMonoid.{u3} (Multiset.{u3} α) (Multiset.instOrderedCancelAddCommMonoidMultiset.{u3} α)))))) (AddMonoid.toAddZeroClass.{0} Nat Nat.addMonoid)))) (Multiset.card.{u3} α) t) m) -> (Eq.{succ u3} α (Multiset.prod.{u3} α _inst_2 s) (Multiset.prod.{u3} α _inst_2 t)) -> (LE.le.{0} Nat instLENat m n) -> (Eq.{succ u1} β (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5935 : α) => β) _x) _inst_1 f) s)) (Multiset.prod.{u1} β (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) (Multiset.map.{u3, u1} α β (FunLike.coe.{succ u2, succ u3, succ u1} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.5935 : α) => β) _x) _inst_1 f) t)))
Case conversion may be inaccurate. Consider using '#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_leₓ'. -/
@[to_additive]
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
@@ -725,7 +725,7 @@ theorem FreimanHom.FreimanHomClass_of_le [FreimanHomClass F A β n] (h : m ≤ n
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CancelCommMonoid.{u2} β] {A : Set.{u1} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat Nat.hasLe m n) (f : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) m) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A m) (FreimanHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A m n h f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u2} β _inst_3) A n) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n) (f : FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A n) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CancelCommMonoid.{u1} β] {A : Set.{u2} α} {m : Nat} {n : Nat} (h : LE.le.{0} Nat instLENat m n) (f : FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) m) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A m) (FreimanHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A m n h f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2338 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 (CancelCommMonoid.toCommMonoid.{u1} β _inst_3) A n) f)
Case conversion may be inaccurate. Consider using '#align freiman_hom.to_freiman_hom_coe FreimanHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive AddFreimanHom.toAddFreimanHom_coe]
theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) : (f.toFreimanHom h : α → β) = f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -628,7 +628,7 @@ def MonoidHom.toFreimanHom (A : Set α) (n : ℕ) (f : α →* β) : A →*[n]
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_2 : CommMonoid.{u1} α] [_inst_3 : CommMonoid.{u2} β] {A : Set.{u1} α} {n : Nat} (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))), Eq.{max (succ u1) (succ u2)} ((fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) (fun (_x : FreimanHom.{u1, u2} α A β _inst_2 _inst_3 n) => α -> β) (FreimanHom.hasCoeToFun.{u1, u2} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u1, u2} α β _inst_2 _inst_3 A n f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (CommMonoid.toMonoid.{u1} α _inst_2)) (Monoid.toMulOneClass.{u2} β (CommMonoid.toMonoid.{u2} β _inst_3))) f)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : CommMonoid.{u2} α] [_inst_3 : CommMonoid.{u1} β] {A : Set.{u2} α} {n : Nat} (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))), Eq.{max (succ u2) (succ u1)} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (FreimanHom.{u2, u1} α A β _inst_2 _inst_3 n) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Freiman._hyg.2318 : α) => β) _x) (FreimanHom.funLike.{u2, u1} α β _inst_2 _inst_3 A n) (MonoidHom.toFreimanHom.{u2, u1} α β _inst_2 _inst_3 A n f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))) α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3)) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (CommMonoid.toMonoid.{u2} α _inst_2)) (Monoid.toMulOneClass.{u1} β (CommMonoid.toMonoid.{u1} β _inst_3))))) f)
Case conversion may be inaccurate. Consider using '#align monoid_hom.to_freiman_hom_coe MonoidHom.toFreimanHom_coeₓ'. -/
@[simp, to_additive]
theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α → β) = f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -166,7 +166,7 @@ instance freimanHomClass : FreimanHomClass (A →*[n] β) A β n where
#align freiman_hom.freiman_hom_class FreimanHom.freimanHomClass
#align add_freiman_hom.freiman_hom_class AddFreimanHom.addFreimanHomClass
--- porting note: not helpful in lean4
+-- Porting note: not helpful in lean4
-- /-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
-- directly. -/
-- @[to_additive
@@ -505,7 +505,7 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
exact mul_right_cancel this
replace ha := hsA _ ha
apply map_prod_eq_map_prod f (A := A) (β := β) (n := n) (fun x hx => _) (fun x hx => _) _ _ _
- -- porting note: below could be golfed when wlog is available
+ -- Porting note: below could be golfed when wlog is available
· intro x hx
rw [mem_add] at hx
cases' hx with hx hx
FunLike
(#9833)
This follows up from #9785, which renamed FunLike
to DFunLike
, by introducing a new abbreviation FunLike F α β := DFunLike F α (fun _ => β)
, to make the non-dependent use of FunLike
easier.
I searched for the pattern DFunLike.*fun
and DFunLike.*λ
in all files to replace expressions of the form DFunLike F α (fun _ => β)
with FunLike F α β
. I did this everywhere except for extends
clauses for two reasons: it would conflict with #8386, and more importantly extends
must directly refer to a structure with no unfolding of def
s or abbrev
s.
@@ -88,7 +88,7 @@ notation:25 (name := «FreimanHomLocal≺») A " →*[" n:25 "] " β:0 => Freima
/-- `AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary sums-preserving morphisms.
You should extend this class when you extend `AddFreimanHom`. -/
class AddFreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*)
- [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
+ [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α β] : Prop where
/-- An additive `n`-Freiman homomorphism preserves sums of `n` elements. -/
map_sum_eq_map_sum' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : Multiset.card s = n) (ht : Multiset.card t = n)
@@ -102,7 +102,7 @@ You should extend this class when you extend `FreimanHom`. -/
"`AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary
sums-preserving morphisms. You should extend this class when you extend `AddFreimanHom`."]
class FreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*) [CommMonoid α]
- [CommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
+ [CommMonoid β] (n : ℕ) [FunLike F α β] : Prop where
/-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : Multiset.card s = n) (ht : Multiset.card t = n)
@@ -110,7 +110,7 @@ class FreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Typ
(s.map f).prod = (t.map f).prod
#align freiman_hom_class FreimanHomClass
-variable [DFunLike F α fun _ => β]
+variable [FunLike F α β]
section CommMonoid
@@ -154,11 +154,11 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
namespace FreimanHom
@[to_additive]
-instance instDFunLike : DFunLike (A →*[n] β) α fun _ => β where
+instance instFunLike : FunLike (A →*[n] β) α β where
coe := toFun
coe_injective' f g h := by cases f; cases g; congr
-#align freiman_hom.fun_like FreimanHom.instDFunLike
-#align add_freiman_hom.fun_like AddFreimanHom.instDFunLike
+#align freiman_hom.fun_like FreimanHom.instFunLike
+#align add_freiman_hom.fun_like AddFreimanHom.instFunLike
@[to_additive addFreimanHomClass]
instance freimanHomClass : FreimanHomClass (A →*[n] β) A β n where
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>
@@ -88,7 +88,7 @@ notation:25 (name := «FreimanHomLocal≺») A " →*[" n:25 "] " β:0 => Freima
/-- `AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary sums-preserving morphisms.
You should extend this class when you extend `AddFreimanHom`. -/
class AddFreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*)
- [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
/-- An additive `n`-Freiman homomorphism preserves sums of `n` elements. -/
map_sum_eq_map_sum' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : Multiset.card s = n) (ht : Multiset.card t = n)
@@ -102,7 +102,7 @@ You should extend this class when you extend `FreimanHom`. -/
"`AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary
sums-preserving morphisms. You should extend this class when you extend `AddFreimanHom`."]
class FreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*) [CommMonoid α]
- [CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
+ [CommMonoid β] (n : ℕ) [DFunLike F α fun _ => β] : Prop where
/-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : Multiset.card s = n) (ht : Multiset.card t = n)
@@ -110,7 +110,7 @@ class FreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Typ
(s.map f).prod = (t.map f).prod
#align freiman_hom_class FreimanHomClass
-variable [FunLike F α fun _ => β]
+variable [DFunLike F α fun _ => β]
section CommMonoid
@@ -125,7 +125,7 @@ see also Algebra.Hom.Group for similar -/
" Turn an element of a type `F` satisfying `AddFreimanHomClass F A β n` into an actual
`AddFreimanHom`. This is declared as the default coercion from `F` to `AddFreimanHom A β n`."]
def _root_.FreimanHomClass.toFreimanHom [FreimanHomClass F A β n] (f : F) : A →*[n] β where
- toFun := FunLike.coe f
+ toFun := DFunLike.coe f
map_prod_eq_map_prod' := FreimanHomClass.map_prod_eq_map_prod' f
/-- Any type satisfying `SMulHomClass` can be cast into `MulActionHom` via
@@ -154,11 +154,11 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
namespace FreimanHom
@[to_additive]
-instance funLike : FunLike (A →*[n] β) α fun _ => β where
+instance instDFunLike : DFunLike (A →*[n] β) α fun _ => β where
coe := toFun
coe_injective' f g h := by cases f; cases g; congr
-#align freiman_hom.fun_like FreimanHom.funLike
-#align add_freiman_hom.fun_like AddFreimanHom.funLike
+#align freiman_hom.fun_like FreimanHom.instDFunLike
+#align add_freiman_hom.fun_like AddFreimanHom.instDFunLike
@[to_additive addFreimanHomClass]
instance freimanHomClass : FreimanHomClass (A →*[n] β) A β n where
@@ -167,7 +167,7 @@ instance freimanHomClass : FreimanHomClass (A →*[n] β) A β n where
#align add_freiman_hom.freiman_hom_class AddFreimanHom.addFreimanHomClass
-- porting note: not helpful in lean4
--- /-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
+-- /-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`
-- directly. -/
-- @[to_additive
-- "Helper instance for when there's too many metavariables to apply
@@ -186,7 +186,7 @@ theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
@[to_additive (attr := ext)]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
- FunLike.ext f g h
+ DFunLike.ext f g h
#align freiman_hom.ext FreimanHom.ext
#align add_freiman_hom.ext AddFreimanHom.ext
@@ -254,7 +254,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
@[to_additive (attr := simp)]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
g₁.comp f hg₁ = g₂.comp f hg₂ ↔ g₁ = g₂ :=
- ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
+ ⟨fun h => ext <| hf.forall.2 <| DFunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
#align freiman_hom.cancel_right FreimanHom.cancel_right
#align add_freiman_hom.cancel_right AddFreimanHom.cancel_right
@@ -477,7 +477,7 @@ theorem MonoidHom.toFreimanHom_coe (f : α →* β) : (f.toFreimanHom A n : α
@[to_additive AddMonoidHom.toAddFreimanHom_injective]
theorem MonoidHom.toFreimanHom_injective :
Function.Injective (MonoidHom.toFreimanHom A n : (α →* β) → A →*[n] β) := fun f g h =>
- by rwa [toFreimanHom, toFreimanHom, FreimanHom.mk.injEq, FunLike.coe_fn_eq] at h
+ by rwa [toFreimanHom, toFreimanHom, FreimanHom.mk.injEq, DFunLike.coe_fn_eq] at h
#align monoid_hom.to_freiman_hom_injective MonoidHom.toFreimanHom_injective
#align add_monoid_hom.to_freiman_hom_injective AddMonoidHom.toAddFreimanHom_injective
@@ -553,7 +553,7 @@ theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) :
@[to_additive AddFreimanHom.toAddFreimanHom_injective]
theorem FreimanHom.toFreimanHom_injective (h : m ≤ n) :
Function.Injective (FreimanHom.toFreimanHom h : (A →*[n] β) → A →*[m] β) := fun f g hfg =>
- FreimanHom.ext <| by convert FunLike.ext_iff.1 hfg using 0
+ FreimanHom.ext <| by convert DFunLike.ext_iff.1 hfg using 0
#align freiman_hom.to_freiman_hom_injective FreimanHom.toFreimanHom_injective
#align add_freiman_hom.to_freiman_hom_injective AddFreimanHom.toAddFreimanHom_injective
@@ -495,7 +495,8 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
obtain rfl | hm := m.eq_zero_or_pos
· rw [card_eq_zero] at hs ht
rw [hs, ht]
- simp [← hs, card_pos_iff_exists_mem] at hm
+ simp? [← hs, card_pos_iff_exists_mem] at hm says
+ simp only [← hs, gt_iff_lt, card_pos_iff_exists_mem] at hm
obtain ⟨a, ha⟩ := hm
suffices
((s + Multiset.replicate (n - m) a).map f).prod =
@@ -422,7 +422,7 @@ instance commMonoid : CommMonoid (A →*[n] β) where
@[to_additive
"If `β` is an additive commutative group, then `A →*[n] β` is an additive commutative
group too."]
-instance commGroup {β} [CommGroup β]: CommGroup (A →*[n] β) :=
+instance commGroup {β} [CommGroup β] : CommGroup (A →*[n] β) :=
{ FreimanHom.commMonoid with
div_eq_mul_inv := by
intros
@@ -251,7 +251,7 @@ theorem comp_assoc (f : A →*[n] β) (g : B →*[n] γ) (h : C →*[n] δ) {hf
#align freiman_hom.comp_assoc FreimanHom.comp_assoc
#align add_freiman_hom.comp_assoc AddFreimanHom.comp_assoc
-@[to_additive]
+@[to_additive (attr := simp)]
theorem cancel_right {g₁ g₂ : B →*[n] γ} {f : A →*[n] β} (hf : Function.Surjective f) {hg₁ hg₂} :
g₁.comp f hg₁ = g₂.comp f hg₂ ↔ g₁ = g₂ :=
⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => h ▸ rfl⟩
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -52,10 +52,10 @@ instance.
open Multiset
-variable {F α β γ δ G : Type _}
+variable {F α β γ δ G : Type*}
/-- An additive `n`-Freiman homomorphism is a map which preserves sums of `n` elements. -/
-structure AddFreimanHom (A : Set α) (β : Type _) [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) where
+structure AddFreimanHom (A : Set α) (β : Type*) [AddCommMonoid α] [AddCommMonoid β] (n : ℕ) where
/-- The underlying function. -/
toFun : α → β
/-- An additive `n`-Freiman homomorphism preserves sums of `n` elements. -/
@@ -66,7 +66,7 @@ structure AddFreimanHom (A : Set α) (β : Type _) [AddCommMonoid α] [AddCommMo
/-- An `n`-Freiman homomorphism on a set `A` is a map which preserves products of `n` elements. -/
@[to_additive AddFreimanHom]
-structure FreimanHom (A : Set α) (β : Type _) [CommMonoid α] [CommMonoid β] (n : ℕ) where
+structure FreimanHom (A : Set α) (β : Type*) [CommMonoid α] [CommMonoid β] (n : ℕ) where
/-- The underlying function. -/
toFun : α → β
/-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
@@ -87,7 +87,7 @@ notation:25 (name := «FreimanHomLocal≺») A " →*[" n:25 "] " β:0 => Freima
/-- `AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary sums-preserving morphisms.
You should extend this class when you extend `AddFreimanHom`. -/
-class AddFreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _)
+class AddFreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*)
[AddCommMonoid α] [AddCommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
/-- An additive `n`-Freiman homomorphism preserves sums of `n` elements. -/
map_sum_eq_map_sum' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
@@ -101,7 +101,7 @@ You should extend this class when you extend `FreimanHom`. -/
@[to_additive AddFreimanHomClass
"`AddFreimanHomClass F A β n` states that `F` is a type of `n`-ary
sums-preserving morphisms. You should extend this class when you extend `AddFreimanHom`."]
-class FreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _) [CommMonoid α]
+class FreimanHomClass (F : Type*) (A : outParam <| Set α) (β : outParam <| Type*) [CommMonoid α]
[CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
/-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module algebra.hom.freiman
-! leanprover-community/mathlib commit f694c7dead66f5d4c80f446c796a5aad14707f0e
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.BigOperators.Multiset.Basic
import Mathlib.Data.FunLike.Basic
+#align_import algebra.hom.freiman from "leanprover-community/mathlib"@"f694c7dead66f5d4c80f446c796a5aad14707f0e"
+
/-!
# Freiman homomorphisms
@@ -329,7 +329,7 @@ theorem one_comp (f : A →*[n] β) {hf} : (1 : B →*[n] γ).comp f hf = 1 :=
instance : Inhabited (A →*[n] β) :=
⟨1⟩
-/-- `f * g` is the Freiman homomorphism sends `x` to `f x * g x`. -/
+/-- `f * g` is the Freiman homomorphism sends `x` to `f x * g x`. -/
@[to_additive "`f + g` is the Freiman homomorphism sending `x` to `f x + g x`."]
instance : Mul (A →*[n] β) :=
⟨fun f g =>
@@ -524,9 +524,9 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_le
#align map_sum_eq_map_sum_of_le map_sum_eq_map_sum_of_le
-/-- `α →*[n] β` is naturally included in `A →*[m] β` for any `m ≤ n`. -/
+/-- `α →*[n] β` is naturally included in `A →*[m] β` for any `m ≤ n`. -/
@[to_additive AddFreimanHom.toAddFreimanHom
- "`α →+[n] β` is naturally included in `α →+[m] β`
+ "`α →+[n] β` is naturally included in `α →+[m] β`
for any `m ≤ n`"]
def FreimanHom.toFreimanHom (h : m ≤ n) (f : A →*[n] β) : A →*[m] β where
toFun := f
@@ -14,7 +14,7 @@ import Mathlib.Data.FunLike.Basic
/-!
# Freiman homomorphisms
-In this file, we define Freiman homomorphisms. A `n`-Freiman homomorphism on `A` is a function
+In this file, we define Freiman homomorphisms. An `n`-Freiman homomorphism on `A` is a function
`f : α → β` such that `f (x₁) * ... * f (xₙ) = f (y₁) * ... * f (yₙ)` for all
`x₁, ..., xₙ, y₁, ..., yₙ ∈ A` such that `x₁ * ... * xₙ = y₁ * ... * yₙ`. In particular, any
`MulHom` is a Freiman homomorphism.
@@ -67,12 +67,12 @@ structure AddFreimanHom (A : Set α) (β : Type _) [AddCommMonoid α] [AddCommMo
(s.map toFun).sum = (t.map toFun).sum
#align add_freiman_hom AddFreimanHom
-/-- A `n`-Freiman homomorphism on a set `A` is a map which preserves products of `n` elements. -/
+/-- An `n`-Freiman homomorphism on a set `A` is a map which preserves products of `n` elements. -/
@[to_additive AddFreimanHom]
structure FreimanHom (A : Set α) (β : Type _) [CommMonoid α] [CommMonoid β] (n : ℕ) where
/-- The underlying function. -/
toFun : α → β
- /-- A `n`-Freiman homomorphism preserves products of `n` elements. -/
+ /-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
map_prod_eq_map_prod' {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A) (htA : ∀ ⦃x⦄, x ∈ t → x ∈ A)
(hs : Multiset.card s = n) (ht : Multiset.card t = n) (h : s.prod = t.prod) :
(s.map toFun).prod = (t.map toFun).prod
@@ -106,7 +106,7 @@ You should extend this class when you extend `FreimanHom`. -/
sums-preserving morphisms. You should extend this class when you extend `AddFreimanHom`."]
class FreimanHomClass (F : Type _) (A : outParam <| Set α) (β : outParam <| Type _) [CommMonoid α]
[CommMonoid β] (n : ℕ) [FunLike F α fun _ => β] : Prop where
- /-- A `n`-Freiman homomorphism preserves products of `n` elements. -/
+ /-- An `n`-Freiman homomorphism preserves products of `n` elements. -/
map_prod_eq_map_prod' (f : F) {s t : Multiset α} (hsA : ∀ ⦃x⦄, x ∈ s → x ∈ A)
(htA : ∀ ⦃x⦄, x ∈ t → x ∈ A) (hs : Multiset.card s = n) (ht : Multiset.card t = n)
(h : s.prod = t.prod) :
@@ -534,7 +534,7 @@ def FreimanHom.toFreimanHom (h : m ≤ n) (f : A →*[n] β) : A →*[m] β wher
#align freiman_hom.to_freiman_hom FreimanHom.toFreimanHom
#align add_freiman_hom.to_add_freiman_hom AddFreimanHom.toAddFreimanHom
-/-- A `n`-Freiman homomorphism is also a `m`-Freiman homomorphism for any `m ≤ n`. -/
+/-- An `n`-Freiman homomorphism is also a `m`-Freiman homomorphism for any `m ≤ n`. -/
@[to_additive AddFreimanHom.addFreimanHomClass_of_le
"An additive `n`-Freiman homomorphism is
also an additive `m`-Freiman homomorphism for any `m ≤ n`."]
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -149,7 +149,7 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
@[to_additive]
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
(hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d := by
- simp_rw [← prod_pair] at h⊢
+ simp_rw [← prod_pair] at h ⊢
refine' map_prod_eq_map_prod f _ _ (card_pair _ _) (card_pair _ _) h <;> simp [ha, hb, hc, hd]
#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_map
#align map_add_map_eq_map_add_map map_add_map_eq_map_add_map
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -521,7 +521,6 @@ theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Mul
· rw [_root_.map_add, card_replicate, hs]; simp [h]
· rw [_root_.map_add, card_replicate, ht]; simp [h]
· rw [prod_add, prod_add, hst]
-
#align map_prod_eq_map_prod_of_le map_prod_eq_map_prod_of_le
#align map_sum_eq_map_sum_of_le map_sum_eq_map_sum_of_le
congr!
and convert
(#2606)
congr!
, convert
, and convert_to
to control parts of the congruence algorithm, in particular transparency settings when applying congruence lemmas.congr!
now applies congruence lemmas with reducible transparency by default. This prevents it from unfolding definitions when applying congruence lemmas. It also now tries both the LHS-biased and RHS-biased simp congruence lemmas, with a configuration option to set which it should try first.HEq
congruence lemma generator that gives each hypothesis access to the proofs of previous hypotheses. This means that if you have an equality ⊢ ⟨a, x⟩ = ⟨b, y⟩
of sigma types, congr!
turns this into goals ⊢ a = b
and ⊢ a = b → HEq x y
(note that congr!
will also auto-introduce a = b
for you in the second goal). This congruence lemma generator applies to more cases than the simp congruence lemma generator does.congr!
(and hence convert
) are more careful about applying lemmas that don't force definitions to unfold. There were a number of cases in mathlib where the implementation of congr
was being abused to unfold definitions.set_option trace.congr! true
you can see what congr!
sees when it is deciding on congruence lemmas.convert_to
to do using 1
when there is no using
clause, to match its documentation.Note that congr!
is more capable than congr
at finding a way to equate left-hand sides and right-hand sides, so you will frequently need to limit its depth with a using
clause. However, there is also a new heuristic to prevent considering unlikely-to-be-provable type equalities (controlled by the typeEqs
option), which can help limit the depth automatically.
There is also a predefined configuration that you can invoke with, for example, convert (config := .unfoldSameFun) h
, that causes it to behave more like congr
, including using default transparency when unfolding.
@@ -556,7 +556,7 @@ theorem FreimanHom.toFreimanHom_coe (h : m ≤ n) (f : A →*[n] β) :
@[to_additive AddFreimanHom.toAddFreimanHom_injective]
theorem FreimanHom.toFreimanHom_injective (h : m ≤ n) :
Function.Injective (FreimanHom.toFreimanHom h : (A →*[n] β) → A →*[m] β) := fun f g hfg =>
- FreimanHom.ext <| by convert FunLike.ext_iff.1 hfg
+ FreimanHom.ext <| by convert FunLike.ext_iff.1 hfg using 0
#align freiman_hom.to_freiman_hom_injective FreimanHom.toFreimanHom_injective
#align add_freiman_hom.to_freiman_hom_injective AddFreimanHom.toAddFreimanHom_injective
@@ -127,10 +127,9 @@ see also Algebra.Hom.Group for similar -/
@[to_additive (attr := coe)
" Turn an element of a type `F` satisfying `AddFreimanHomClass F A β n` into an actual
`AddFreimanHom`. This is declared as the default coercion from `F` to `AddFreimanHom A β n`."]
-def _root_.FreimanHomClass.toFreimanHom [FreimanHomClass F A β n] (f : F) :
- A →*[n] β where
- toFun := FunLike.coe f
- map_prod_eq_map_prod' := FreimanHomClass.map_prod_eq_map_prod' f
+def _root_.FreimanHomClass.toFreimanHom [FreimanHomClass F A β n] (f : F) : A →*[n] β where
+ toFun := FunLike.coe f
+ map_prod_eq_map_prod' := FreimanHomClass.map_prod_eq_map_prod' f
/-- Any type satisfying `SMulHomClass` can be cast into `MulActionHom` via
`SMulHomClass.toMulActionHom`. -/
@@ -149,8 +148,7 @@ theorem map_prod_eq_map_prod [FreimanHomClass F A β n] (f : F) {s t : Multiset
@[to_additive]
theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a ∈ A) (hb : b ∈ A)
- (hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d :=
- by
+ (hc : c ∈ A) (hd : d ∈ A) (h : a * b = c * d) : f a * f b = f c * f d := by
simp_rw [← prod_pair] at h⊢
refine' map_prod_eq_map_prod f _ _ (card_pair _ _) (card_pair _ _) h <;> simp [ha, hb, hc, hd]
#align map_mul_map_eq_map_mul_map map_mul_map_eq_map_mul_map
@@ -159,18 +157,17 @@ theorem map_mul_map_eq_map_mul_map [FreimanHomClass F A β 2] (f : F) (ha : a
namespace FreimanHom
@[to_additive]
-instance funLike : FunLike (A →*[n] β) α fun _ => β
- where
+instance funLike : FunLike (A →*[n] β) α fun _ => β where
coe := toFun
coe_injective' f g h := by cases f; cases g; congr
#align freiman_hom.fun_like FreimanHom.funLike
#align add_freiman_hom.fun_like AddFreimanHom.funLike
-@[to_additive]
-instance freiman_hom_class : FreimanHomClass (A →*[n] β) A β n
- where map_prod_eq_map_prod' := map_prod_eq_map_prod'
-#align freiman_hom.freiman_hom_class FreimanHom.freiman_hom_class
-#align add_freiman_hom.freiman_hom_class AddFreimanHom.freiman_hom_class
+@[to_additive addFreimanHomClass]
+instance freimanHomClass : FreimanHomClass (A →*[n] β) A β n where
+ map_prod_eq_map_prod' := map_prod_eq_map_prod'
+#align freiman_hom.freiman_hom_class FreimanHom.freimanHomClass
+#align add_freiman_hom.freiman_hom_class AddFreimanHom.addFreimanHomClass
-- porting note: not helpful in lean4
-- /-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
@@ -185,10 +182,10 @@ initialize_simps_projections FreimanHom (toFun → apply)
initialize_simps_projections AddFreimanHom (toFun → apply)
@[to_additive (attr := simp)]
-theorem to_fun_eq_coe (f : A →*[n] β) : f.toFun = f :=
+theorem toFun_eq_coe (f : A →*[n] β) : f.toFun = f :=
rfl
-#align freiman_hom.to_fun_eq_coe FreimanHom.to_fun_eq_coe
-#align add_freiman_hom.to_fun_eq_coe AddFreimanHom.to_fun_eq_coe
+#align freiman_hom.to_fun_eq_coe FreimanHom.toFun_eq_coe
+#align add_freiman_hom.to_fun_eq_coe AddFreimanHom.toFun_eq_coe
@[to_additive (attr := ext)]
theorem ext ⦃f g : A →*[n] β⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -497,8 +494,7 @@ variable [CommMonoid α] [CancelCommMonoid β] {A : Set α} {m n : ℕ}
theorem map_prod_eq_map_prod_of_le [FreimanHomClass F A β n] (f : F) {s t : Multiset α}
(hsA : ∀ x ∈ s, x ∈ A) (htA : ∀ x ∈ t, x ∈ A)
(hs : Multiset.card s = m) (ht : Multiset.card t = m)
- (hst : s.prod = t.prod) (h : m ≤ n) : (s.map f).prod = (t.map f).prod :=
- by
+ (hst : s.prod = t.prod) (h : m ≤ n) : (s.map f).prod = (t.map f).prod := by
obtain rfl | hm := m.eq_zero_or_pos
· rw [card_eq_zero] at hs ht
rw [hs, ht]
@@ -544,10 +540,9 @@ def FreimanHom.toFreimanHom (h : m ≤ n) (f : A →*[n] β) : A →*[m] β wher
"An additive `n`-Freiman homomorphism is
also an additive `m`-Freiman homomorphism for any `m ≤ n`."]
theorem FreimanHom.FreimanHomClass_of_le [FreimanHomClass F A β n] (h : m ≤ n) :
- FreimanHomClass F A β m :=
- {
- map_prod_eq_map_prod' := fun f _ _ hsA htA hs ht hst =>
- map_prod_eq_map_prod_of_le f hsA htA hs ht hst h }
+ FreimanHomClass F A β m where
+ map_prod_eq_map_prod' f _ _ hsA htA hs ht hst :=
+ map_prod_eq_map_prod_of_le f hsA htA hs ht hst h
#align freiman_hom.freiman_hom_class_of_le FreimanHom.FreimanHomClass_of_le
#align add_freiman_hom.add_freiman_hom_class_of_le AddFreimanHom.addFreimanHomClass_of_le
Part of the List.repeat
-> List.replicate
refactor. On Mathlib 4 side, I removed mentions of List.repeat
in #1475 and #1579
algebra.big_operators.basic
@9003f28797c0664a49e4179487267c494477d853
..47adfab39a11a072db552f47594bf8ed2cf8a722
algebra.big_operators.multiset.basic
@9003f28797c0664a49e4179487267c494477d853
..47adfab39a11a072db552f47594bf8ed2cf8a722
algebra.gcd_monoid.multiset
@9003f28797c0664a49e4179487267c494477d853
..f694c7dead66f5d4c80f446c796a5aad14707f0e
algebra.hom.freiman
@9003f28797c0664a49e4179487267c494477d853
..f694c7dead66f5d4c80f446c796a5aad14707f0e
data.list.big_operators.basic
@26f081a2fb920140ed5bc5cc5344e84bcc7cb2b2
..47adfab39a11a072db552f47594bf8ed2cf8a722
data.list.dedup
@6133ae2da6ae6693248bb5451de703f1ef154cc8
..f694c7dead66f5d4c80f446c796a5aad14707f0e
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
! This file was ported from Lean 3 source module algebra.hom.freiman
-! leanprover-community/mathlib commit 9003f28797c0664a49e4179487267c494477d853
+! leanprover-community/mathlib commit f694c7dead66f5d4c80f446c796a5aad14707f0e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -216,7 +216,7 @@ theorem mk_coe (f : A →*[n] β) (h) : mk f h = f :=
#align add_freiman_hom.mk_coe AddFreimanHom.mk_coe
/-- The identity map from a commutative monoid to itself. -/
-@[to_additive "The identity map from an additive commutative monoid to itself.", simps]
+@[to_additive (attr := simps) "The identity map from an additive commutative monoid to itself."]
protected def id (A : Set α) (n : ℕ) : A →*[n] α where
toFun x := x
map_prod_eq_map_prod' _ _ _ _ h := by rw [map_id', map_id', h]
This PR is the result of a slight variant on the following "algorithm"
_
and make all uppercase letters into lowercase_
and make all uppercase letters into lowercase(original_lean3_name, OriginalLean4Name)
#align
statement just before the next empty line#align
statement to have been inserted too early)@@ -222,6 +222,7 @@ protected def id (A : Set α) (n : ℕ) : A →*[n] α where
map_prod_eq_map_prod' _ _ _ _ h := by rw [map_id', map_id', h]
#align freiman_hom.id FreimanHom.id
#align add_freiman_hom.id AddFreimanHom.id
+#align freiman_hom.id_apply FreimanHom.id_apply
/-- Composition of Freiman homomorphisms as a Freiman homomorphism. -/
@[to_additive "Composition of additive Freiman homomorphisms as an additive Freiman homomorphism."]
@@ -287,6 +288,7 @@ theorem comp_id (f : A →*[n] β) {hf} : f.comp (FreimanHom.id A n) hf = f :=
theorem id_comp (f : A →*[n] β) {hf} : (FreimanHom.id B n).comp f hf = f :=
ext fun _ => rfl
#align freiman_hom.id_comp FreimanHom.id_comp
+#align add_freiman_hom.id_comp AddFreimanHom.id_comp
/-- `FreimanHom.const A n b` is the Freiman homomorphism sending everything to `b`. -/
@[to_additive "`AddFreimanHom.const An b` is the Freiman homomorphism sending everything to `b`."]
The unported dependencies are