ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- Fin.prod_univ_succ
@[to_additive "A sum of a function `f : Fin (n + 1) → β` over all `Fin (n + 1)` is the sum of
`f 0` plus the remaining product"]
theorem prod_univ_succ [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β) :
    ∏ i, f i = f 0 * ∏ i : Fin n, f i.succ 
Arguments: {β : Type u_2} [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β)
Goal: ∏ i : Fin (n + 1), f i = f 0 * ∏ i : Fin n, f i.succ
-- Fin.sum_univ_succ
@[to_additive "A sum of a function `f : Fin (n + 1) → β` over all `Fin (n + 1)` is the sum of
`f 0` plus the remaining product"]
theorem prod_univ_succ [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β) :
    ∏ i, f i = f 0 * ∏ i : Fin n, f i.succ 
Arguments: {β : Type u_2} [AddCommMonoid β] {n : ℕ} (f : Fin (n + 1) → β)
Goal: ∑ i : Fin (n + 1), f i = f 0 + ∑ i : Fin n, f i.succ
-- Fin.prod_univ_castSucc
@[to_additive "A sum of a function `f : Fin (n + 1) → β` over all `Fin (n + 1)` is the sum of
`f (Fin.last n)` plus the remaining sum"]
theorem prod_univ_castSucc [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β) :
    ∏ i, f i = (∏ i : Fin n, f (Fin.castSucc i)) * f (last n) 
Arguments: {β : Type u_2} [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β)
Goal: ∏ i : Fin (n + 1), f i = (∏ i : Fin n, f i.castSucc) * f (Fin.last n)
-- Fin.sum_univ_castSucc
@[to_additive "A sum of a function `f : Fin (n + 1) → β` over all `Fin (n + 1)` is the sum of
`f (Fin.last n)` plus the remaining sum"]
theorem prod_univ_castSucc [CommMonoid β] {n : ℕ} (f : Fin (n + 1) → β) :
    ∏ i, f i = (∏ i : Fin n, f (Fin.castSucc i)) * f (last n) 
Arguments: {β : Type u_2} [AddCommMonoid β] {n : ℕ} (f : Fin (n + 1) → β)
Goal: ∑ i : Fin (n + 1), f i = ∑ i : Fin n, f i.castSucc + f (Fin.last n)
-- Fin.sum_univ_get
@[to_additive (attr := simp)]
theorem prod_univ_get [CommMonoid α] (l : List α) : ∏ i : Fin l.length, l[i.1] = l.prod 
Arguments: {α : Type u_1} [AddCommMonoid α] (l : List α)
Goal: ∑ i : Fin l.length, l[↑i] = l.sum
-- Fin.prod_univ_get
@[to_additive (attr := simp)]
theorem prod_univ_get [CommMonoid α] (l : List α) : ∏ i : Fin l.length, l[i.1] = l.prod 
Arguments: {α : Type u_1} [CommMonoid α] (l : List α)
Goal: ∏ i : Fin l.length, l[↑i] = l.prod
-- Fin.prod_univ_get'
@[to_additive (attr := simp)]
theorem prod_univ_get' [CommMonoid β] (l : List α) (f : α → β) :
    ∏ i : Fin l.length, f l[i.1] = (l.map f).prod 
Arguments: {α : Type u_1} {β : Type u_2} [CommMonoid β] (l : List α) (f : α → β)
Goal: ∏ i : Fin l.length, f l[↑i] = (List.map f l).prod
-- Fin.sum_univ_get'
@[to_additive (attr := simp)]
theorem prod_univ_get' [CommMonoid β] (l : List α) (f : α → β) :
    ∏ i : Fin l.length, f l[i.1] = (l.map f).prod 
Arguments: {α : Type u_1} {β : Type u_2} [AddCommMonoid β] (l : List α) (f : α → β)
Goal: ∑ i : Fin l.length, f l[↑i] = (List.map f l).sum
-- Fin.prod_cons
@[to_additive]
theorem prod_cons [CommMonoid β] {n : ℕ} (x : β) (f : Fin n → β) :
    (∏ i : Fin n.succ, (cons x f : Fin n.succ → β) i) = x * ∏ i : Fin n, f i 
Arguments: {β : Type u_2} [CommMonoid β] {n : ℕ} (x : β) (f : Fin n → β)
Goal: ∏ i : Fin n.succ, Fin.cons x f i = x * ∏ i : Fin n, f i
-- Fin.sum_cons
@[to_additive]
theorem prod_cons [CommMonoid β] {n : ℕ} (x : β) (f : Fin n → β) :
    (∏ i : Fin n.succ, (cons x f : Fin n.succ → β) i) = x * ∏ i : Fin n, f i 
Arguments: {β : Type u_2} [AddCommMonoid β] {n : ℕ} (x : β) (f : Fin n → β)
Goal: ∑ i : Fin n.succ, Fin.cons x f i = x + ∑ i : Fin n, f i
-- Fin.sum_univ_one
@[to_additive sum_univ_one]
theorem prod_univ_one [CommMonoid β] (f : Fin 1 → β) : ∏ i, f i = f 0 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 1 → β)
Goal: ∑ i : Fin 1, f i = f 0
-- Fin.prod_univ_one
@[to_additive sum_univ_one]
theorem prod_univ_one [CommMonoid β] (f : Fin 1 → β) : ∏ i, f i = f 0 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 1 → β)
Goal: ∏ i : Fin 1, f i = f 0
-- Fin.prod_univ_two
@[to_additive (attr := simp)]
theorem prod_univ_two [CommMonoid β] (f : Fin 2 → β) : ∏ i, f i = f 0 * f 1 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 2 → β)
Goal: ∏ i : Fin 2, f i = f 0 * f 1
-- Fin.sum_univ_two
@[to_additive (attr := simp)]
theorem prod_univ_two [CommMonoid β] (f : Fin 2 → β) : ∏ i, f i = f 0 * f 1 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 2 → β)
Goal: ∑ i : Fin 2, f i = f 0 + f 1
-- Fin.prod_univ_two'
@[to_additive]
theorem prod_univ_two' [CommMonoid β] (f : α → β) (a b : α) :
    ∏ i, f (![a, b] i) = f a * f b 
