ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Subsemigroup.closure_induction'
@[to_additive (attr := elab_as_elim) "A dependent version of `AddSubsemigroup.closure_induction`. "]
theorem closure_induction' (s : Set M) {p : ∀ x, x ∈ closure s → Prop}
    (mem : ∀ (x) (h : x ∈ s), p x (subset_closure h))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem hx hy)) {x} (hx : x ∈ closure s) :
    p x hx 
Arguments: {M : Type u_1} [Mul M] (s : Set M) {p : (x : M) → x ∈ Subsemigroup.closure s → Prop} (mem : ∀ (x : M) (h : x ∈ s), p x ⋯) (mul :
  ∀ (x : M) (hx : x ∈ Subsemigroup.closure s) (y : M) (hy : y ∈ Subsemigroup.closure s), p x hx → p y hy → p (x * y) ⋯) {x : M} (hx : x ∈ Subsemigroup.closure s)
Goal: p x hx
-- AddSubsemigroup.closure_induction'
@[to_additive (attr := elab_as_elim) "A dependent version of `AddSubsemigroup.closure_induction`. "]
theorem closure_induction' (s : Set M) {p : ∀ x, x ∈ closure s → Prop}
    (mem : ∀ (x) (h : x ∈ s), p x (subset_closure h))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem hx hy)) {x} (hx : x ∈ closure s) :
    p x hx 
Arguments: {M : Type u_1} [Add M] (s : Set M) {p : (x : M) → x ∈ AddSubsemigroup.closure s → Prop} (mem : ∀ (x : M) (h : x ∈ s), p x ⋯) (mul :
  ∀ (x : M) (hx : x ∈ AddSubsemigroup.closure s) (y : M) (hy : y ∈ AddSubsemigroup.closure s),
    p x hx → p y hy → p (x + y) ⋯) {x : M} (hx : x ∈ AddSubsemigroup.closure s)
