ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Finsupp.sum_add_eq_sum_add_of_exists
@[to_additive]
lemma prod_mul_eq_prod_mul_of_exists [Zero M] [CommMonoid N]
    {f : α →₀ M} {g : α → M → N} {n₁ n₂ : N}
    (a : α) (ha : a ∈ f.support)
    (h : g a (f a) * n₁ = g a (f a) * n₂) :
    f.prod g * n₁ = f.prod g * n₂ 
Arguments: {α : Type u_1} {M : Type u_8} {N : Type u_10} [Zero M] [AddCommMonoid N] {f : α →₀ M} {g : α → M → N} {n₁ n₂ : N} (a : α) (ha : a ∈ f.support) (h : g a (f a) + n₁ = g a (f a) + n₂)
Goal: f.sum g + n₁ = f.sum g + n₂
-- Finset.sum_apply'
theorem Finset.sum_apply' : (∑ k ∈ s, f k) i = ∑ k ∈ s, f k i 
Arguments: {α : Type u_1} {ι : Type u_2} {A : Type u_4} [AddCommMonoid A] {s : Finset α} {f : α → ι →₀ A} (i : ι)
Goal: (∑ k ∈ s, f k) i = ∑ k ∈ s, (f k) i
-- Finsupp.sum_apply'
theorem Finsupp.sum_apply' : g.sum k x = g.sum fun i b => k i b x 
Arguments: {ι : Type u_2} {γ : Type u_3} {A : Type u_4} {B : Type u_5} [AddCommMonoid A] [AddCommMonoid B] (g : ι →₀ A) (k : ι → A → γ → B) (x : γ)
Goal: g.sum k x = g.sum fun i b => k i b x
-- Finsupp.sum_sum_index'
theorem Finsupp.sum_sum_index' : (∑ x ∈ s, f x).sum t = ∑ x ∈ s, (f x).sum t 
Arguments: {α : Type u_1} {ι : Type u_2} {A : Type u_4} {C : Type u_6} [AddCommMonoid A] [AddCommMonoid C] {t : ι → A → C} (h0 : ∀ (i : ι), t i 0 = 0) (h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y) {s : Finset α} {f : α → ι →₀ A}
Goal: (∑ x ∈ s, f x).sum t = ∑ x ∈ s, (f x).sum t
-- Finsupp.sum_mul
theorem Finsupp.sum_mul (b : S) (s : α →₀ R) {f : α → R → S} :
    s.sum f * b = s.sum fun a c => f a c * b 
Arguments: {α : Type u_1} {R : Type u_14} {S : Type u_15} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] (b : S) (s : α →₀ R) {f : α → R → S}
Goal: s.sum f * b = s.sum fun a c => f a c * b
-- Finsupp.mul_sum
theorem Finsupp.mul_sum (b : S) (s : α →₀ R) {f : α → R → S} :
    b * s.sum f = s.sum fun a c => b * f a c 
Arguments: {α : Type u_1} {R : Type u_14} {S : Type u_15} [NonUnitalNonAssocSemiring R] [NonUnitalNonAssocSemiring S] (b : S) (s : α →₀ R) {f : α → R → S}
Goal: b * s.sum f = s.sum fun a c => b * f a c
-- Nat.prod_pow_pos_of_zero_not_mem_support
theorem prod_pow_pos_of_zero_not_mem_support {f : ℕ →₀ ℕ} (nhf : 0 ∉ f.support) :
    0 < f.prod (· ^ ·) 
