ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Bitraversable.tfst_eq_fst_id'
@[higher_order]
theorem tfst_eq_fst_id {α α' β} (f : α → α') (x : t α β) :
    tfst (F := Id) (pure ∘ f) x = pure (fst f x) 
Arguments: {t : Type u → Type u → Type u} [Bitraversable t] [LawfulBitraversable t] {α α' β : Type u} (f : α → α')
Goal: Bitraversable.tfst (pure ∘ f) = pure ∘ Bifunctor.fst f
-- Bitraversable.tsnd_eq_snd_id
@[higher_order]
theorem tsnd_eq_snd_id {α β β'} (f : β → β') (x : t α β) :
    tsnd (F := Id) (pure ∘ f) x = pure (snd f x) 
Arguments: {t : Type u → Type u → Type u} [Bitraversable t] [LawfulBitraversable t] {α β β' : Type u} (f : β → β') (x : t α β)
Goal: Bitraversable.tsnd (pure ∘ f) x = pure (Bifunctor.snd f x)
-- Bitraversable.tsnd_eq_snd_id'
@[higher_order]
theorem tsnd_eq_snd_id {α β β'} (f : β → β') (x : t α β) :
    tsnd (F := Id) (pure ∘ f) x = pure (snd f x) 
Arguments: {t : Type u → Type u → Type u} [Bitraversable t] [LawfulBitraversable t] {α β β' : Type u} (f : β → β')
Goal: Bitraversable.tsnd (pure ∘ f) = pure ∘ Bifunctor.snd f
-- Monoid.PushoutI.of_comp_eq_base
theorem of_comp_eq_base (i : ι) : (of i).comp (φ i) = (base φ) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (i : ι)
Goal: (Monoid.PushoutI.of i).comp (φ i) = Monoid.PushoutI.base φ
-- Monoid.PushoutI.of_apply_eq_base
theorem of_apply_eq_base (i : ι) (x : H) : of i (φ i x) = base φ x 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Monoid (G i)] [Monoid H] (φ : (i : ι) → H →* G i) (i : ι) (x : H)
Goal: (Monoid.PushoutI.of i) ((φ i) x) = (Monoid.PushoutI.base φ) x
-- Monoid.PushoutI.lift_of
@[simp]
theorem lift_of (f : ∀ i, G i →* K) (k : H →* K)
    (hf : ∀ i, (f i).comp (φ i) = k)
    {i : ι} (g : G i) : (lift f k hf) (of i g : PushoutI φ) = f i g 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (f : (i : ι) → G i →* K) (k : H →* K) (hf : ∀ (i : ι), (f i).comp (φ i) = k) {i : ι} (g : G i)
Goal: (Monoid.PushoutI.lift f k hf) ((Monoid.PushoutI.of i) g) = (f i) g
-- Monoid.PushoutI.lift_base
@[simp]
theorem lift_base (f : ∀ i, G i →* K) (k : H →* K)
    (hf : ∀ i, (f i).comp (φ i) = k)
    (g : H) : (lift f k hf) (base φ g : PushoutI φ) = k g 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (f : (i : ι) → G i →* K) (k : H →* K) (hf : ∀ (i : ι), (f i).comp (φ i) = k) (g : H)
Goal: (Monoid.PushoutI.lift f k hf) ((Monoid.PushoutI.base φ) g) = k g
-- Monoid.PushoutI.hom_ext
@[ext 1199]
theorem hom_ext {f g : PushoutI φ →* K}
    (h : ∀ i, f.comp (of i : G i →* _) = g.comp (of i : G i →* _))
    (hbase : f.comp (base φ) = g.comp (base φ)) : f = g 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} {f g : Monoid.PushoutI φ →* K} (h : ∀ (i : ι), f.comp (Monoid.PushoutI.of i) = g.comp (Monoid.PushoutI.of i)) (hbase : f.comp (Monoid.PushoutI.base φ) = g.comp (Monoid.PushoutI.base φ))
Goal: f = g
-- Monoid.PushoutI.hom_ext_nonempty
@[ext high]
theorem hom_ext_nonempty [hn : Nonempty ι]
    {f g : PushoutI φ →* K}
    (h : ∀ i, f.comp (of i : G i →* _) = g.comp (of i : G i →* _)) : f = g 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} [hn : Nonempty ι] {f g : Monoid.PushoutI φ →* K} (h : ∀ (i : ι), f.comp (Monoid.PushoutI.of i) = g.comp (Monoid.PushoutI.of i))