Arguments: {α : Type u_1} {β : Type u_2} [CommMonoid β] (f : α → β) (a b : α)
Goal: ∏ i : Fin (Nat.succ 0).succ, f (![a, b] i) = f a * f b
-- Fin.sum_univ_two'
@[to_additive]
theorem prod_univ_two' [CommMonoid β] (f : α → β) (a b : α) :
    ∏ i, f (![a, b] i) = f a * f b 
Arguments: {α : Type u_1} {β : Type u_2} [AddCommMonoid β] (f : α → β) (a b : α)
Goal: ∑ i : Fin (Nat.succ 0).succ, f (![a, b] i) = f a + f b
-- Fin.prod_univ_three
@[to_additive]
theorem prod_univ_three [CommMonoid β] (f : Fin 3 → β) : ∏ i, f i = f 0 * f 1 * f 2 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 3 → β)
Goal: ∏ i : Fin 3, f i = f 0 * f 1 * f 2
-- Fin.sum_univ_three
@[to_additive]
theorem prod_univ_three [CommMonoid β] (f : Fin 3 → β) : ∏ i, f i = f 0 * f 1 * f 2 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 3 → β)
Goal: ∑ i : Fin 3, f i = f 0 + f 1 + f 2
-- Fin.sum_univ_four
@[to_additive]
theorem prod_univ_four [CommMonoid β] (f : Fin 4 → β) : ∏ i, f i = f 0 * f 1 * f 2 * f 3 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 4 → β)
Goal: ∑ i : Fin 4, f i = f 0 + f 1 + f 2 + f 3
-- Fin.prod_univ_four
@[to_additive]
theorem prod_univ_four [CommMonoid β] (f : Fin 4 → β) : ∏ i, f i = f 0 * f 1 * f 2 * f 3 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 4 → β)
Goal: ∏ i : Fin 4, f i = f 0 * f 1 * f 2 * f 3
-- Fin.prod_univ_five
@[to_additive]
theorem prod_univ_five [CommMonoid β] (f : Fin 5 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 5 → β)
Goal: ∏ i : Fin 5, f i = f 0 * f 1 * f 2 * f 3 * f 4
-- Fin.sum_univ_five
@[to_additive]
theorem prod_univ_five [CommMonoid β] (f : Fin 5 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 5 → β)
Goal: ∑ i : Fin 5, f i = f 0 + f 1 + f 2 + f 3 + f 4
-- Fin.prod_univ_six
@[to_additive]
theorem prod_univ_six [CommMonoid β] (f : Fin 6 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 6 → β)
Goal: ∏ i : Fin 6, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5
-- Fin.sum_univ_six
@[to_additive]
theorem prod_univ_six [CommMonoid β] (f : Fin 6 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 6 → β)
Goal: ∑ i : Fin 6, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5
-- Fin.prod_univ_seven
@[to_additive]
theorem prod_univ_seven [CommMonoid β] (f : Fin 7 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 7 → β)
Goal: ∏ i : Fin 7, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6
-- Fin.sum_univ_seven
@[to_additive]
theorem prod_univ_seven [CommMonoid β] (f : Fin 7 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 7 → β)
Goal: ∑ i : Fin 7, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5 + f 6
-- Fin.sum_univ_eight
@[to_additive]
theorem prod_univ_eight [CommMonoid β] (f : Fin 8 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 * f 7 
Arguments: {β : Type u_2} [AddCommMonoid β] (f : Fin 8 → β)
Goal: ∑ i : Fin 8, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5 + f 6 + f 7
-- Fin.prod_univ_eight
@[to_additive]
theorem prod_univ_eight [CommMonoid β] (f : Fin 8 → β) :
    ∏ i, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 * f 7 
Arguments: {β : Type u_2} [CommMonoid β] (f : Fin 8 → β)
Goal: ∏ i : Fin 8, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 * f 7
-- Fin.sum_pow_mul_eq_add_pow
theorem sum_pow_mul_eq_add_pow {n : ℕ} {R : Type*} [CommSemiring R] (a b : R) :
    (∑ s : Finset (Fin n), a ^ s.card * b ^ (n - s.card)) = (a + b) ^ n 
Arguments: {n : ℕ} {R : Type u_3} [CommSemiring R] (a b : R)
Goal: ∑ s : Finset (Fin n), a ^ s.card * b ^ (n - s.card) = (a + b) ^ n
-- Fin.prod_const
theorem prod_const [CommMonoid α] (n : ℕ) (x : α) : ∏ _i : Fin n, x = x ^ n 
Arguments: {α : Type u_1} [CommMonoid α] (n : ℕ) (x : α)
Goal: ∏ _i : Fin n, x = x ^ n
-- Fin.sum_const
theorem sum_const [AddCommMonoid α] (n : ℕ) (x : α) : ∑ _i : Fin n, x = n • x 
Arguments: {α : Type u_1} [AddCommMonoid α] (n : ℕ) (x : α)
Goal: ∑ _i : Fin n, x = n • x
-- Fin.prod_Ioi_zero
@[to_additive]
theorem prod_Ioi_zero {M : Type*} [CommMonoid M] {n : ℕ} {v : Fin n.succ → M} :
    ∏ i ∈ Ioi 0, v i = ∏ j : Fin n, v j.succ 
Arguments: {M : Type u_3} [CommMonoid M] {n : ℕ} {v : Fin n.succ → M}
Goal: ∏ i ∈ Finset.Ioi 0, v i = ∏ j : Fin n, v j.succ
-- Fin.sum_Ioi_zero
@[to_additive]
theorem prod_Ioi_zero {M : Type*} [CommMonoid M] {n : ℕ} {v : Fin n.succ → M} :
    ∏ i ∈ Ioi 0, v i = ∏ j : Fin n, v j.succ 
Arguments: {M : Type u_3} [AddCommMonoid M] {n : ℕ} {v : Fin n.succ → M}
Goal: ∑ i ∈ Finset.Ioi 0, v i = ∑ j : Fin n, v j.succ
-- Fin.prod_Ioi_succ
@[to_additive]
theorem prod_Ioi_succ {M : Type*} [CommMonoid M] {n : ℕ} (i : Fin n) (v : Fin n.succ → M) :
    ∏ j ∈ Ioi i.succ, v j = ∏ j ∈ Ioi i, v j.succ 
Arguments: {M : Type u_3} [CommMonoid M] {n : ℕ} (i : Fin n) (v : Fin n.succ → M)
Goal: ∏ j ∈ Finset.Ioi i.succ, v j = ∏ j ∈ Finset.Ioi i, v j.succ
-- Fin.sum_Ioi_succ
@[to_additive]
theorem prod_Ioi_succ {M : Type*} [CommMonoid M] {n : ℕ} (i : Fin n) (v : Fin n.succ → M) :
    ∏ j ∈ Ioi i.succ, v j = ∏ j ∈ Ioi i, v j.succ 
Arguments: {M : Type u_3} [AddCommMonoid M] {n : ℕ} (i : Fin n) (v : Fin n.succ → M)
Goal: ∑ j ∈ Finset.Ioi i.succ, v j = ∑ j ∈ Finset.Ioi i, v j.succ
-- Fin.prod_congr'
@[to_additive]
theorem prod_congr' {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin b → M) (h : a = b) :
    (∏ i : Fin a, f (cast h i)) = ∏ i : Fin b, f i 
Arguments: {M : Type u_3} [CommMonoid M] {a b : ℕ} (f : Fin b → M) (h : a = b)
Goal: ∏ i : Fin a, f (Fin.cast h i) = ∏ i : Fin b, f i
-- Fin.sum_congr'
@[to_additive]
theorem prod_congr' {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin b → M) (h : a = b) :
    (∏ i : Fin a, f (cast h i)) = ∏ i : Fin b, f i 
Arguments: {M : Type u_3} [AddCommMonoid M] {a b : ℕ} (f : Fin b → M) (h : a = b)
Goal: ∑ i : Fin a, f (Fin.cast h i) = ∑ i : Fin b, f i
-- Fin.sum_univ_add
@[to_additive]
theorem prod_univ_add {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M) :
    (∏ i : Fin (a + b), f i) = (∏ i : Fin a, f (castAdd b i)) * ∏ i : Fin b, f (natAdd a i) 
Arguments: {M : Type u_3} [AddCommMonoid M] {a b : ℕ} (f : Fin (a + b) → M)
Goal: ∑ i : Fin (a + b), f i = ∑ i : Fin a, f (Fin.castAdd b i) + ∑ i : Fin b, f (Fin.natAdd a i)
-- Fin.prod_univ_add
@[to_additive]
theorem prod_univ_add {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M) :
    (∏ i : Fin (a + b), f i) = (∏ i : Fin a, f (castAdd b i)) * ∏ i : Fin b, f (natAdd a i) 
Arguments: {M : Type u_3} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M)
Goal: ∏ i : Fin (a + b), f i = (∏ i : Fin a, f (Fin.castAdd b i)) * ∏ i : Fin b, f (Fin.natAdd a i)
-- Fin.sum_trunc
@[to_additive]
theorem prod_trunc {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M)
    (hf : ∀ j : Fin b, f (natAdd a j) = 1) :
    (∏ i : Fin (a + b), f i) = ∏ i : Fin a, f (castLE (Nat.le.intro rfl) i) 