Goal: p x hx
-- AddSubsemigroup.closure_induction₂
@[to_additive (attr := elab_as_elim) "An induction principle for additive closure membership for
  predicates with two arguments."]
theorem closure_induction₂ {p : M → M → Prop} {x} {y : M} (hx : x ∈ closure s) (hy : y ∈ closure s)
    (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (Hmul_left : ∀ x y z, p x z → p y z → p (x * y) z)
    (Hmul_right : ∀ x y z, p z x → p z y → p z (x * y)) : p x y 
Arguments: {M : Type u_1} [Add M] {s : Set M} {p : M → M → Prop} {x y : M} (hx : x ∈ AddSubsemigroup.closure s) (hy : y ∈ AddSubsemigroup.closure s) (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (Hmul_left : ∀ (x y z : M), p x z → p y z → p (x + y) z) (Hmul_right : ∀ (x y z : M), p z x → p z y → p z (x + y))
Goal: p x y
-- Subsemigroup.closure_induction₂
@[to_additive (attr := elab_as_elim) "An induction principle for additive closure membership for
  predicates with two arguments."]
theorem closure_induction₂ {p : M → M → Prop} {x} {y : M} (hx : x ∈ closure s) (hy : y ∈ closure s)
    (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (Hmul_left : ∀ x y z, p x z → p y z → p (x * y) z)
    (Hmul_right : ∀ x y z, p z x → p z y → p z (x * y)) : p x y 
Arguments: {M : Type u_1} [Mul M] {s : Set M} {p : M → M → Prop} {x y : M} (hx : x ∈ Subsemigroup.closure s) (hy : y ∈ Subsemigroup.closure s) (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (Hmul_left : ∀ (x y z : M), p x z → p y z → p (x * y) z) (Hmul_right : ∀ (x y z : M), p z x → p z y → p z (x * y))
Goal: p x y
-- Subsemigroup.dense_induction
@[to_additive (attr := elab_as_elim) "If `s` is a dense set in an additive monoid `M`,
  `AddSubsemigroup.closure s = ⊤`, then in order to prove that some predicate `p` holds
  for all `x : M` it suffices to verify `p x` for `x ∈ s`, and verify that `p x` and `p y` imply
  `p (x + y)`."]
theorem dense_induction {p : M → Prop} (x : M) {s : Set M} (hs : closure s = ⊤)
    (mem : ∀ x ∈ s, p x)
    (mul : ∀ x y, p x → p y → p (x * y)) : p x 
Arguments: {M : Type u_1} [Mul M] {p : M → Prop} (x : M) {s : Set M} (hs : Subsemigroup.closure s = ⊤) (mem : ∀ x ∈ s, p x) (mul : ∀ (x y : M), p x → p y → p (x * y))
Goal: p x
-- AddSubsemigroup.dense_induction
@[to_additive (attr := elab_as_elim) "If `s` is a dense set in an additive monoid `M`,
  `AddSubsemigroup.closure s = ⊤`, then in order to prove that some predicate `p` holds
  for all `x : M` it suffices to verify `p x` for `x ∈ s`, and verify that `p x` and `p y` imply
  `p (x + y)`."]
theorem dense_induction {p : M → Prop} (x : M) {s : Set M} (hs : closure s = ⊤)
    (mem : ∀ x ∈ s, p x)
    (mul : ∀ x y, p x → p y → p (x * y)) : p x 
Arguments: {M : Type u_1} [Add M] {p : M → Prop} (x : M) {s : Set M} (hs : AddSubsemigroup.closure s = ⊤) (mem : ∀ x ∈ s, p x) (mul : ∀ (x y : M), p x → p y → p (x + y))
Goal: p x
-- Subsemigroup.closure_eq
@[to_additive (attr := simp) "Additive closure of an additive subsemigroup `S` equals `S`"]
theorem closure_eq : closure (S : Set M) = S 
Arguments: {M : Type u_1} [Mul M] (S : Subsemigroup M)
Goal: Subsemigroup.closure ↑S = S
-- AddSubsemigroup.closure_eq
@[to_additive (attr := simp) "Additive closure of an additive subsemigroup `S` equals `S`"]
theorem closure_eq : closure (S : Set M) = S 
Arguments: {M : Type u_1} [Add M] (S : AddSubsemigroup M)
Goal: AddSubsemigroup.closure ↑S = S
-- AddSubsemigroup.closure_empty
@[to_additive (attr := simp)]
theorem closure_empty : closure (∅ : Set M) = ⊥ 
Arguments: {M : Type u_1} [Add M]
Goal: AddSubsemigroup.closure ∅ = ⊥
-- Subsemigroup.closure_empty
@[to_additive (attr := simp)]
theorem closure_empty : closure (∅ : Set M) = ⊥ 
Arguments: {M : Type u_1} [Mul M]
Goal: Subsemigroup.closure ∅ = ⊥
-- AddSubsemigroup.closure_univ
@[to_additive (attr := simp)]
theorem closure_univ : closure (univ : Set M) = ⊤ 
Arguments: {M : Type u_1} [Add M]
Goal: AddSubsemigroup.closure Set.univ = ⊤
-- Subsemigroup.closure_univ
@[to_additive (attr := simp)]
theorem closure_univ : closure (univ : Set M) = ⊤ 
Arguments: {M : Type u_1} [Mul M]
Goal: Subsemigroup.closure Set.univ = ⊤
-- AddSubsemigroup.closure_union
@[to_additive]
theorem closure_union (s t : Set M) : closure (s ∪ t) = closure s ⊔ closure t 
Arguments: {M : Type u_1} [Add M] (s t : Set M)
Goal: AddSubsemigroup.closure (s ∪ t) = AddSubsemigroup.closure s ⊔ AddSubsemigroup.closure t
-- Subsemigroup.closure_union
@[to_additive]
theorem closure_union (s t : Set M) : closure (s ∪ t) = closure s ⊔ closure t 
Arguments: {M : Type u_1} [Mul M] (s t : Set M)
Goal: Subsemigroup.closure (s ∪ t) = Subsemigroup.closure s ⊔ Subsemigroup.closure t
-- Subsemigroup.closure_iUnion
@[to_additive]
theorem closure_iUnion {ι} (s : ι → Set M) : closure (⋃ i, s i) = ⨆ i, closure (s i) 
Arguments: {M : Type u_1} [Mul M] {ι : Sort u_4} (s : ι → Set M)
Goal: Subsemigroup.closure (⋃ i, s i) = ⨆ i, Subsemigroup.closure (s i)
-- AddSubsemigroup.closure_iUnion
@[to_additive]
theorem closure_iUnion {ι} (s : ι → Set M) : closure (⋃ i, s i) = ⨆ i, closure (s i) 
Arguments: {M : Type u_1} [Add M] {ι : Sort u_4} (s : ι → Set M)
Goal: AddSubsemigroup.closure (⋃ i, s i) = ⨆ i, AddSubsemigroup.closure (s i)
-- Subsemigroup.closure_singleton_le_iff_mem
@[to_additive]
theorem closure_singleton_le_iff_mem (m : M) (p : Subsemigroup M) : closure {m} ≤ p ↔ m ∈ p 
Arguments: {M : Type u_1} [Mul M] (m : M) (p : Subsemigroup M)
Goal: Subsemigroup.closure {m} ≤ p ↔ m ∈ p
-- AddSubsemigroup.closure_singleton_le_iff_mem
@[to_additive]
theorem closure_singleton_le_iff_mem (m : M) (p : Subsemigroup M) : closure {m} ≤ p ↔ m ∈ p 
Arguments: {M : Type u_1} [Add M] (m : M) (p : AddSubsemigroup M)
Goal: AddSubsemigroup.closure {m} ≤ p ↔ m ∈ p
-- AddSubsemigroup.mem_iSup
@[to_additive]
theorem mem_iSup {ι : Sort*} (p : ι → Subsemigroup M) {m : M} :
    (m ∈ ⨆ i, p i) ↔ ∀ N, (∀ i, p i ≤ N) → m ∈ N 
Arguments: {M : Type u_1} [Add M] {ι : Sort u_4} (p : ι → AddSubsemigroup M) {m : M}
Goal: m ∈ ⨆ i, p i ↔ ∀ (N : AddSubsemigroup M), (∀ (i : ι), p i ≤ N) → m ∈ N
-- Subsemigroup.mem_iSup
@[to_additive]
theorem mem_iSup {ι : Sort*} (p : ι → Subsemigroup M) {m : M} :
    (m ∈ ⨆ i, p i) ↔ ∀ N, (∀ i, p i ≤ N) → m ∈ N 
Arguments: {M : Type u_1} [Mul M] {ι : Sort u_4} (p : ι → Subsemigroup M) {m : M}
Goal: m ∈ ⨆ i, p i ↔ ∀ (N : Subsemigroup M), (∀ (i : ι), p i ≤ N) → m ∈ N
-- AddSubsemigroup.iSup_eq_closure
@[to_additive]
theorem iSup_eq_closure {ι : Sort*} (p : ι → Subsemigroup M) :
    ⨆ i, p i = Subsemigroup.closure (⋃ i, (p i : Set M)) 
Arguments: {M : Type u_1} [Add M] {ι : Sort u_4} (p : ι → AddSubsemigroup M)
Goal: ⨆ i, p i = AddSubsemigroup.closure (⋃ i, ↑(p i))
-- Subsemigroup.iSup_eq_closure
@[to_additive]
theorem iSup_eq_closure {ι : Sort*} (p : ι → Subsemigroup M) :
    ⨆ i, p i = Subsemigroup.closure (⋃ i, (p i : Set M)) 
Arguments: {M : Type u_1} [Mul M] {ι : Sort u_4} (p : ι → Subsemigroup M)
Goal: ⨆ i, p i = Subsemigroup.closure (⋃ i, ↑(p i))
-- AddHom.eqOn_closure
@[to_additive "If two add homomorphisms are equal on a set,
  then they are equal on its additive subsemigroup closure."]
theorem eqOn_closure {f g : M →ₙ* N} {s : Set M} (h : Set.EqOn f g s) :
    Set.EqOn f g (closure s) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f g : AddHom M N} {s : Set M} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: Set.EqOn ⇑f ⇑g ↑(AddSubsemigroup.closure s)
-- MulHom.eqOn_closure
@[to_additive "If two add homomorphisms are equal on a set,
  then they are equal on its additive subsemigroup closure."]
theorem eqOn_closure {f g : M →ₙ* N} {s : Set M} (h : Set.EqOn f g s) :
    Set.EqOn f g (closure s) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f g : M →ₙ* N} {s : Set M} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: Set.EqOn ⇑f ⇑g ↑(Subsemigroup.closure s)
-- AddHom.eq_of_eqOn_top
@[to_additive]
theorem eq_of_eqOn_top {f g : M →ₙ* N} (h : Set.EqOn f g (⊤ : Subsemigroup M)) : f = g 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f g : AddHom M N} (h : Set.EqOn ⇑f ⇑g ↑⊤)
Goal: f = g
-- MulHom.eq_of_eqOn_top
@[to_additive]
theorem eq_of_eqOn_top {f g : M →ₙ* N} (h : Set.EqOn f g (⊤ : Subsemigroup M)) : f = g 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f g : M →ₙ* N} (h : Set.EqOn ⇑f ⇑g ↑⊤)
Goal: f = g
-- MulHom.eq_of_eqOn_dense
@[to_additive]
theorem eq_of_eqOn_dense {s : Set M} (hs : closure s = ⊤) {f g : M →ₙ* N} (h : s.EqOn f g) :
    f = g 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {s : Set M} (hs : Subsemigroup.closure s = ⊤) {f g : M →ₙ* N} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: f = g
-- AddHom.eq_of_eqOn_dense
@[to_additive]
theorem eq_of_eqOn_dense {s : Set M} (hs : closure s = ⊤) {f g : M →ₙ* N} (h : s.EqOn f g) :
    f = g 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {s : Set M} (hs : AddSubsemigroup.closure s = ⊤) {f g : AddHom M N} (h : Set.EqOn (⇑f) (⇑g) s)
Goal: f = g
-- MulHom.coe_ofDense
@[to_additive (attr := simp, norm_cast)]
theorem coe_ofDense [Semigroup M] [Semigroup N] {s : Set M} (f : M → N) (hs : closure s = ⊤)
    (hmul) : (ofDense f hs hmul : M → N) = f 
Arguments: {M : Type u_1} {N : Type u_2} [Semigroup M] [Semigroup N] {s : Set M} (f : M → N) (hs : Subsemigroup.closure s = ⊤) (hmul : ∀ (x y : M), y ∈ s → f (x * y) = f x * f y)
Goal: ⇑(MulHom.ofDense f hs hmul) = f
-- AddHom.coe_ofDense
@[to_additive (attr := simp, norm_cast)]
theorem coe_ofDense [Semigroup M] [Semigroup N] {s : Set M} (f : M → N) (hs : closure s = ⊤)
    (hmul) : (ofDense f hs hmul : M → N) = f 
Arguments: {M : Type u_1} {N : Type u_2} [AddSemigroup M] [AddSemigroup N] {s : Set M} (f : M → N) (hs : AddSubsemigroup.closure s = ⊤) (hmul : ∀ (x y : M), y ∈ s → f (x + y) = f x + f y)
Goal: ⇑(AddHom.ofDense f hs hmul) = f
-- SimpContFract.determinant_aux
theorem determinant_aux (hyp : n = 0 ∨ ¬(↑s : GenContFract K).TerminatedAt (n - 1)) :
    ((↑s : GenContFract K).contsAux n).a * ((↑s : GenContFract K).contsAux (n + 1)).b -
      ((↑s : GenContFract K).contsAux n).b * ((↑s : GenContFract K).contsAux (n + 1)).a =
        (-1) ^ n 
Arguments: {K : Type u_1} [Field K] {s : SimpContFract K} {n : ℕ} (hyp : n = 0 ∨ ¬(↑s).TerminatedAt (n - 1))
Goal: ((↑s).contsAux n).a * ((↑s).contsAux (n + 1)).b - ((↑s).contsAux n).b * ((↑s).contsAux (n + 1)).a = (-1) ^ n
-- SimpContFract.determinant
theorem determinant (not_terminatedAt_n : ¬(↑s : GenContFract K).TerminatedAt n) :
    (↑s : GenContFract K).nums n * (↑s : GenContFract K).dens (n + 1) -
      (↑s : GenContFract K).dens n * (↑s : GenContFract K).nums (n + 1) = (-1) ^ (n + 1) 
Arguments: {K : Type u_1} [Field K] {s : SimpContFract K} {n : ℕ} (not_terminatedAt_n : ¬(↑s).TerminatedAt n)
Goal: (↑s).nums n * (↑s).dens (n + 1) - (↑s).dens n * (↑s).nums (n + 1) = (-1) ^ (n + 1)
-- nsmulAddMonoidHom_apply
@[to_additive (attr := simps) "Multiplication by a natural `n` on a commutative additive monoid,
considered as a morphism of additive monoids."]
def powMonoidHom (n : ℕ) : α →* α 
Arguments: {α : Type u_1} [AddCommMonoid α] (n : ℕ)
Goal: ∀ (x : α), (nsmulAddMonoidHom n) x = n • x
-- powMonoidHom_apply
@[to_additive (attr := simps) "Multiplication by a natural `n` on a commutative additive monoid,
considered as a morphism of additive monoids."]
def powMonoidHom (n : ℕ) : α →* α 
Arguments: {α : Type u_1} [CommMonoid α] (n : ℕ)
Goal: ∀ (x : α), (powMonoidHom n) x = x ^ n
-- zpowGroupHom_apply
@[to_additive (attr := simps) "Multiplication by an integer `n` on a commutative additive group,
considered as an additive group homomorphism."]
def zpowGroupHom (n : ℤ) : α →* α 
Arguments: {α : Type u_1} [DivisionCommMonoid α] (n : ℤ)
Goal: ∀ (x : α), (zpowGroupHom n) x = x ^ n
-- zsmulAddGroupHom_apply
@[to_additive (attr := simps) "Multiplication by an integer `n` on a commutative additive group,
considered as an additive group homomorphism."]
def zpowGroupHom (n : ℤ) : α →* α 
Arguments: {α : Type u_1} [SubtractionCommMonoid α] (n : ℤ)
Goal: ∀ (x : α), (zsmulAddGroupHom n) x = n • x
-- coe_invMonoidHom
@[simp]
theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv 
Arguments: {α : Type u_1} [DivisionCommMonoid α]
Goal: ⇑invMonoidHom = Inv.inv
-- invMonoidHom_apply
@[simp]
theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ 
Arguments: {α : Type u_1} [DivisionCommMonoid α] (a : α)
Goal: invMonoidHom a = a⁻¹
-- AddHom.add_apply
@[to_additive (attr := simp)]
theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
    (f * g) x = f x * g x 
Arguments: {M : Type u_9} {N : Type u_10} [Add M] [AddCommSemigroup N] (f g : AddHom M N) (x : M)
Goal: (f + g) x = f x + g x
-- MulHom.mul_apply
@[to_additive (attr := simp)]
theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
    (f * g) x = f x * g x 
Arguments: {M : Type u_9} {N : Type u_10} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M)
Goal: (f * g) x = f x * g x
-- MulHom.mul_comp
@[to_additive]
theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N)
Goal: (g₁ * g₂).comp f = g₁.comp f * g₂.comp f
-- AddHom.add_comp
@[to_additive]
theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [Add M] [Add N] [AddCommSemigroup P] (g₁ g₂ : AddHom N P) (f : AddHom M N)
Goal: (g₁ + g₂).comp f = g₁.comp f + g₂.comp f
-- MulHom.comp_mul
@[to_additive]
theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N)
Goal: g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂
-- AddHom.comp_add
@[to_additive]
theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [Add M] [AddCommSemigroup N] [AddCommSemigroup P] (g : AddHom N P) (f₁ f₂ : AddHom M N)
Goal: g.comp (f₁ + f₂) = g.comp f₁ + g.comp f₂
-- injective_iff_map_eq_zero
@[to_additive
  "A homomorphism from an additive group to an additive monoid is injective iff
  its kernel is trivial. For the iff statement on the triviality of the kernel,
  see `injective_iff_map_eq_zero'`."]
theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H]
    [FunLike F G H] [MonoidHomClass F G H]
    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 
Arguments: {F : Type u_8} {G : Type u_9} {H : Type u_10} [AddGroup G] [AddZeroClass H] [FunLike F G H] [AddMonoidHomClass F G H] (f : F)
Goal: Function.Injective ⇑f ↔ ∀ (a : G), f a = 0 → a = 0
-- injective_iff_map_eq_one
@[to_additive
  "A homomorphism from an additive group to an additive monoid is injective iff
  its kernel is trivial. For the iff statement on the triviality of the kernel,
  see `injective_iff_map_eq_zero'`."]
theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H]
    [FunLike F G H] [MonoidHomClass F G H]
    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 
Arguments: {F : Type u_8} {G : Type u_9} {H : Type u_10} [Group G] [MulOneClass H] [FunLike F G H] [MonoidHomClass F G H] (f : F)
Goal: Function.Injective ⇑f ↔ ∀ (a : G), f a = 1 → a = 1
-- injective_iff_map_eq_zero'
@[to_additive
  "A homomorphism from an additive group to an additive monoid is injective iff its
  kernel is trivial, stated as an iff on the triviality of the kernel. For the implication, see
  `injective_iff_map_eq_zero`."]
theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H]
    [FunLike F G H] [MonoidHomClass F G H]
    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 
Arguments: {F : Type u_8} {G : Type u_9} {H : Type u_10} [AddGroup G] [AddZeroClass H] [FunLike F G H] [AddMonoidHomClass F G H] (f : F)
Goal: Function.Injective ⇑f ↔ ∀ (a : G), f a = 0 ↔ a = 0
-- injective_iff_map_eq_one'
@[to_additive
  "A homomorphism from an additive group to an additive monoid is injective iff its
  kernel is trivial, stated as an iff on the triviality of the kernel. For the implication, see
  `injective_iff_map_eq_zero`."]
theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H]
    [FunLike F G H] [MonoidHomClass F G H]
    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 
Arguments: {F : Type u_8} {G : Type u_9} {H : Type u_10} [Group G] [MulOneClass H] [FunLike F G H] [MonoidHomClass F G H] (f : F)
Goal: Function.Injective ⇑f ↔ ∀ (a : G), f a = 1 ↔ a = 1
-- MonoidHom.coe_of_map_mul_inv
@[to_additive (attr := simp)]
theorem coe_of_map_mul_inv {H : Type*} [Group H] (f : G → H)
    (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
  ↑(ofMapMulInv f map_div) = f 
Arguments: {G : Type u_6} [Group G] {H : Type u_9} [Group H] (f : G → H) (map_div : ∀ (a b : G), f (a * b⁻¹) = f a * (f b)⁻¹)
Goal: ⇑(MonoidHom.ofMapMulInv f map_div) = f
-- AddMonoidHom.coe_of_map_add_neg
@[to_additive (attr := simp)]
theorem coe_of_map_mul_inv {H : Type*} [Group H] (f : G → H)
    (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
  ↑(ofMapMulInv f map_div) = f 
Arguments: {G : Type u_6} [AddGroup G] {H : Type u_9} [AddGroup H] (f : G → H) (map_div : ∀ (a b : G), f (a + -b) = f a + -f b)
Goal: ⇑(AddMonoidHom.ofMapAddNeg f map_div) = f
-- MonoidHom.coe_of_map_div
@[to_additive (attr := simp)]
theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
    ↑(ofMapDiv f hf) = f 
Arguments: {G : Type u_6} [Group G] {H : Type u_9} [Group H] (f : G → H) (hf : ∀ (x y : G), f (x / y) = f x / f y)
Goal: ⇑(MonoidHom.ofMapDiv f hf) = f
-- AddMonoidHom.coe_of_map_sub
@[to_additive (attr := simp)]
theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
    ↑(ofMapDiv f hf) = f 
Arguments: {G : Type u_6} [AddGroup G] {H : Type u_9} [AddGroup H] (f : G → H) (hf : ∀ (x y : G), f (x - y) = f x - f y)
Goal: ⇑(AddMonoidHom.ofMapSub f hf) = f
-- MonoidHom.mul_apply
@[to_additive (attr := simp)] lemma mul_apply (f g : M →* N) (x : M) : (f * g) x = f x * g x 
Arguments: {M : Type u_3} {N : Type u_4} [MulOneClass M] [CommMonoid N] (f g : M →* N) (x : M)
Goal: (f * g) x = f x * g x
-- AddMonoidHom.add_apply
@[to_additive (attr := simp)] lemma mul_apply (f g : M →* N) (x : M) : (f * g) x = f x * g x 
Arguments: {M : Type u_3} {N : Type u_4} [AddZeroClass M] [AddCommMonoid N] (f g : M →+ N) (x : M)
Goal: (f + g) x = f x + g x
-- MonoidHom.mul_comp
@[to_additive]
lemma mul_comp [MulOneClass P] (g₁ g₂ : M →* N) (f : P →* M) :
    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [MulOneClass M] [CommMonoid N] [MulOneClass P] (g₁ g₂ : M →* N) (f : P →* M)
Goal: (g₁ * g₂).comp f = g₁.comp f * g₂.comp f
-- AddMonoidHom.add_comp
@[to_additive]
lemma mul_comp [MulOneClass P] (g₁ g₂ : M →* N) (f : P →* M) :
    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [AddZeroClass M] [AddCommMonoid N] [AddZeroClass P] (g₁ g₂ : M →+ N) (f : P →+ M)
Goal: (g₁ + g₂).comp f = g₁.comp f + g₂.comp f
-- AddMonoidHom.comp_add
@[to_additive]
lemma comp_mul [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [AddZeroClass M] [AddCommMonoid N] [AddCommMonoid P] (g : N →+ P) (f₁ f₂ : M →+ N)
Goal: g.comp (f₁ + f₂) = g.comp f₁ + g.comp f₂
-- MonoidHom.comp_mul
@[to_additive]
lemma comp_mul [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ 
Arguments: {M : Type u_3} {N : Type u_4} {P : Type u_5} [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N)
Goal: g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂
-- AddMonoidHom.neg_apply
@[to_additive (attr := simp)] lemma inv_apply (f : M →* G) (x : M) : f⁻¹ x = (f x)⁻¹ 
Arguments: {M : Type u_3} {G : Type u_6} [AddZeroClass M] [AddCommGroup G] (f : M →+ G) (x : M)
Goal: (-f) x = -f x
-- MonoidHom.inv_apply
@[to_additive (attr := simp)] lemma inv_apply (f : M →* G) (x : M) : f⁻¹ x = (f x)⁻¹ 
Arguments: {M : Type u_3} {G : Type u_6} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M)
Goal: f⁻¹ x = (f x)⁻¹
-- MonoidHom.inv_comp
@[to_additive (attr := simp)]
theorem inv_comp (φ : N →* G) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ 
Arguments: {M : Type u_3} {N : Type u_4} {G : Type u_6} [MulOneClass M] [MulOneClass N] [CommGroup G] (φ : N →* G) (ψ : M →* N)
Goal: φ⁻¹.comp ψ = (φ.comp ψ)⁻¹
-- AddMonoidHom.neg_comp
@[to_additive (attr := simp)]
theorem inv_comp (φ : N →* G) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ 
Arguments: {M : Type u_3} {N : Type u_4} {G : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddCommGroup G] (φ : N →+ G) (ψ : M →+ N)
Goal: (-φ).comp ψ = -φ.comp ψ
-- MonoidHom.comp_inv
@[to_additive (attr := simp)]
theorem comp_inv (φ : G →* H) (ψ : M →* G) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ 
Arguments: {M : Type u_3} {G : Type u_6} {H : Type u_7} [MulOneClass M] [CommGroup G] [CommGroup H] (φ : G →* H) (ψ : M →* G)
Goal: φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹
-- AddMonoidHom.comp_neg
@[to_additive (attr := simp)]
theorem comp_inv (φ : G →* H) (ψ : M →* G) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ 
Arguments: {M : Type u_3} {G : Type u_6} {H : Type u_7} [AddZeroClass M] [AddCommGroup G] [AddCommGroup H] (φ : G →+ H) (ψ : M →+ G)
Goal: φ.comp (-ψ) = -φ.comp ψ
-- MonoidHom.div_apply
@[to_additive (attr := simp)] lemma div_apply (f g : M →* G) (x : M) : (f / g) x = f x / g x 
Arguments: {M : Type u_3} {G : Type u_6} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M)
Goal: (f / g) x = f x / g x
-- AddMonoidHom.sub_apply
@[to_additive (attr := simp)] lemma div_apply (f g : M →* G) (x : M) : (f / g) x = f x / g x 
Arguments: {M : Type u_3} {G : Type u_6} [AddZeroClass M] [AddCommGroup G] (f g : M →+ G) (x : M)
Goal: (f - g) x = f x - g x
-- AddMonoidHom.sub_comp
@[to_additive (attr := simp)]
lemma div_comp (f g : N →* G) (h : M →* N) : (f / g).comp h = f.comp h / g.comp h 
Arguments: {M : Type u_3} {N : Type u_4} {G : Type u_6} [AddZeroClass M] [AddZeroClass N] [AddCommGroup G] (f g : N →+ G) (h : M →+ N)
Goal: (f - g).comp h = f.comp h - g.comp h
-- MonoidHom.div_comp
@[to_additive (attr := simp)]
lemma div_comp (f g : N →* G) (h : M →* N) : (f / g).comp h = f.comp h / g.comp h 
Arguments: {M : Type u_3} {N : Type u_4} {G : Type u_6} [MulOneClass M] [MulOneClass N] [CommGroup G] (f g : N →* G) (h : M →* N)
Goal: (f / g).comp h = f.comp h / g.comp h
-- AddMonoidHom.comp_sub
@[to_additive (attr := simp)]
lemma comp_div (f : G →* H) (g h : M →* G) : f.comp (g / h) = f.comp g / f.comp h 
Arguments: {M : Type u_3} {G : Type u_6} {H : Type u_7} [AddZeroClass M] [AddCommGroup G] [AddCommGroup H] (f : G →+ H) (g h : M →+ G)
Goal: f.comp (g - h) = f.comp g - f.comp h