Goal: f = g
-- Monoid.PushoutI.homEquiv_symm_apply
@[simps]
def homEquiv :
    (PushoutI φ →* K) ≃ { f : (Π i, G i →* K) × (H →* K) // ∀ i, (f.1 i).comp (φ i) = f.2 } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (f : { f // ∀ (i : ι), (f.1 i).comp (φ i) = f.2 })
Goal: Monoid.PushoutI.homEquiv.symm f = Monoid.PushoutI.lift (↑f).1 (↑f).2 ⋯
-- Monoid.PushoutI.homEquiv_apply_coe
@[simps]
def homEquiv :
    (PushoutI φ →* K) ≃ { f : (Π i, G i →* K) × (H →* K) // ∀ i, (f.1 i).comp (φ i) = f.2 } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} {K : Type u_4} [Monoid K] [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (f : Monoid.PushoutI φ →* K)
Goal: ↑(Monoid.PushoutI.homEquiv f) = (fun i => f.comp (Monoid.PushoutI.of i), f.comp (Monoid.PushoutI.base φ))
-- Monoid.PushoutI.ofCoprodI_of
@[simp]
theorem ofCoprodI_of (i : ι) (g : G i) :
    (ofCoprodI (CoprodI.of g) : PushoutI φ) = of i g 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} (i : ι) (g : G i)
Goal: Monoid.PushoutI.ofCoprodI (Monoid.CoprodI.of g) = (Monoid.PushoutI.of i) g
-- Monoid.PushoutI.induction_on
theorem induction_on {motive : PushoutI φ → Prop}
    (x : PushoutI φ)
    (of : ∀ (i : ι) (g : G i), motive (of i g))
    (base : ∀ h, motive (base φ h))
    (mul : ∀ x y, motive x → motive y → motive (x * y)) : motive x 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Monoid (G i)] [Monoid H] {φ : (i : ι) → H →* G i} {motive : Monoid.PushoutI φ → Prop} (x : Monoid.PushoutI φ) (of : ∀ (i : ι) (g : G i), motive ((Monoid.PushoutI.of i) g)) (base : ∀ (h : H), motive ((Monoid.PushoutI.base φ) h)) (mul : ∀ (x y : Monoid.PushoutI φ), motive x → motive y → motive (x * y))
Goal: motive x
-- Monoid.PushoutI.NormalWord.Transversal.injective
structure Transversal : Type _ where
    injective : ∀ i, Injective (φ i)
    set : ∀ i, Set (G i)
    one_mem : ∀ i, 1 ∈ set i
    compl : ∀ i, IsComplement (φ i).range (set i)
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (self : Monoid.PushoutI.NormalWord.Transversal φ) (i : ι)
Goal: Function.Injective ⇑(φ i)
-- Monoid.PushoutI.NormalWord.Transversal.one_mem
structure Transversal : Type _ where
    injective : ∀ i, Injective (φ i)
    set : ∀ i, Set (G i)
    one_mem : ∀ i, 1 ∈ set i
    compl : ∀ i, IsComplement (φ i).range (set i)
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (self : Monoid.PushoutI.NormalWord.Transversal φ) (i : ι)
Goal: 1 ∈ self.set i
-- Monoid.PushoutI.NormalWord.Transversal.compl
structure Transversal : Type _ where
    injective : ∀ i, Injective (φ i)
    set : ∀ i, Set (G i)
    one_mem : ∀ i, 1 ∈ set i
    compl : ∀ i, IsComplement (φ i).range (set i)
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (self : Monoid.PushoutI.NormalWord.Transversal φ) (i : ι)
Goal: Subgroup.IsComplement (↑(φ i).range) (self.set i)
-- Monoid.PushoutI.NormalWord.transversal_nonempty
theorem transversal_nonempty (hφ : ∀ i, Injective (φ i)) : Nonempty (Transversal φ) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] (φ : (i : ι) → H →* G i) (hφ : ∀ (i : ι), Function.Injective ⇑(φ i))
Goal: Nonempty (Monoid.PushoutI.NormalWord.Transversal φ)
-- Monoid.PushoutI.NormalWord.normalized
structure _root_.Monoid.PushoutI.NormalWord (d : Transversal φ) extends CoprodI.Word G where
    head : H
    normalized : ∀ i g, ⟨i, g⟩ ∈ toList → g ∈ d.set i
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} (self : Monoid.PushoutI.NormalWord d) (i : ι) (g : G i)
Goal: ⟨i, g⟩ ∈ self.toList → g ∈ d.set i
-- Monoid.PushoutI.NormalWord.Pair.normalized
structure Pair (d : Transversal φ) (i : ι) extends CoprodI.Word.Pair G i where
    normalized : ∀ i g, ⟨i, g⟩ ∈ tail.toList → g ∈ d.set i
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {i : ι} (self : Monoid.PushoutI.NormalWord.Pair d i)
Goal: ∀ (i_1 : ι) (g : G i_1), ⟨i_1, g⟩ ∈ self.tail.toList → g ∈ d.set i_1
-- Monoid.PushoutI.NormalWord.empty_head
@[simps!]
def empty : NormalWord d 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ}
Goal: Monoid.PushoutI.NormalWord.empty.head = 1
-- Monoid.PushoutI.NormalWord.empty_toList
@[simps!]
def empty : NormalWord d 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ}
Goal: Monoid.PushoutI.NormalWord.empty.toList = []
-- Monoid.PushoutI.NormalWord.ext
@[ext]
theorem ext {w₁ w₂ : NormalWord d} (hhead : w₁.head = w₂.head)
    (hlist : w₁.toList = w₂.toList) : w₁ = w₂ 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {w₁ w₂ : Monoid.PushoutI.NormalWord d} (hhead : w₁.head = w₂.head) (hlist : w₁.toList = w₂.toList)