Arguments: {M : Type u_3} [AddCommMonoid M] {a b : ℕ} (f : Fin (a + b) → M) (hf : ∀ (j : Fin b), f (Fin.natAdd a j) = 0)
Goal: ∑ i : Fin (a + b), f i = ∑ i : Fin a, f (Fin.castLE ⋯ i)
-- Fin.prod_trunc
@[to_additive]
theorem prod_trunc {M : Type*} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M)
    (hf : ∀ j : Fin b, f (natAdd a j) = 1) :
    (∏ i : Fin (a + b), f i) = ∏ i : Fin a, f (castLE (Nat.le.intro rfl) i) 
Arguments: {M : Type u_3} [CommMonoid M] {a b : ℕ} (f : Fin (a + b) → M) (hf : ∀ (j : Fin b), f (Fin.natAdd a j) = 1)
Goal: ∏ i : Fin (a + b), f i = ∏ i : Fin a, f (Fin.castLE ⋯ i)
-- Fin.partialSum_zero
@[to_additive (attr := simp)]
theorem partialProd_zero (f : Fin n → α) : partialProd f 0 = 1 
Arguments: {α : Type u_1} [AddMonoid α] {n : ℕ} (f : Fin n → α)
Goal: Fin.partialSum f 0 = 0
-- Fin.partialProd_zero
@[to_additive (attr := simp)]
theorem partialProd_zero (f : Fin n → α) : partialProd f 0 = 1 
Arguments: {α : Type u_1} [Monoid α] {n : ℕ} (f : Fin n → α)
Goal: Fin.partialProd f 0 = 1
-- Fin.partialSum_succ
@[to_additive]
theorem partialProd_succ (f : Fin n → α) (j : Fin n) :
    partialProd f j.succ = partialProd f (Fin.castSucc j) * f j 
