ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- MulHom.coe_copy_eq
@[to_additive]
theorem MulHom.coe_copy_eq {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
    f.copy f' h = f 
Arguments: {M : Type u_4} {N : Type u_5}
Goal: ∀ {x : Mul M} {x_1 : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = ⇑f), f.copy f' h = f
-- AddMonoidHom.coe_copy
@[to_additive (attr := simp)]
theorem MonoidHom.coe_copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
    (h : f' = f) : (f.copy f' h) = f' 
Arguments: {M : Type u_4} {N : Type u_5}
Goal: ∀ {x : AddZeroClass M} {x_1 : AddZeroClass N} (f : M →+ N) (f' : M → N) (h : f' = ⇑f), ⇑(f.copy f' h) = f'
-- MonoidHom.coe_copy
@[to_additive (attr := simp)]
theorem MonoidHom.coe_copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
    (h : f' = f) : (f.copy f' h) = f' 
Arguments: {M : Type u_4} {N : Type u_5}
Goal: ∀ {x : MulOneClass M} {x_1 : MulOneClass N} (f : M →* N) (f' : M → N) (h : f' = ⇑f), ⇑(f.copy f' h) = f'
-- AddMonoidHom.copy_eq
@[to_additive]
theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
    (h : f' = f) : f.copy f' h = f 
Arguments: {M : Type u_4} {N : Type u_5}
Goal: ∀ {x : AddZeroClass M} {x_1 : AddZeroClass N} (f : M →+ N) (f' : M → N) (h : f' = ⇑f), f.copy f' h = f
-- MonoidHom.copy_eq
@[to_additive]
theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
    (h : f' = f) : f.copy f' h = f 
Arguments: {M : Type u_4} {N : Type u_5}
Goal: ∀ {x : MulOneClass M} {x_1 : MulOneClass N} (f : M →* N) (f' : M → N) (h : f' = ⇑f), f.copy f' h = f
-- OneHom.map_one
@[to_additive]
protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 
Arguments: {M : Type u_4} {N : Type u_5} [One M] [One N] (f : OneHom M N)
Goal: f 1 = 1
-- ZeroHom.map_zero
@[to_additive]
protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 
Arguments: {M : Type u_4} {N : Type u_5} [Zero M] [Zero N] (f : ZeroHom M N)
Goal: f 0 = 0
-- MonoidHom.map_one
@[to_additive "If `f` is an additive monoid homomorphism then `f 0 = 0`."]
protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →* N) : f 1 = 1 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N] (f : M →* N)
Goal: f 1 = 1
-- AddMonoidHom.map_zero
@[to_additive "If `f` is an additive monoid homomorphism then `f 0 = 0`."]
protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →* N) : f 1 = 1 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N] (f : M →+ N)
Goal: f 0 = 0
-- MulHom.map_mul
@[to_additive]
protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b 
Arguments: {M : Type u_4} {N : Type u_5} [Mul M] [Mul N] (f : M →ₙ* N) (a b : M)
Goal: f (a * b) = f a * f b
-- AddHom.map_add
@[to_additive]
protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b 
Arguments: {M : Type u_4} {N : Type u_5} [Add M] [Add N] (f : AddHom M N) (a b : M)
Goal: f (a + b) = f a + f b
-- AddMonoidHom.map_add
@[to_additive "If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`."]
protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
    f (a * b) = f a * f b 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) (a b : M)
Goal: f (a + b) = f a + f b
-- MonoidHom.map_mul
@[to_additive "If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`."]
protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
    f (a * b) = f a * f b 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M)