Goal: w₁ = w₂
-- Monoid.PushoutI.NormalWord.ext_iff
theorem ext_iff {w₁ w₂ : NormalWord d} : w₁ = w₂ ↔ w₁.head = w₂.head ∧ w₁.toList = w₂.toList 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {w₁ w₂ : Monoid.PushoutI.NormalWord d}
Goal: w₁ = w₂ ↔ w₁.head = w₂.head ∧ w₁.toList = w₂.toList
-- Monoid.PushoutI.NormalWord.eq_one_of_smul_normalized
theorem eq_one_of_smul_normalized (w : CoprodI.Word G) {i : ι} (h : H)
    (hw : ∀ i g, ⟨i, g⟩ ∈ w.toList → g ∈ d.set i)
    (hφw : ∀ j g, ⟨j, g⟩ ∈ (CoprodI.of (φ i h) • w).toList → g ∈ d.set j) :
    h = 1 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] (w : Monoid.CoprodI.Word G) {i : ι} (h : H) (hw : ∀ (i : ι) (g : G i), ⟨i, g⟩ ∈ w.toList → g ∈ d.set i) (hφw : ∀ (j : ι) (g : G j), ⟨j, g⟩ ∈ (Monoid.CoprodI.of ((φ i) h) • w).toList → g ∈ d.set j)
Goal: h = 1
-- Monoid.PushoutI.NormalWord.ext_smul
theorem ext_smul {w₁ w₂ : NormalWord d} (i : ι)
    (h : CoprodI.of (φ i w₁.head) • w₁.toWord =
         CoprodI.of (φ i w₂.head) • w₂.toWord) :
    w₁ = w₂ 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {w₁ w₂ : Monoid.PushoutI.NormalWord d} (i : ι) (h : Monoid.CoprodI.of ((φ i) w₁.head) • w₁.toWord = Monoid.CoprodI.of ((φ i) w₂.head) • w₂.toWord)
Goal: w₁ = w₂
-- Monoid.PushoutI.NormalWord.cons_toList
@[simps!]
noncomputable def cons {i} (g : G i) (w : NormalWord d) (hmw : w.fstIdx ≠ some i)
    (hgr : g ∉ (φ i).range) : NormalWord d 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d) (hmw : w.fstIdx ≠ some i) (hgr : g ∉ (φ i).range)
Goal: (Monoid.PushoutI.NormalWord.cons g w hmw hgr).toList = ⟨i, ↑(⋯.equiv (g * (φ i) w.head)).2⟩ :: w.toList
-- Monoid.PushoutI.NormalWord.cons_head
@[simps!]
noncomputable def cons {i} (g : G i) (w : NormalWord d) (hmw : w.fstIdx ≠ some i)
    (hgr : g ∉ (φ i).range) : NormalWord d 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d) (hmw : w.fstIdx ≠ some i) (hgr : g ∉ (φ i).range)