Arguments: {α : Type u_1} [AddMonoid α] {n : ℕ} (f : Fin n → α) (j : Fin n)
Goal: Fin.partialSum f j.succ = Fin.partialSum f j.castSucc + f j
-- Fin.partialProd_succ
@[to_additive]
theorem partialProd_succ (f : Fin n → α) (j : Fin n) :
    partialProd f j.succ = partialProd f (Fin.castSucc j) * f j 
Arguments: {α : Type u_1} [Monoid α] {n : ℕ} (f : Fin n → α) (j : Fin n)
Goal: Fin.partialProd f j.succ = Fin.partialProd f j.castSucc * f j
-- Fin.partialProd_succ'
@[to_additive]
theorem partialProd_succ' (f : Fin (n + 1) → α) (j : Fin (n + 1)) :
    partialProd f j.succ = f 0 * partialProd (Fin.tail f) j 
Arguments: {α : Type u_1} [Monoid α] {n : ℕ} (f : Fin (n + 1) → α) (j : Fin (n + 1))
Goal: Fin.partialProd f j.succ = f 0 * Fin.partialProd (Fin.tail f) j
-- Fin.partialSum_succ'
@[to_additive]
theorem partialProd_succ' (f : Fin (n + 1) → α) (j : Fin (n + 1)) :
    partialProd f j.succ = f 0 * partialProd (Fin.tail f) j 