Goal: f (a * b) = f a * f b
-- AddMonoidHom.map_exists_right_neg
@[to_additive
  "Given an AddMonoid homomorphism `f : M →+ N` and an element `x : M`, if `x` has
  a right inverse, then `f x` has a right inverse too."]
theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f x * y = 1 
Arguments: {M : Type u_4} {N : Type u_5} {F : Type u_9} [AddZeroClass M] [AddZeroClass N] [FunLike F M N] [AddMonoidHomClass F M N] (f : F) {x : M} (hx : ∃ y, x + y = 0)
Goal: ∃ y, f x + y = 0
-- MonoidHom.map_exists_right_inv
@[to_additive
  "Given an AddMonoid homomorphism `f : M →+ N` and an element `x : M`, if `x` has
  a right inverse, then `f x` has a right inverse too."]
theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f x * y = 1 
Arguments: {M : Type u_4} {N : Type u_5} {F : Type u_9} [MulOneClass M] [MulOneClass N] [FunLike F M N] [MonoidHomClass F M N] (f : F) {x : M} (hx : ∃ y, x * y = 1)
Goal: ∃ y, f x * y = 1
-- MonoidHom.map_exists_left_inv
@[to_additive
  "Given an AddMonoid homomorphism `f : M →+ N` and an element `x : M`, if `x` has
  a left inverse, then `f x` has a left inverse too. For elements invertible on both sides see
  `IsAddUnit.map`."]
theorem map_exists_left_inv (f : F) {x : M} (hx : ∃ y, y * x = 1) : ∃ y, y * f x = 1 
Arguments: {M : Type u_4} {N : Type u_5} {F : Type u_9} [MulOneClass M] [MulOneClass N] [FunLike F M N] [MonoidHomClass F M N] (f : F) {x : M} (hx : ∃ y, y * x = 1)
Goal: ∃ y, y * f x = 1
-- AddMonoidHom.map_exists_left_neg
@[to_additive
  "Given an AddMonoid homomorphism `f : M →+ N` and an element `x : M`, if `x` has
  a left inverse, then `f x` has a left inverse too. For elements invertible on both sides see
  `IsAddUnit.map`."]
theorem map_exists_left_inv (f : F) {x : M} (hx : ∃ y, y * x = 1) : ∃ y, y * f x = 1 
Arguments: {M : Type u_4} {N : Type u_5} {F : Type u_9} [AddZeroClass M] [AddZeroClass N] [FunLike F M N] [AddMonoidHomClass F M N] (f : F) {x : M} (hx : ∃ y, y + x = 0)
Goal: ∃ y, y + f x = 0
-- ZeroHom.id_apply
@[to_additive (attr := simps) "The identity map from a type with zero to itself."]
def OneHom.id (M : Type*) [One M] : OneHom M M 
Arguments: (M : Type u_10) [Zero M] (x : M)
Goal: (ZeroHom.id M) x = x
-- OneHom.id_apply
@[to_additive (attr := simps) "The identity map from a type with zero to itself."]
def OneHom.id (M : Type*) [One M] : OneHom M M 
Arguments: (M : Type u_10) [One M] (x : M)
Goal: (OneHom.id M) x = x
-- MulHom.id_apply
@[to_additive (attr := simps) "The identity map from a type with addition to itself."]
def MulHom.id (M : Type*) [Mul M] : M →ₙ* M 
Arguments: (M : Type u_10) [Mul M] (x : M)
Goal: (MulHom.id M) x = x
-- AddHom.id_apply
@[to_additive (attr := simps) "The identity map from a type with addition to itself."]
def MulHom.id (M : Type*) [Mul M] : M →ₙ* M 
Arguments: (M : Type u_10) [Add M] (x : M)
Goal: (AddHom.id M) x = x
-- AddMonoidHom.id_apply
@[to_additive (attr := simps) "The identity map from an additive monoid to itself."]
def MonoidHom.id (M : Type*) [MulOneClass M] : M →* M 
Arguments: (M : Type u_10) [AddZeroClass M] (x : M)
Goal: (AddMonoidHom.id M) x = x
-- MonoidHom.id_apply
@[to_additive (attr := simps) "The identity map from an additive monoid to itself."]
def MonoidHom.id (M : Type*) [MulOneClass M] : M →* M 
Arguments: (M : Type u_10) [MulOneClass M] (x : M)
Goal: (MonoidHom.id M) x = x
-- OneHom.coe_comp
@[to_additive (attr := simp)]
theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
    ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- ZeroHom.coe_comp
@[to_additive (attr := simp)]
theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
    ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Zero M] [Zero N] [Zero P] (g : ZeroHom N P) (f : ZeroHom M N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- MulHom.coe_comp
@[to_additive (attr := simp)]
theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) :
    ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- AddHom.coe_comp
@[to_additive (attr := simp)]
theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) :
    ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Add M] [Add N] [Add P] (g : AddHom N P) (f : AddHom M N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- MonoidHom.coe_comp
@[to_additive (attr := simp)]
theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P]
    (g : N →* P) (f : M →* N) : ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P) (f : M →* N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- AddMonoidHom.coe_comp
@[to_additive (attr := simp)]
theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P]
    (g : N →* P) (f : M →* N) : ↑(g.comp f) = g ∘ f 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddZeroClass P] (g : N →+ P) (f : M →+ N)