Goal: (Monoid.PushoutI.NormalWord.cons g w hmw hgr).head = (MonoidHom.ofInjective ⋯).symm (⋯.equiv (g * (φ i) w.head)).1
-- Monoid.PushoutI.NormalWord.rcons_injective
theorem rcons_injective {i : ι} : Function.Injective (rcons (d := d) i) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι}
Goal: Function.Injective (Monoid.PushoutI.NormalWord.rcons i)
-- Monoid.PushoutI.NormalWord.base_smul_def'
theorem base_smul_def' (h : H) (w : NormalWord d) :
    h • w = { w with head := h * w.head } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} (h : H) (w : Monoid.PushoutI.NormalWord d)
Goal: h • w = { toWord := w.toWord, head := h * w.head, normalized := ⋯ }
-- Monoid.PushoutI.NormalWord.summand_smul_def'
theorem summand_smul_def' {i : ι} (g : G i) (w : NormalWord d) :
    g • w = (equivPair i).symm
      { equivPair i w with
        head := g * (equivPair i w).head } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d)
Goal: g • w =
  (Monoid.PushoutI.NormalWord.equivPair i).symm
    (let __src := (Monoid.PushoutI.NormalWord.equivPair i) w;
    { head := g * ((Monoid.PushoutI.NormalWord.equivPair i) w).head, tail := __src.tail, fstIdx_ne := ⋯,
      normalized := ⋯ })
-- Monoid.PushoutI.NormalWord.base_smul_def
theorem base_smul_def (h : H) (w : NormalWord d) :
    base φ h • w = { w with head := h * w.head } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] (h : H) (w : Monoid.PushoutI.NormalWord d)
Goal: (Monoid.PushoutI.base φ) h • w = { toWord := w.toWord, head := h * w.head, normalized := ⋯ }
-- Monoid.PushoutI.NormalWord.summand_smul_def
theorem summand_smul_def {i : ι} (g : G i) (w : NormalWord d) :
    of (φ := φ) i g • w = (equivPair i).symm
      { equivPair i w with
        head := g * (equivPair i w).head } 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d)
Goal: (Monoid.PushoutI.of i) g • w =
  (Monoid.PushoutI.NormalWord.equivPair i).symm
    (let __src := (Monoid.PushoutI.NormalWord.equivPair i) w;
    { head := g * ((Monoid.PushoutI.NormalWord.equivPair i) w).head, tail := __src.tail, fstIdx_ne := ⋯,
      normalized := ⋯ })
-- Monoid.PushoutI.NormalWord.of_smul_eq_smul
theorem of_smul_eq_smul {i : ι} (g : G i) (w : NormalWord d) :
    of (φ := φ) i g • w = g • w 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d)
Goal: (Monoid.PushoutI.of i) g • w = g • w
-- Monoid.PushoutI.NormalWord.base_smul_eq_smul
theorem base_smul_eq_smul (h : H) (w : NormalWord d) :
    base φ h • w = h • w 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] (h : H) (w : Monoid.PushoutI.NormalWord d)
Goal: (Monoid.PushoutI.base φ) h • w = h • w
-- Monoid.PushoutI.NormalWord.cons_eq_smul
theorem cons_eq_smul {i : ι} (g : G i)
    (w : NormalWord d) (hmw : w.fstIdx ≠ some i)
    (hgr : g ∉ (φ i).range) : cons g w hmw hgr = of (φ := φ) i g  • w 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d) (hmw : w.fstIdx ≠ some i) (hgr : g ∉ (φ i).range)
Goal: Monoid.PushoutI.NormalWord.cons g w hmw hgr = (Monoid.PushoutI.of i) g • w
-- Monoid.PushoutI.NormalWord.prod_summand_smul
@[simp]
theorem prod_summand_smul {i : ι} (g : G i) (w : NormalWord d) :
    (g • w).prod = of i g * w.prod 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d)
Goal: (g • w).prod = (Monoid.PushoutI.of i) g * w.prod
-- Monoid.PushoutI.NormalWord.prod_base_smul
@[simp]
theorem prod_base_smul (h : H) (w : NormalWord d) :
    (h • w).prod = base φ h * w.prod 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} (h : H) (w : Monoid.PushoutI.NormalWord d)
Goal: (h • w).prod = (Monoid.PushoutI.base φ) h * w.prod
-- Monoid.PushoutI.NormalWord.prod_smul
@[simp]
theorem prod_smul (g : PushoutI φ) (w : NormalWord d) :
    (g • w).prod = g * w.prod 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] (g : Monoid.PushoutI φ) (w : Monoid.PushoutI.NormalWord d)