Arguments: {f : ℕ →₀ ℕ} (nhf : 0 ∉ f.support)
Goal: 0 < f.prod fun x x_1 => x ^ x_1
-- FreeAddMagma.add_eq
@[to_additive (attr := simp)]
theorem mul_eq (x y : FreeMagma α) : mul x y = x * y 
Arguments: {α : Type u} (x y : FreeAddMagma α)
Goal: x.add y = x + y
-- FreeMagma.mul_eq
@[to_additive (attr := simp)]
theorem mul_eq (x y : FreeMagma α) : mul x y = x * y 
Arguments: {α : Type u} (x y : FreeMagma α)
Goal: x.mul y = x * y
-- FreeMagma.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {β : Type v} [Mul β] {f g : FreeMagma α →ₙ* β} (h : f ∘ of = g ∘ of) : f = g 
Arguments: {α : Type u} {β : Type v} [Mul β] {f g : FreeMagma α →ₙ* β} (h : ⇑f ∘ FreeMagma.of = ⇑g ∘ FreeMagma.of)
Goal: f = g
-- FreeAddMagma.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {β : Type v} [Mul β] {f g : FreeMagma α →ₙ* β} (h : f ∘ of = g ∘ of) : f = g 
Arguments: {α : Type u} {β : Type v} [Add β] {f g : AddHom (FreeAddMagma α) β} (h : ⇑f ∘ FreeAddMagma.of = ⇑g ∘ FreeAddMagma.of)
Goal: f = g
-- FreeMagma.lift_symm_apply
@[to_additive (attr := simps symm_apply)
"The universal property of the free additive magma expressing its adjointness."]
def lift : (α → β) ≃ (FreeMagma α →ₙ* β) 
Arguments: {α : Type u} {β : Type v} [Mul β] (F : FreeMagma α →ₙ* β)
Goal: ∀ (a : α), FreeMagma.lift.symm F a = (⇑F ∘ FreeMagma.of) a
-- FreeAddMagma.lift_symm_apply
@[to_additive (attr := simps symm_apply)
"The universal property of the free additive magma expressing its adjointness."]
def lift : (α → β) ≃ (FreeMagma α →ₙ* β) 
Arguments: {α : Type u} {β : Type v} [Add β] (F : AddHom (FreeAddMagma α) β)
Goal: ∀ (a : α), FreeAddMagma.lift.symm F a = (⇑F ∘ FreeAddMagma.of) a
-- FreeAddMagma.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x) : lift f (of x) = f x 
Arguments: {α : Type u} {β : Type v} [Add β] (f : α → β) (x : α)
Goal: (FreeAddMagma.lift f) (FreeAddMagma.of x) = f x
-- FreeMagma.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x) : lift f (of x) = f x 
Arguments: {α : Type u} {β : Type v} [Mul β] (f : α → β) (x : α)
Goal: (FreeMagma.lift f) (FreeMagma.of x) = f x
-- FreeAddMagma.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : lift f ∘ of = f 
Arguments: {α : Type u} {β : Type v} [Add β] (f : α → β)
Goal: ⇑(FreeAddMagma.lift f) ∘ FreeAddMagma.of = f
-- FreeMagma.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : lift f ∘ of = f 
Arguments: {α : Type u} {β : Type v} [Mul β] (f : α → β)
Goal: ⇑(FreeMagma.lift f) ∘ FreeMagma.of = f
-- FreeMagma.lift_comp_of'
@[to_additive (attr := simp)]
theorem lift_comp_of' (f : FreeMagma α →ₙ* β) : lift (f ∘ of) = f 
Arguments: {α : Type u} {β : Type v} [Mul β] (f : FreeMagma α →ₙ* β)
Goal: FreeMagma.lift (⇑f ∘ FreeMagma.of) = f
-- FreeAddMagma.lift_comp_of'
@[to_additive (attr := simp)]
theorem lift_comp_of' (f : FreeMagma α →ₙ* β) : lift (f ∘ of) = f 
Arguments: {α : Type u} {β : Type v} [Add β] (f : AddHom (FreeAddMagma α) β)
Goal: FreeAddMagma.lift (⇑f ∘ FreeAddMagma.of) = f
-- FreeMagma.map_of
@[to_additive (attr := simp)]
theorem map_of (x) : map f (of x) = of (f x) 
Arguments: {α : Type u} {β : Type v} (f : α → β) (x : α)
Goal: (FreeMagma.map f) (FreeMagma.of x) = FreeMagma.of (f x)
-- FreeAddMagma.map_of
@[to_additive (attr := simp)]
theorem map_of (x) : map f (of x) = of (f x) 
Arguments: {α : Type u} {β : Type v} (f : α → β) (x : α)
Goal: (FreeAddMagma.map f) (FreeAddMagma.of x) = FreeAddMagma.of (f x)
-- FreeAddMagma.map_pure
@[to_additive (attr := simp)]
theorem map_pure (f : α → β) (x) : (f <$> pure x : FreeMagma β) = pure (f x) 
Arguments: {α β : Type u} (f : α → β) (x : α)
Goal: f <$> pure x = pure (f x)
-- FreeMagma.map_pure
@[to_additive (attr := simp)]
theorem map_pure (f : α → β) (x) : (f <$> pure x : FreeMagma β) = pure (f x) 
Arguments: {α β : Type u} (f : α → β) (x : α)
Goal: f <$> pure x = pure (f x)
-- FreeAddMagma.map_add'
@[to_additive (attr := simp)]
theorem map_mul' (f : α → β) (x y : FreeMagma α) : f <$> (x * y) = f <$> x * f <$> y 
Arguments: {α β : Type u} (f : α → β) (x y : FreeAddMagma α)
Goal: f <$> (x + y) = f <$> x + f <$> y
-- FreeMagma.map_mul'
@[to_additive (attr := simp)]
theorem map_mul' (f : α → β) (x y : FreeMagma α) : f <$> (x * y) = f <$> x * f <$> y 
Arguments: {α β : Type u} (f : α → β) (x y : FreeMagma α)
Goal: f <$> (x * y) = f <$> x * f <$> y
-- FreeAddMagma.pure_bind
@[to_additive (attr := simp)]
theorem pure_bind (f : α → FreeMagma β) (x) : pure x >>= f = f x 
Arguments: {α β : Type u} (f : α → FreeAddMagma β) (x : α)
Goal: pure x >>= f = f x
-- FreeMagma.pure_bind
@[to_additive (attr := simp)]
theorem pure_bind (f : α → FreeMagma β) (x) : pure x >>= f = f x 
Arguments: {α β : Type u} (f : α → FreeMagma β) (x : α)
Goal: pure x >>= f = f x
-- FreeAddMagma.add_bind
@[to_additive (attr := simp)]
theorem mul_bind (f : α → FreeMagma β) (x y : FreeMagma α) : x * y >>= f = (x >>= f) * (y >>= f) 
Arguments: {α β : Type u} (f : α → FreeAddMagma β) (x y : FreeAddMagma α)
Goal: x + y >>= f = (x >>= f) + (y >>= f)
-- FreeMagma.mul_bind
@[to_additive (attr := simp)]
theorem mul_bind (f : α → FreeMagma β) (x y : FreeMagma α) : x * y >>= f = (x >>= f) * (y >>= f) 
Arguments: {α β : Type u} (f : α → FreeMagma β) (x y : FreeMagma α)
Goal: x * y >>= f = (x >>= f) * (y >>= f)
-- FreeMagma.pure_seq
@[to_additive (attr := simp)]
theorem pure_seq {α β : Type u} {f : α → β} {x : FreeMagma α} : pure f <*> x = f <$> x 
Arguments: {α β : Type u} {f : α → β} {x : FreeMagma α}
Goal: (Seq.seq (pure f) fun x_1 => x) = f <$> x
-- FreeAddMagma.pure_seq
@[to_additive (attr := simp)]
theorem pure_seq {α β : Type u} {f : α → β} {x : FreeMagma α} : pure f <*> x = f <$> x 
Arguments: {α β : Type u} {f : α → β} {x : FreeAddMagma α}
Goal: (Seq.seq (pure f) fun x_1 => x) = f <$> x
-- FreeAddMagma.add_seq
@[to_additive (attr := simp)]
theorem mul_seq {α β : Type u} {f g : FreeMagma (α → β)} {x : FreeMagma α} :
    f * g <*> x = (f <*> x) * (g <*> x) 