Arguments: {α : Type u_1} [AddMonoid α] {n : ℕ} (f : Fin (n + 1) → α) (j : Fin (n + 1))
Goal: Fin.partialSum f j.succ = f 0 + Fin.partialSum (Fin.tail f) j
-- Fin.partialProd_left_inv
@[to_additive]
theorem partialProd_left_inv {G : Type*} [Group G] (f : Fin (n + 1) → G) :
    (f 0 • partialProd fun i : Fin n => (f i)⁻¹ * f i.succ) = f 
Arguments: {n : ℕ} {G : Type u_3} [Group G] (f : Fin (n + 1) → G)
Goal: (f 0 • Fin.partialProd fun i => (f ↑↑i)⁻¹ * f i.succ) = f
-- Fin.partialSum_left_neg
@[to_additive]
theorem partialProd_left_inv {G : Type*} [Group G] (f : Fin (n + 1) → G) :
    (f 0 • partialProd fun i : Fin n => (f i)⁻¹ * f i.succ) = f 
Arguments: {n : ℕ} {G : Type u_3} [AddGroup G] (f : Fin (n + 1) → G)
Goal: (f 0 +ᵥ Fin.partialSum fun i => -f ↑↑i + f i.succ) = f
-- Fin.partialSum_right_neg
@[to_additive]
theorem partialProd_right_inv {G : Type*} [Group G] (f : Fin n → G) (i : Fin n) :
    (partialProd f (Fin.castSucc i))⁻¹ * partialProd f i.succ = f i 
Arguments: {n : ℕ} {G : Type u_3} [AddGroup G] (f : Fin n → G) (i : Fin n)
Goal: -Fin.partialSum f i.castSucc + Fin.partialSum f i.succ = f i
-- Fin.partialProd_right_inv
@[to_additive]
theorem partialProd_right_inv {G : Type*} [Group G] (f : Fin n → G) (i : Fin n) :
    (partialProd f (Fin.castSucc i))⁻¹ * partialProd f i.succ = f i 