Goal: ⇑(g.comp f) = ⇑g ∘ ⇑f
-- OneHom.comp_apply
@[to_additive]
theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
    g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M)
Goal: (g.comp f) x = g (f x)
-- ZeroHom.comp_apply
@[to_additive]
theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
    g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Zero M] [Zero N] [Zero P] (g : ZeroHom N P) (f : ZeroHom M N) (x : M)
Goal: (g.comp f) x = g (f x)
-- AddHom.comp_apply
@[to_additive]
theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
    g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Add M] [Add N] [Add P] (g : AddHom N P) (f : AddHom M N) (x : M)
Goal: (g.comp f) x = g (f x)
-- MulHom.comp_apply
@[to_additive]
theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
    g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M)
Goal: (g.comp f) x = g (f x)
-- MonoidHom.comp_apply
@[to_additive]
theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P]
    (g : N →* P) (f : M →* N) (x : M) : g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P) (f : M →* N) (x : M)
Goal: (g.comp f) x = g (f x)
-- AddMonoidHom.comp_apply
@[to_additive]
theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P]
    (g : N →* P) (f : M →* N) (x : M) : g.comp f x = g (f x) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddZeroClass P] (g : N →+ P) (f : M →+ N) (x : M)
Goal: (g.comp f) x = g (f x)
-- OneHom.comp_assoc
@[to_additive "Composition of additive monoid homomorphisms is associative."]
theorem OneHom.comp_assoc {Q : Type*} [One M] [One N] [One P] [One Q]
    (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q) :
    (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [One M] [One N] [One P] [One Q] (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- ZeroHom.comp_assoc
@[to_additive "Composition of additive monoid homomorphisms is associative."]
theorem OneHom.comp_assoc {Q : Type*} [One M] [One N] [One P] [One Q]
    (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q) :
    (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [Zero M] [Zero N] [Zero P] [Zero Q] (f : ZeroHom M N) (g : ZeroHom N P) (h : ZeroHom P Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- MulHom.comp_assoc
@[to_additive]
theorem MulHom.comp_assoc {Q : Type*} [Mul M] [Mul N] [Mul P] [Mul Q]
    (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [Mul M] [Mul N] [Mul P] [Mul Q] (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- AddHom.comp_assoc
@[to_additive]
theorem MulHom.comp_assoc {Q : Type*} [Mul M] [Mul N] [Mul P] [Mul Q]
    (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [Add M] [Add N] [Add P] [Add Q] (f : AddHom M N) (g : AddHom N P) (h : AddHom P Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- MonoidHom.comp_assoc
@[to_additive]
theorem MonoidHom.comp_assoc {Q : Type*} [MulOneClass M] [MulOneClass N] [MulOneClass P]
    [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
    (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [MulOneClass M] [MulOneClass N] [MulOneClass P] [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- AddMonoidHom.comp_assoc
@[to_additive]
theorem MonoidHom.comp_assoc {Q : Type*} [MulOneClass M] [MulOneClass N] [MulOneClass P]
    [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
    (h.comp g).comp f = h.comp (g.comp f) 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} {Q : Type u_10} [AddZeroClass M] [AddZeroClass N] [AddZeroClass P] [AddZeroClass Q] (f : M →+ N) (g : N →+ P) (h : P →+ Q)
Goal: (h.comp g).comp f = h.comp (g.comp f)
-- OneHom.cancel_right
@[to_additive]
theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- ZeroHom.cancel_right
@[to_additive]
theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Zero M] [Zero N] [Zero P] {g₁ g₂ : ZeroHom N P} {f : ZeroHom M N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- AddHom.cancel_right
@[to_additive]
theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Add M] [Add N] [Add P] {g₁ g₂ : AddHom N P} {f : AddHom M N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- MulHom.cancel_right
@[to_additive]
theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- MonoidHom.cancel_right
@[to_additive]
theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P]
    {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective f) :
    g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- AddMonoidHom.cancel_right
@[to_additive]
theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P]
    {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective f) :
    g₁.comp f = g₂.comp f ↔ g₁ = g₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddZeroClass P] {g₁ g₂ : N →+ P} {f : M →+ N} (hf : Function.Surjective ⇑f)
Goal: g₁.comp f = g₂.comp f ↔ g₁ = g₂
-- ZeroHom.cancel_left
@[to_additive]
theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Zero M] [Zero N] [Zero P] {g : ZeroHom N P} {f₁ f₂ : ZeroHom M N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- OneHom.cancel_left
@[to_additive]
theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- AddHom.cancel_left
@[to_additive]
theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Add M] [Add N] [Add P] {g : AddHom N P} {f₁ f₂ : AddHom M N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- MulHom.cancel_left
@[to_additive]
theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- MonoidHom.cancel_left
@[to_additive]
theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P]
    {g : N →* P} {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P} {f₁ f₂ : M →* N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- AddMonoidHom.cancel_left
@[to_additive]
theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P]
    {g : N →* P} {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ 
Arguments: {M : Type u_4} {N : Type u_5} {P : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddZeroClass P] {g : N →+ P} {f₁ f₂ : M →+ N} (hg : Function.Injective ⇑g)
Goal: g.comp f₁ = g.comp f₂ ↔ f₁ = f₂
-- MonoidHom.toOneHom_injective
@[to_additive]
theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
    Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N]
Goal: Function.Injective MonoidHom.toOneHom
-- AddMonoidHom.toZeroHom_injective
@[to_additive]
theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
    Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N]
Goal: Function.Injective AddMonoidHom.toZeroHom
-- AddMonoidHom.toAddHom_injective
@[to_additive]
theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
    Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N]
Goal: Function.Injective AddMonoidHom.toAddHom
-- MonoidHom.toMulHom_injective
@[to_additive]
theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
    Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N]
Goal: Function.Injective MonoidHom.toMulHom
-- ZeroHom.comp_id
@[to_additive (attr := simp)]
theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [Zero M] [Zero N] (f : ZeroHom M N)
Goal: f.comp (ZeroHom.id M) = f
-- OneHom.comp_id
@[to_additive (attr := simp)]
theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [One M] [One N] (f : OneHom M N)
Goal: f.comp (OneHom.id M) = f
-- AddHom.comp_id
@[to_additive (attr := simp)]
theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [Add M] [Add N] (f : AddHom M N)
Goal: f.comp (AddHom.id M) = f
-- MulHom.comp_id
@[to_additive (attr := simp)]
theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [Mul M] [Mul N] (f : M →ₙ* N)
Goal: f.comp (MulHom.id M) = f
-- AddMonoidHom.comp_id
@[to_additive (attr := simp)]
theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
    f.comp (MonoidHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N] (f : M →+ N)
Goal: f.comp (AddMonoidHom.id M) = f
-- MonoidHom.comp_id
@[to_additive (attr := simp)]
theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
    f.comp (MonoidHom.id M) = f 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N] (f : M →* N)
Goal: f.comp (MonoidHom.id M) = f
-- OneHom.id_comp
@[to_additive (attr := simp)]
theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [One M] [One N] (f : OneHom M N)
Goal: (OneHom.id N).comp f = f
-- ZeroHom.id_comp
@[to_additive (attr := simp)]
theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [Zero M] [Zero N] (f : ZeroHom M N)
Goal: (ZeroHom.id N).comp f = f
-- AddHom.id_comp
@[to_additive (attr := simp)]
theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [Add M] [Add N] (f : AddHom M N)
Goal: (AddHom.id N).comp f = f
-- MulHom.id_comp
@[to_additive (attr := simp)]
theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [Mul M] [Mul N] (f : M →ₙ* N)
Goal: (MulHom.id N).comp f = f
-- MonoidHom.id_comp
@[to_additive (attr := simp)]
theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
    (MonoidHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [MulOneClass M] [MulOneClass N] (f : M →* N)
Goal: (MonoidHom.id N).comp f = f
-- AddMonoidHom.id_comp
@[to_additive (attr := simp)]
theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
    (MonoidHom.id N).comp f = f 
Arguments: {M : Type u_4} {N : Type u_5} [AddZeroClass M] [AddZeroClass N] (f : M →+ N)
Goal: (AddMonoidHom.id N).comp f = f
-- MonoidHom.map_pow
@[to_additive]
protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
    f (a ^ n) = f a ^ n 
Arguments: {M : Type u_4} {N : Type u_5} [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ)
Goal: f (a ^ n) = f a ^ n
-- AddMonoidHom.map_nsmul
@[to_additive]
protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
    f (a ^ n) = f a ^ n 
Arguments: {M : Type u_4} {N : Type u_5} [AddMonoid M] [AddMonoid N] (f : M →+ N) (a : M) (n : ℕ)
Goal: f (n • a) = n • f a
-- AddMonoidHom.map_zsmul'
@[to_additive]
protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
    (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) :
    f (a ^ n) = f a ^ n 
Arguments: {M : Type u_4} {N : Type u_5} [SubNegMonoid M] [SubNegMonoid N] (f : M →+ N) (hf : ∀ (x : M), f (-x) = -f x) (a : M) (n : ℤ)
Goal: f (n • a) = n • f a
-- MonoidHom.map_zpow'
@[to_additive]
protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
    (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) :
    f (a ^ n) = f a ^ n 
Arguments: {M : Type u_4} {N : Type u_5} [DivInvMonoid M] [DivInvMonoid N] (f : M →* N) (hf : ∀ (x : M), f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ)
Goal: f (a ^ n) = f a ^ n
-- Monoid.End.coe_pow
@[simp, norm_cast] lemma coe_pow (f : Monoid.End M) (n : ℕ) : (↑(f ^ n) : M → M) = f^[n] 
Arguments: (M : Type u_4) [MulOneClass M] (f : Monoid.End M) (n : ℕ)
Goal: ⇑(f ^ n) = (⇑f)^[n]
-- Monoid.coe_one
@[simp]
theorem coe_one : ((1 : Monoid.End M) : M → M) = id 
Arguments: (M : Type u_4) [MulOneClass M]
Goal: ⇑1 = id
-- Monoid.coe_mul
@[simp]
theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g 
Arguments: (M : Type u_4) [MulOneClass M] (f g : Monoid.End M)
Goal: ⇑(f * g) = ⇑f ∘ ⇑g
-- AddMonoid.End.coe_one
@[simp, norm_cast] lemma coe_one : ((1 : AddMonoid.End A) : A → A) = id 
Arguments: (A : Type u_10) [AddZeroClass A]
Goal: ⇑1 = id