Arguments: {α β : Type u} {f g : FreeAddMagma (α → β)} {x : FreeAddMagma α}
Goal: (Seq.seq (f + g) fun x_1 => x) = (Seq.seq f fun x_1 => x) + Seq.seq g fun x_1 => x
-- FreeMagma.mul_seq
@[to_additive (attr := simp)]
theorem mul_seq {α β : Type u} {f g : FreeMagma (α → β)} {x : FreeMagma α} :
    f * g <*> x = (f <*> x) * (g <*> x) 
Arguments: {α β : Type u} {f g : FreeMagma (α → β)} {x : FreeMagma α}
Goal: (Seq.seq (f * g) fun x_1 => x) = (Seq.seq f fun x_1 => x) * Seq.seq g fun x_1 => x
-- FreeMagma.traverse_pure
@[to_additive (attr := simp)]
theorem traverse_pure (x) : traverse F (pure x : FreeMagma α) = pure <$> F x 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x : α)
Goal: traverse F (pure x) = pure <$> F x
-- FreeAddMagma.traverse_pure
@[to_additive (attr := simp)]
theorem traverse_pure (x) : traverse F (pure x : FreeMagma α) = pure <$> F x 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x : α)
Goal: traverse F (pure x) = pure <$> F x
-- FreeMagma.traverse_pure'
@[to_additive (attr := simp)]
theorem traverse_pure' : traverse F ∘ pure = fun x ↦ (pure <$> F x : m (FreeMagma β)) 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β)
Goal: traverse F ∘ pure = fun x => pure <$> F x
-- FreeAddMagma.traverse_pure'
@[to_additive (attr := simp)]
theorem traverse_pure' : traverse F ∘ pure = fun x ↦ (pure <$> F x : m (FreeMagma β)) 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β)
Goal: traverse F ∘ pure = fun x => pure <$> F x
-- FreeMagma.traverse_mul
@[to_additive (attr := simp)]
theorem traverse_mul (x y : FreeMagma α) :
    traverse F (x * y) = (· * ·) <$> traverse F x <*> traverse F y 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x y : FreeMagma α)