Goal: (g • w).prod = g * w.prod
-- Monoid.PushoutI.NormalWord.prod_empty
@[simp]
theorem prod_empty : (empty : NormalWord d).prod = 1 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ}
Goal: Monoid.PushoutI.NormalWord.empty.prod = 1
-- Monoid.PushoutI.NormalWord.prod_cons
@[simp]
theorem prod_cons {i} (g : G i) (w : NormalWord d) (hmw : w.fstIdx ≠ some i)
    (hgr : g ∉ (φ i).range) : (cons g w hmw hgr).prod = of i g * w.prod 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} {i : ι} (g : G i) (w : Monoid.PushoutI.NormalWord d) (hmw : w.fstIdx ≠ some i) (hgr : g ∉ (φ i).range)
Goal: (Monoid.PushoutI.NormalWord.cons g w hmw hgr).prod = (Monoid.PushoutI.of i) g * w.prod
-- Monoid.PushoutI.NormalWord.prod_smul_empty
theorem prod_smul_empty (w : NormalWord d) : w.prod • empty = w 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ} [DecidableEq ι] [(i : ι) → DecidableEq (G i)] (w : Monoid.PushoutI.NormalWord d)
Goal: w.prod • Monoid.PushoutI.NormalWord.empty = w
-- Monoid.PushoutI.NormalWord.prod_injective
theorem prod_injective : Function.Injective (prod : NormalWord d → PushoutI φ) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} {d : Monoid.PushoutI.NormalWord.Transversal φ}
Goal: Function.Injective Monoid.PushoutI.NormalWord.prod
-- Monoid.PushoutI.of_injective
theorem of_injective (hφ : ∀ i, Function.Injective (φ i)) (i : ι) :
    Function.Injective (of (φ := φ) i) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (hφ : ∀ (i : ι), Function.Injective ⇑(φ i)) (i : ι)
Goal: Function.Injective ⇑(Monoid.PushoutI.of i)
-- Monoid.PushoutI.base_injective
theorem base_injective (hφ : ∀ i, Function.Injective (φ i)) :
    Function.Injective (base φ) 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (hφ : ∀ (i : ι), Function.Injective ⇑(φ i))
Goal: Function.Injective ⇑(Monoid.PushoutI.base φ)
-- Monoid.PushoutI.Reduced.exists_normalWord_prod_eq
theorem Reduced.exists_normalWord_prod_eq (d : Transversal φ) {w : Word G} (hw : Reduced φ w) :
    ∃ w' : NormalWord d, w'.prod = ofCoprodI w.prod ∧
      w'.toList.map Sigma.fst = w.toList.map Sigma.fst 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (d : Monoid.PushoutI.NormalWord.Transversal φ) {w : Monoid.CoprodI.Word G} (hw : Monoid.PushoutI.Reduced φ w)
Goal: ∃ w', w'.prod = Monoid.PushoutI.ofCoprodI w.prod ∧ List.map Sigma.fst w'.toList = List.map Sigma.fst w.toList
-- Monoid.PushoutI.Reduced.eq_empty_of_mem_range
theorem Reduced.eq_empty_of_mem_range (hφ : ∀ i, Injective (φ i))
    {w : Word G} (hw : Reduced φ w)
    (h : ofCoprodI w.prod ∈ (base φ).range) : w = .empty 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (hφ : ∀ (i : ι), Function.Injective ⇑(φ i)) {w : Monoid.CoprodI.Word G} (hw : Monoid.PushoutI.Reduced φ w) (h : Monoid.PushoutI.ofCoprodI w.prod ∈ (Monoid.PushoutI.base φ).range)
Goal: w = Monoid.CoprodI.Word.empty
-- Monoid.PushoutI.inf_of_range_eq_base_range
theorem inf_of_range_eq_base_range (hφ : ∀ i, Injective (φ i)) {i j : ι} (hij : i ≠ j) :
    (of i).range ⊓ (of j).range = (base φ).range 