Arguments: {n : ℕ} {G : Type u_3} [Group G] (f : Fin n → G) (i : Fin n)
Goal: (Fin.partialProd f i.castSucc)⁻¹ * Fin.partialProd f i.succ = f i
-- Fin.neg_partialSum_add_eq_contractNth
@[to_additive
      "Let `(g₀, g₁, ..., gₙ)` be a tuple of elements in `Gⁿ⁺¹`.
      Then if `k < j`, this says `-(g₀ + g₁ + ... + gₖ₋₁) + (g₀ + g₁ + ... + gₖ) = gₖ`.
      If `k = j`, it says `-(g₀ + g₁ + ... + gₖ₋₁) + (g₀ + g₁ + ... + gₖ₊₁) = gₖ + gₖ₊₁`.
      If `k > j`, it says `-(g₀ + g₁ + ... + gₖ) + (g₀ + g₁ + ... + gₖ₊₁) = gₖ₊₁.`
      Useful for defining group cohomology."]
theorem inv_partialProd_mul_eq_contractNth {G : Type*} [Group G] (g : Fin (n + 1) → G)
    (j : Fin (n + 1)) (k : Fin n) :
    (partialProd g (j.succ.succAbove (Fin.castSucc k)))⁻¹ * partialProd g (j.succAbove k).succ =
      j.contractNth (· * ·) g k 
Arguments: {n : ℕ} {G : Type u_3} [AddGroup G] (g : Fin (n + 1) → G) (j : Fin (n + 1)) (k : Fin n)
Goal: -Fin.partialSum g (j.succ.succAbove k.castSucc) + Fin.partialSum g (j.succAbove k).succ =
  j.contractNth (fun x x_1 => x + x_1) g k
-- Fin.inv_partialProd_mul_eq_contractNth
@[to_additive
      "Let `(g₀, g₁, ..., gₙ)` be a tuple of elements in `Gⁿ⁺¹`.
      Then if `k < j`, this says `-(g₀ + g₁ + ... + gₖ₋₁) + (g₀ + g₁ + ... + gₖ) = gₖ`.
      If `k = j`, it says `-(g₀ + g₁ + ... + gₖ₋₁) + (g₀ + g₁ + ... + gₖ₊₁) = gₖ + gₖ₊₁`.
      If `k > j`, it says `-(g₀ + g₁ + ... + gₖ) + (g₀ + g₁ + ... + gₖ₊₁) = gₖ₊₁.`
      Useful for defining group cohomology."]
theorem inv_partialProd_mul_eq_contractNth {G : Type*} [Group G] (g : Fin (n + 1) → G)
    (j : Fin (n + 1)) (k : Fin n) :
    (partialProd g (j.succ.succAbove (Fin.castSucc k)))⁻¹ * partialProd g (j.succAbove k).succ =
      j.contractNth (· * ·) g k 
Arguments: {n : ℕ} {G : Type u_3} [Group G] (g : Fin (n + 1) → G) (j : Fin (n + 1)) (k : Fin n)
Goal: (Fin.partialProd g (j.succ.succAbove k.castSucc))⁻¹ * Fin.partialProd g (j.succAbove k).succ =
  j.contractNth (fun x x_1 => x * x_1) g k
-- finFunctionFinEquiv_apply_val
@[simps!]
def finFunctionFinEquiv {m n : ℕ} : (Fin n → Fin m) ≃ Fin (m ^ n) 
Arguments: {m n : ℕ} (f : Fin n → Fin m)
Goal: ↑(finFunctionFinEquiv f) = ∑ i : Fin n, ↑(f i) * m ^ ↑i
-- finFunctionFinEquiv_symm_apply_val
@[simps!]
def finFunctionFinEquiv {m n : ℕ} : (Fin n → Fin m) ≃ Fin (m ^ n) 
Arguments: {m n : ℕ} (a : Fin (m ^ n)) (b : Fin n)
Goal: ↑(finFunctionFinEquiv.symm a b) = ↑a / m ^ ↑b % m
-- finFunctionFinEquiv_apply
theorem finFunctionFinEquiv_apply {m n : ℕ} (f : Fin n → Fin m) :
    (finFunctionFinEquiv f : ℕ) = ∑ i : Fin n, ↑(f i) * m ^ (i : ℕ) 
Arguments: {m n : ℕ} (f : Fin n → Fin m)
Goal: ↑(finFunctionFinEquiv f) = ∑ i : Fin n, ↑(f i) * m ^ ↑i
-- finFunctionFinEquiv_single
theorem finFunctionFinEquiv_single {m n : ℕ} [NeZero m] (i : Fin n) (j : Fin m) :
    (finFunctionFinEquiv (Pi.single i j) : ℕ) = j * m ^ (i : ℕ) 
Arguments: {m n : ℕ} [NeZero m] (i : Fin n) (j : Fin m)
Goal: ↑(finFunctionFinEquiv (Pi.single i j)) = ↑j * m ^ ↑i
-- finPiFinEquiv_apply
theorem finPiFinEquiv_apply {m : ℕ} {n : Fin m → ℕ} (f : ∀ i : Fin m, Fin (n i)) :
    (finPiFinEquiv f : ℕ) = ∑ i, f i * ∏ j, n (Fin.castLE i.is_lt.le j) 
Arguments: {m : ℕ} {n : Fin m → ℕ} (f : (i : Fin m) → Fin (n i))
Goal: ↑(finPiFinEquiv f) = ∑ i : Fin m, ↑(f i) * ∏ j : Fin ↑i, n (Fin.castLE ⋯ j)
-- finPiFinEquiv_single
theorem finPiFinEquiv_single {m : ℕ} {n : Fin m → ℕ} [∀ i, NeZero (n i)] (i : Fin m)
    (j : Fin (n i)) :
    (finPiFinEquiv (Pi.single i j : ∀ i : Fin m, Fin (n i)) : ℕ) =
      j * ∏ j, n (Fin.castLE i.is_lt.le j) 
Arguments: {m : ℕ} {n : Fin m → ℕ} [∀ (i : Fin m), NeZero (n i)] (i : Fin m) (j : Fin (n i))
Goal: ↑(finPiFinEquiv (Pi.single i j)) = ↑j * ∏ j : Fin ↑i, n (Fin.castLE ⋯ j)
-- List.prod_take_ofFn
@[to_additive]
theorem prod_take_ofFn {n : ℕ} (f : Fin n → α) (i : ℕ) :
    ((ofFn f).take i).prod = ∏ j ∈ Finset.univ.filter fun j : Fin n => j.val < i, f j 
Arguments: {α : Type u_1} [CommMonoid α] {n : ℕ} (f : Fin n → α) (i : ℕ)
Goal: (List.take i (List.ofFn f)).prod = ∏ j ∈ Finset.filter (fun j => ↑j < i) Finset.univ, f j
-- List.sum_take_ofFn
@[to_additive]
theorem prod_take_ofFn {n : ℕ} (f : Fin n → α) (i : ℕ) :
    ((ofFn f).take i).prod = ∏ j ∈ Finset.univ.filter fun j : Fin n => j.val < i, f j 
Arguments: {α : Type u_1} [AddCommMonoid α] {n : ℕ} (f : Fin n → α) (i : ℕ)
Goal: (List.take i (List.ofFn f)).sum = ∑ j ∈ Finset.filter (fun j => ↑j < i) Finset.univ, f j
-- List.sum_ofFn
@[to_additive]
theorem prod_ofFn {n : ℕ} {f : Fin n → α} : (ofFn f).prod = ∏ i, f i 
Arguments: {α : Type u_1} [AddCommMonoid α] {n : ℕ} {f : Fin n → α}
Goal: (List.ofFn f).sum = ∑ i : Fin n, f i
-- List.prod_ofFn
@[to_additive]
theorem prod_ofFn {n : ℕ} {f : Fin n → α} : (ofFn f).prod = ∏ i, f i 
Arguments: {α : Type u_1} [CommMonoid α] {n : ℕ} {f : Fin n → α}
Goal: (List.ofFn f).prod = ∏ i : Fin n, f i
-- List.alternatingSum_eq_finset_sum
@[to_additive]
theorem alternatingProd_eq_finset_prod {G : Type*} [CommGroup G] :
    ∀ (L : List G), alternatingProd L = ∏ i : Fin L.length, L.get i ^ (-1 : ℤ) ^ (i : ℕ)
  
Arguments: {G : Type u_3} [AddCommGroup G] (L : List G)
Goal: L.alternatingSum = ∑ i : Fin L.length, (-1) ^ ↑i • L.get i
-- List.alternatingProd_eq_finset_prod
@[to_additive]
theorem alternatingProd_eq_finset_prod {G : Type*} [CommGroup G] :
    ∀ (L : List G), alternatingProd L = ∏ i : Fin L.length, L.get i ^ (-1 : ℤ) ^ (i : ℕ)
  
Arguments: {G : Type u_3} [CommGroup G] (L : List G)
Goal: L.alternatingProd = ∏ i : Fin L.length, L.get i ^ (-1) ^ ↑i
-- charP_of_injective_ringHom
theorem charP_of_injective_ringHom {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A]
    {f : R →+* A} (h : Function.Injective f) (p : ℕ) [CharP R p] : CharP A p 
Arguments: {R : Type u_1} {A : Type u_2} [NonAssocSemiring R] [NonAssocSemiring A] {f : R →+* A} (h : Function.Injective ⇑f) (p : ℕ) [CharP R p]
Goal: CharP A p
-- charP_of_injective_algebraMap
theorem charP_of_injective_algebraMap {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
    (h : Function.Injective (algebraMap R A)) (p : ℕ) [CharP R p] : CharP A p 
Arguments: {R : Type u_1} {A : Type u_2} [CommSemiring R] [Semiring A] [Algebra R A] (h : Function.Injective ⇑(algebraMap R A)) (p : ℕ) [CharP R p]
Goal: CharP A p
-- charP_of_injective_algebraMap'
theorem charP_of_injective_algebraMap' (R A : Type*) [Field R] [Semiring A] [Algebra R A]
    [Nontrivial A] (p : ℕ) [CharP R p] : CharP A p 
Arguments: (R : Type u_1) (A : Type u_2) [Field R] [Semiring A] [Algebra R A] [Nontrivial A] (p : ℕ) [CharP R p]
Goal: CharP A p
-- charZero_of_injective_ringHom
theorem charZero_of_injective_ringHom {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A]
    {f : R →+* A} (h : Function.Injective f) [CharZero R] : CharZero A 
Arguments: {R : Type u_1} {A : Type u_2} [NonAssocSemiring R] [NonAssocSemiring A] {f : R →+* A} (h : Function.Injective ⇑f) [CharZero R]
Goal: CharZero A
-- charZero_of_injective_algebraMap
theorem charZero_of_injective_algebraMap {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
    (h : Function.Injective (algebraMap R A)) [CharZero R] : CharZero A 
Arguments: {R : Type u_1} {A : Type u_2} [CommSemiring R] [Semiring A] [Algebra R A] (h : Function.Injective ⇑(algebraMap R A)) [CharZero R]
Goal: CharZero A
-- RingHom.charP
theorem RingHom.charP {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A] (f : R →+* A)
    (H : Function.Injective f) (p : ℕ) [CharP A p] : CharP R p 
Arguments: {R : Type u_1} {A : Type u_2} [NonAssocSemiring R] [NonAssocSemiring A] (f : R →+* A) (H : Function.Injective ⇑f) (p : ℕ) [CharP A p]
Goal: CharP R p
-- RingHom.charP_iff
theorem RingHom.charP_iff {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A] (f : R →+* A)
    (H : Function.Injective f) (p : ℕ) : CharP R p ↔ CharP A p 
Arguments: {R : Type u_1} {A : Type u_2} [NonAssocSemiring R] [NonAssocSemiring A] (f : R →+* A) (H : Function.Injective ⇑f) (p : ℕ)
Goal: CharP R p ↔ CharP A p
-- algebraRat.charP_zero
theorem algebraRat.charP_zero [Semiring R] [Algebra ℚ R] : CharP R 0 
Arguments: (R : Type u_1) [Nontrivial R] [Semiring R] [Algebra ℚ R]
Goal: CharP R 0
-- algebraRat.charZero
theorem algebraRat.charZero [Ring R] [Algebra ℚ R] : CharZero R 
Arguments: (R : Type u_1) [Nontrivial R] [Ring R] [Algebra ℚ R]
Goal: CharZero R
-- Algebra.charP_iff
theorem Algebra.charP_iff (p : ℕ) : CharP K p ↔ CharP L p 
Arguments: (K : Type u_1) (L : Type u_2) [Field K] [CommSemiring L] [Nontrivial L] [Algebra K L] (p : ℕ)
Goal: CharP K p ↔ CharP L p
-- Algebra.ringChar_eq
theorem Algebra.ringChar_eq : ringChar K = ringChar L 
Arguments: (K : Type u_1) (L : Type u_2) [Field K] [CommSemiring L] [Nontrivial L] [Algebra K L]
Goal: ringChar K = ringChar L
-- IsFractionRing.charP_of_isFractionRing
theorem charP_of_isFractionRing [CharP R p] : CharP K p 
Arguments: (R : Type u_1) {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] (p : ℕ) [CharP R p]
Goal: CharP K p
-- IsFractionRing.charZero_of_isFractionRing
theorem charZero_of_isFractionRing [CharZero R] : CharZero K 
Arguments: (R : Type u_1) {K : Type u_2} [CommRing R] [Field K] [Algebra R K] [IsFractionRing R K] [CharZero R]
Goal: CharZero K
-- charP_iff
@[mk_iff]
class _root_.CharP : Prop where
  cast_eq_zero_iff' : ∀ x : ℕ, (x : R) = 0 ↔ p ∣ x
Arguments: (R : Type u_1) [AddMonoidWithOne R] (p : ℕ)
Goal: CharP R p ↔ ∀ (x : ℕ), ↑x = 0 ↔ p ∣ x
-- CharP.cast_eq_zero_iff'
@[mk_iff]
class _root_.CharP : Prop where
  cast_eq_zero_iff' : ∀ x : ℕ, (x : R) = 0 ↔ p ∣ x
Arguments: {R : Type u_1} [AddMonoidWithOne R] {p : ℕ} [self : CharP R p] (x : ℕ)
Goal: ↑x = 0 ↔ p ∣ x