Goal: traverse F (x * y) = Seq.seq ((fun x x_1 => x * x_1) <$> traverse F x) fun x => traverse F y
-- FreeAddMagma.traverse_add
@[to_additive (attr := simp)]
theorem traverse_mul (x y : FreeMagma α) :
    traverse F (x * y) = (· * ·) <$> traverse F x <*> traverse F y 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x y : FreeAddMagma α)
Goal: traverse F (x + y) = Seq.seq ((fun x x_1 => x + x_1) <$> traverse F x) fun x => traverse F y
-- FreeAddMagma.traverse_add'
@[to_additive (attr := simp)]
theorem traverse_mul' :
    Function.comp (traverse F) ∘ (HMul.hMul : FreeMagma α → FreeMagma α → FreeMagma α) = fun x y ↦
      (· * ·) <$> traverse F x <*> traverse F y 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β)
Goal: Function.comp (traverse F) ∘ HAdd.hAdd = fun x y =>
  Seq.seq ((fun x x_1 => x + x_1) <$> traverse F x) fun x => traverse F y
-- FreeMagma.traverse_mul'
@[to_additive (attr := simp)]
theorem traverse_mul' :
    Function.comp (traverse F) ∘ (HMul.hMul : FreeMagma α → FreeMagma α → FreeMagma α) = fun x y ↦
      (· * ·) <$> traverse F x <*> traverse F y 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β)
Goal: Function.comp (traverse F) ∘ HMul.hMul = fun x y =>
  Seq.seq ((fun x x_1 => x * x_1) <$> traverse F x) fun x => traverse F y
-- FreeAddMagma.traverse_eq
@[to_additive (attr := simp)]
theorem traverse_eq (x) : FreeMagma.traverse F x = traverse F x 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x : FreeAddMagma α)
Goal: FreeAddMagma.traverse F x = traverse F x
-- FreeMagma.traverse_eq
@[to_additive (attr := simp)]
theorem traverse_eq (x) : FreeMagma.traverse F x = traverse F x 
Arguments: {α β : Type u} {m : Type u → Type u} [Applicative m] (F : α → m β) (x : FreeMagma α)
Goal: FreeMagma.traverse F x = traverse F x
-- FreeMagma.mul_map_seq
@[to_additive (attr := simp, nolint simpNF)]
theorem mul_map_seq (x y : FreeMagma α) :
    ((· * ·) <$> x <*> y : Id (FreeMagma α)) = (x * y : FreeMagma α) 
Arguments: {α : Type u} (x y : FreeMagma α)
Goal: (Seq.seq ((fun x x_1 => x * x_1) <$> x) fun x => y) = x * y
-- FreeAddMagma.add_map_seq
@[to_additive (attr := simp, nolint simpNF)]
theorem mul_map_seq (x y : FreeMagma α) :
    ((· * ·) <$> x <*> y : Id (FreeMagma α)) = (x * y : FreeMagma α) 