Arguments: {ι : Type u_1} {G : ι → Type u_2} {H : Type u_3} [(i : ι) → Group (G i)] [Group H] {φ : (i : ι) → H →* G i} (hφ : ∀ (i : ι), Function.Injective ⇑(φ i)) {i j : ι} (hij : i ≠ j)
Goal: (Monoid.PushoutI.of i).range ⊓ (Monoid.PushoutI.of j).range = (Monoid.PushoutI.base φ).range
-- IsFreeGroupoid.unique_lift
class IsFreeGroupoid (G) [Groupoid.{v} G] where
  quiverGenerators : Quiver.{v + 1} (IsFreeGroupoid.Generators G)
  of : ∀ {a b : IsFreeGroupoid.Generators G}, (a ⟶ b) → ((show G from a) ⟶ b)
  unique_lift :
    ∀ {X : Type v} [Group X] (f : Labelling (IsFreeGroupoid.Generators G) X),
      ∃! F : G ⥤ CategoryTheory.SingleObj X, ∀ (a b) (g : a ⟶ b), F.map (of g) = f g
Arguments: {G : Type u_1} [CategoryTheory.Groupoid G] [self : IsFreeGroupoid G] {X : Type v} [Group X] (f : Quiver.Labelling (IsFreeGroupoid.Generators G) X)
Goal: ∃! F, ∀ (a b : IsFreeGroupoid.Generators G) (g : a ⟶ b), F.map (IsFreeGroupoid.of g) = f g
-- IsFreeGroupoid.ext_functor
@[ext]
theorem ext_functor {G} [Groupoid.{v} G] [IsFreeGroupoid G] {X : Type v} [Group X]
    (f g : G ⥤ CategoryTheory.SingleObj X) (h : ∀ (a b) (e : a ⟶ b), f.map (of e) = g.map (of e)) :
    f = g 
Arguments: {G : Type u_1} [CategoryTheory.Groupoid G] [IsFreeGroupoid G] {X : Type v} [Group X] (f g : G ⥤ CategoryTheory.SingleObj X) (h : ∀ (a b : IsFreeGroupoid.Generators G) (e : a ⟶ b), f.map (IsFreeGroupoid.of e) = g.map (IsFreeGroupoid.of e))
Goal: f = g
-- IsFreeGroupoid.SpanningTree.treeHom_eq
theorem treeHom_eq {a : G} (p : Path (root T) a) : treeHom T a = homOfPath T p 
Arguments: {G : Type u} [CategoryTheory.Groupoid G] [IsFreeGroupoid G] (T : WideSubquiver (Quiver.Symmetrify (IsFreeGroupoid.Generators G))) [Quiver.Arborescence (WideSubquiver.toType (Quiver.Symmetrify (IsFreeGroupoid.Generators G)) T)] {a : G} (p : Quiver.Path (Quiver.root (WideSubquiver.toType (Quiver.Symmetrify (IsFreeGroupoid.Generators G)) T)) a)
Goal: IsFreeGroupoid.SpanningTree.treeHom T a = IsFreeGroupoid.SpanningTree.homOfPath T p
-- IsFreeGroupoid.SpanningTree.treeHom_root
@[simp]
theorem treeHom_root : treeHom T (root' T) = 𝟙 _ 
Arguments: {G : Type u} [CategoryTheory.Groupoid G] [IsFreeGroupoid G] (T : WideSubquiver (Quiver.Symmetrify (IsFreeGroupoid.Generators G))) [Quiver.Arborescence (WideSubquiver.toType (Quiver.Symmetrify (IsFreeGroupoid.Generators G)) T)]
Goal: IsFreeGroupoid.SpanningTree.treeHom T (IsFreeGroupoid.SpanningTree.root' T) = 𝟙 (IsFreeGroupoid.SpanningTree.root' T)
-- IsFreeGroupoid.SpanningTree.loopOfHom_eq_id
theorem loopOfHom_eq_id {a b : Generators G} (e) (H : e ∈ wideSubquiverSymmetrify T a b) :
    loopOfHom T (of e) = 𝟙 (root' T) 
Arguments: {G : Type u} [CategoryTheory.Groupoid G] [IsFreeGroupoid G] (T : WideSubquiver (Quiver.Symmetrify (IsFreeGroupoid.Generators G))) [Quiver.Arborescence (WideSubquiver.toType (Quiver.Symmetrify (IsFreeGroupoid.Generators G)) T)] {a b : IsFreeGroupoid.Generators G} (e : a ⟶ b) (H : e ∈ Quiver.wideSubquiverSymmetrify T a b)
Goal: IsFreeGroupoid.SpanningTree.loopOfHom T (IsFreeGroupoid.of e) = 𝟙 (IsFreeGroupoid.SpanningTree.root' T)