Arguments: {α : Type u} (x y : FreeAddMagma α)
Goal: (Seq.seq ((fun x x_1 => x + x_1) <$> x) fun x => y) = x + y
-- FreeAddMagma.length_pos
@[to_additive "The length of an element of a free additive magma is positive."]
lemma FreeMagma.length_pos {α : Type u} (x : FreeMagma α) : 0 < x.length 
Arguments: {α : Type u} (x : FreeAddMagma α)
Goal: 0 < x.length
-- FreeMagma.length_pos
@[to_additive "The length of an element of a free additive magma is positive."]
lemma FreeMagma.length_pos {α : Type u} (x : FreeMagma α) : 0 < x.length 
Arguments: {α : Type u} (x : FreeMagma α)
Goal: 0 < x.length
-- Magma.AssocQuotient.quot_mk_assoc
@[to_additive]
theorem quot_mk_assoc (x y z : α) : Quot.mk (AssocRel α) (x * y * z) = Quot.mk _ (x * (y * z)) 
Arguments: {α : Type u} [Mul α] (x y z : α)
Goal: Quot.mk (Magma.AssocRel α) (x * y * z) = Quot.mk (Magma.AssocRel α) (x * (y * z))
-- AddMagma.FreeAddSemigroup.quot_mk_assoc
@[to_additive]
theorem quot_mk_assoc (x y z : α) : Quot.mk (AssocRel α) (x * y * z) = Quot.mk _ (x * (y * z)) 
Arguments: {α : Type u} [Add α] (x y z : α)
Goal: Quot.mk (AddMagma.AssocRel α) (x + y + z) = Quot.mk (AddMagma.AssocRel α) (x + (y + z))
-- Magma.AssocQuotient.quot_mk_assoc_left
@[to_additive]
theorem quot_mk_assoc_left (x y z w : α) :
    Quot.mk (AssocRel α) (x * (y * z * w)) = Quot.mk _ (x * (y * (z * w))) 
Arguments: {α : Type u} [Mul α] (x y z w : α)
Goal: Quot.mk (Magma.AssocRel α) (x * (y * z * w)) = Quot.mk (Magma.AssocRel α) (x * (y * (z * w)))
-- AddMagma.FreeAddSemigroup.quot_mk_assoc_left
@[to_additive]
theorem quot_mk_assoc_left (x y z w : α) :
    Quot.mk (AssocRel α) (x * (y * z * w)) = Quot.mk _ (x * (y * (z * w))) 
Arguments: {α : Type u} [Add α] (x y z w : α)
Goal: Quot.mk (AddMagma.AssocRel α) (x + (y + z + w)) = Quot.mk (AddMagma.AssocRel α) (x + (y + (z + w)))
-- AddMagma.FreeAddSemigroup.induction_on
@[to_additive (attr := elab_as_elim, induction_eliminator)]
protected theorem induction_on {C : AssocQuotient α → Prop} (x : AssocQuotient α)
    (ih : ∀ x, C (of x)) : C x 
Arguments: {α : Type u} [Add α] {C : AddMagma.FreeAddSemigroup α → Prop} (x : AddMagma.FreeAddSemigroup α) (ih : ∀ (x : α), C (AddMagma.FreeAddSemigroup.of x))
Goal: C x
-- Magma.AssocQuotient.induction_on
@[to_additive (attr := elab_as_elim, induction_eliminator)]
protected theorem induction_on {C : AssocQuotient α → Prop} (x : AssocQuotient α)
    (ih : ∀ x, C (of x)) : C x 
Arguments: {α : Type u} [Mul α] {C : Magma.AssocQuotient α → Prop} (x : Magma.AssocQuotient α) (ih : ∀ (x : α), C (Magma.AssocQuotient.of x))
Goal: C x
-- Magma.AssocQuotient.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {f g : AssocQuotient α →ₙ* β} (h : f.comp of = g.comp of) : f = g 
Arguments: {α : Type u} [Mul α] {β : Type v} [Semigroup β] {f g : Magma.AssocQuotient α →ₙ* β} (h : f.comp Magma.AssocQuotient.of = g.comp Magma.AssocQuotient.of)
Goal: f = g
-- AddMagma.FreeAddSemigroup.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {f g : AssocQuotient α →ₙ* β} (h : f.comp of = g.comp of) : f = g 
Arguments: {α : Type u} [Add α] {β : Type v} [AddSemigroup β] {f g : AddHom (AddMagma.FreeAddSemigroup α) β} (h : f.comp AddMagma.FreeAddSemigroup.of = g.comp AddMagma.FreeAddSemigroup.of)
Goal: f = g
-- Magma.AssocQuotient.lift_symm_apply
@[to_additive (attr := simps symm_apply) "Lifts an additive magma homomorphism `α → β` to an
additive semigroup homomorphism `AddMagma.AssocQuotient α → β` given an additive semigroup `β`."]
def lift : (α →ₙ* β) ≃ (AssocQuotient α →ₙ* β) 
Arguments: {α : Type u} [Mul α] {β : Type v} [Semigroup β] (f : Magma.AssocQuotient α →ₙ* β)
Goal: Magma.AssocQuotient.lift.symm f = f.comp Magma.AssocQuotient.of
-- AddMagma.FreeAddSemigroup.lift_symm_apply
@[to_additive (attr := simps symm_apply) "Lifts an additive magma homomorphism `α → β` to an
additive semigroup homomorphism `AddMagma.AssocQuotient α → β` given an additive semigroup `β`."]
def lift : (α →ₙ* β) ≃ (AssocQuotient α →ₙ* β) 
Arguments: {α : Type u} [Add α] {β : Type v} [AddSemigroup β] (f : AddHom (AddMagma.FreeAddSemigroup α) β)
Goal: AddMagma.FreeAddSemigroup.lift.symm f = f.comp AddMagma.FreeAddSemigroup.of
-- AddMagma.FreeAddSemigroup.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x : α) : lift f (of x) = f x 
Arguments: {α : Type u} [Add α] {β : Type v} [AddSemigroup β] (f : AddHom α β) (x : α)
Goal: (AddMagma.FreeAddSemigroup.lift f) (AddMagma.FreeAddSemigroup.of x) = f x
-- Magma.AssocQuotient.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x : α) : lift f (of x) = f x 
Arguments: {α : Type u} [Mul α] {β : Type v} [Semigroup β] (f : α →ₙ* β) (x : α)
Goal: (Magma.AssocQuotient.lift f) (Magma.AssocQuotient.of x) = f x
-- AddMagma.FreeAddSemigroup.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : (lift f).comp of = f 
Arguments: {α : Type u} [Add α] {β : Type v} [AddSemigroup β] (f : AddHom α β)
Goal: (AddMagma.FreeAddSemigroup.lift f).comp AddMagma.FreeAddSemigroup.of = f
-- Magma.AssocQuotient.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : (lift f).comp of = f 
Arguments: {α : Type u} [Mul α] {β : Type v} [Semigroup β] (f : α →ₙ* β)
Goal: (Magma.AssocQuotient.lift f).comp Magma.AssocQuotient.of = f
-- AddMagma.FreeAddSemigroup.lift_comp_of'
@[to_additive (attr := simp)]
theorem lift_comp_of' (f : AssocQuotient α →ₙ* β) : lift (f.comp of) = f 
Arguments: {α : Type u} [Add α] {β : Type v} [AddSemigroup β] (f : AddHom (AddMagma.FreeAddSemigroup α) β)
Goal: AddMagma.FreeAddSemigroup.lift (f.comp AddMagma.FreeAddSemigroup.of) = f
-- Magma.AssocQuotient.lift_comp_of'
@[to_additive (attr := simp)]
theorem lift_comp_of' (f : AssocQuotient α →ₙ* β) : lift (f.comp of) = f 
Arguments: {α : Type u} [Mul α] {β : Type v} [Semigroup β] (f : Magma.AssocQuotient α →ₙ* β)
Goal: Magma.AssocQuotient.lift (f.comp Magma.AssocQuotient.of) = f
-- AddMagma.FreeAddSemigroup.map_of
@[to_additive (attr := simp)]
theorem map_of (x) : map f (of x) = of (f x) 
Arguments: {α : Type u} [Add α] {β : Type v} [Add β] (f : AddHom α β) (x : α)
Goal: (AddMagma.FreeAddSemigroup.map f) (AddMagma.FreeAddSemigroup.of x) = AddMagma.FreeAddSemigroup.of (f x)
-- Magma.AssocQuotient.map_of
@[to_additive (attr := simp)]
theorem map_of (x) : map f (of x) = of (f x) 
Arguments: {α : Type u} [Mul α] {β : Type v} [Mul β] (f : α →ₙ* β) (x : α)
Goal: (Magma.AssocQuotient.map f) (Magma.AssocQuotient.of x) = Magma.AssocQuotient.of (f x)
-- FreeAddSemigroup.head_add
@[to_additive (attr := simp)]
theorem head_mul (x y : FreeSemigroup α) : (x * y).1 = x.1 
Arguments: {α : Type u} (x y : FreeAddSemigroup α)
Goal: (x + y).head = x.head
-- FreeSemigroup.head_mul
@[to_additive (attr := simp)]
theorem head_mul (x y : FreeSemigroup α) : (x * y).1 = x.1 
Arguments: {α : Type u} (x y : FreeSemigroup α)
Goal: (x * y).head = x.head
-- FreeSemigroup.tail_mul
@[to_additive (attr := simp)]
theorem tail_mul (x y : FreeSemigroup α) : (x * y).2 = x.2 ++ y.1 :: y.2 
Arguments: {α : Type u} (x y : FreeSemigroup α)
Goal: (x * y).tail = x.tail ++ y.head :: y.tail
-- FreeAddSemigroup.tail_add
@[to_additive (attr := simp)]
theorem tail_mul (x y : FreeSemigroup α) : (x * y).2 = x.2 ++ y.1 :: y.2 
Arguments: {α : Type u} (x y : FreeAddSemigroup α)
Goal: (x + y).tail = x.tail ++ y.head :: y.tail
-- FreeAddSemigroup.mk_add_mk
@[to_additive (attr := simp)]
theorem mk_mul_mk (x y : α) (L1 L2 : List α) : mk x L1 * mk y L2 = mk x (L1 ++ y :: L2) 
Arguments: {α : Type u} (x y : α) (L1 L2 : List α)
Goal: { head := x, tail := L1 } + { head := y, tail := L2 } = { head := x, tail := L1 ++ y :: L2 }
-- FreeSemigroup.mk_mul_mk
@[to_additive (attr := simp)]
theorem mk_mul_mk (x y : α) (L1 L2 : List α) : mk x L1 * mk y L2 = mk x (L1 ++ y :: L2) 
Arguments: {α : Type u} (x y : α) (L1 L2 : List α)
Goal: { head := x, tail := L1 } * { head := y, tail := L2 } = { head := x, tail := L1 ++ y :: L2 }
-- FreeAddSemigroup.of_tail
@[to_additive (attr := simps) "The embedding `α → FreeAddSemigroup α`."]
def of (x : α) : FreeSemigroup α 
Arguments: {α : Type u} (x : α)
Goal: (FreeAddSemigroup.of x).tail = []
-- FreeSemigroup.of_tail
@[to_additive (attr := simps) "The embedding `α → FreeAddSemigroup α`."]
def of (x : α) : FreeSemigroup α 
Arguments: {α : Type u} (x : α)
Goal: (FreeSemigroup.of x).tail = []
-- FreeAddSemigroup.of_head
@[to_additive (attr := simps) "The embedding `α → FreeAddSemigroup α`."]
def of (x : α) : FreeSemigroup α 
Arguments: {α : Type u} (x : α)
Goal: (FreeAddSemigroup.of x).head = x
-- FreeSemigroup.of_head
@[to_additive (attr := simps) "The embedding `α → FreeAddSemigroup α`."]
def of (x : α) : FreeSemigroup α 
Arguments: {α : Type u} (x : α)
Goal: (FreeSemigroup.of x).head = x
-- FreeSemigroup.length_mul
@[to_additive (attr := simp)]
theorem length_mul (x y : FreeSemigroup α) : (x * y).length = x.length + y.length 
Arguments: {α : Type u} (x y : FreeSemigroup α)
Goal: (x * y).length = x.length + y.length
-- FreeAddSemigroup.length_add
@[to_additive (attr := simp)]
theorem length_mul (x y : FreeSemigroup α) : (x * y).length = x.length + y.length 
Arguments: {α : Type u} (x y : FreeAddSemigroup α)
Goal: (x + y).length = x.length + y.length
-- FreeAddSemigroup.length_of
@[to_additive (attr := simp)]
theorem length_of (x : α) : (of x).length = 1 
Arguments: {α : Type u} (x : α)
Goal: (FreeAddSemigroup.of x).length = 1
-- FreeSemigroup.length_of
@[to_additive (attr := simp)]
theorem length_of (x : α) : (of x).length = 1 
Arguments: {α : Type u} (x : α)
Goal: (FreeSemigroup.of x).length = 1
-- FreeAddSemigroup.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {β : Type v} [Mul β] {f g : FreeSemigroup α →ₙ* β} (h : f ∘ of = g ∘ of) : f = g 
Arguments: {α : Type u} {β : Type v} [Add β] {f g : AddHom (FreeAddSemigroup α) β} (h : ⇑f ∘ FreeAddSemigroup.of = ⇑g ∘ FreeAddSemigroup.of)
Goal: f = g
-- FreeSemigroup.hom_ext
@[to_additive (attr := ext 1100)]
theorem hom_ext {β : Type v} [Mul β] {f g : FreeSemigroup α →ₙ* β} (h : f ∘ of = g ∘ of) : f = g 
Arguments: {α : Type u} {β : Type v} [Mul β] {f g : FreeSemigroup α →ₙ* β} (h : ⇑f ∘ FreeSemigroup.of = ⇑g ∘ FreeSemigroup.of)
Goal: f = g
-- FreeSemigroup.lift_symm_apply
@[to_additive (attr := simps symm_apply) "Lifts a function `α → β` to an additive semigroup
homomorphism `FreeAddSemigroup α → β` given an additive semigroup `β`."]
def lift : (α → β) ≃ (FreeSemigroup α →ₙ* β) 
Arguments: {α : Type u} {β : Type v} [Semigroup β] (f : FreeSemigroup α →ₙ* β)
Goal: ∀ (a : α), FreeSemigroup.lift.symm f a = (⇑f ∘ FreeSemigroup.of) a
-- FreeAddSemigroup.lift_symm_apply
@[to_additive (attr := simps symm_apply) "Lifts a function `α → β` to an additive semigroup
homomorphism `FreeAddSemigroup α → β` given an additive semigroup `β`."]
def lift : (α → β) ≃ (FreeSemigroup α →ₙ* β) 
Arguments: {α : Type u} {β : Type v} [AddSemigroup β] (f : AddHom (FreeAddSemigroup α) β)
Goal: ∀ (a : α), FreeAddSemigroup.lift.symm f a = (⇑f ∘ FreeAddSemigroup.of) a
-- FreeAddSemigroup.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x : α) : lift f (of x) = f x 
Arguments: {α : Type u} {β : Type v} [AddSemigroup β] (f : α → β) (x : α)
Goal: (FreeAddSemigroup.lift f) (FreeAddSemigroup.of x) = f x
-- FreeSemigroup.lift_of
@[to_additive (attr := simp)]
theorem lift_of (x : α) : lift f (of x) = f x 
Arguments: {α : Type u} {β : Type v} [Semigroup β] (f : α → β) (x : α)
Goal: (FreeSemigroup.lift f) (FreeSemigroup.of x) = f x
-- FreeSemigroup.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : lift f ∘ of = f 
Arguments: {α : Type u} {β : Type v} [Semigroup β] (f : α → β)
Goal: ⇑(FreeSemigroup.lift f) ∘ FreeSemigroup.of = f
-- FreeAddSemigroup.lift_comp_of
@[to_additive (attr := simp)]
theorem lift_comp_of : lift f ∘ of = f 
Arguments: {α : Type u} {β : Type v} [AddSemigroup β] (f : α → β)
Goal: ⇑(FreeAddSemigroup.lift f) ∘ FreeAddSemigroup.of = f