File: Mathlib/Algebra/BigOperators/Intervals.lean

full_name: Finset.mul_prod_Ico_eq_prod_Icc
code: @[to_additive]
lemma mul_prod_Ico_eq_prod_Icc (h : a ≤ b) : f b * ∏ x ∈ Ico a b, f x = ∏ x ∈ Icc a b, f x 
goal: f b * ∏ x ∈ Finset.Ico a b, f x = ∏ x ∈ Finset.Icc a b, f x

full_name: Finset.add_sum_Ico_eq_sum_Icc
code: @[to_additive]
lemma mul_prod_Ico_eq_prod_Icc (h : a ≤ b) : f b * ∏ x ∈ Ico a b, f x = ∏ x ∈ Icc a b, f x 
goal: f b + ∑ x ∈ Finset.Ico a b, f x = ∑ x ∈ Finset.Icc a b, f x

full_name: Finset.prod_Ico_mul_eq_prod_Icc
code: @[to_additive]
lemma prod_Ico_mul_eq_prod_Icc (h : a ≤ b) : (∏ x ∈ Ico a b, f x) * f b = ∏ x ∈ Icc a b, f x 
goal: (∏ x ∈ Finset.Ico a b, f x) * f b = ∏ x ∈ Finset.Icc a b, f x

full_name: Finset.sum_Ico_add_eq_sum_Icc
code: @[to_additive]
lemma prod_Ico_mul_eq_prod_Icc (h : a ≤ b) : (∏ x ∈ Ico a b, f x) * f b = ∏ x ∈ Icc a b, f x 
goal: ∑ x ∈ Finset.Ico a b, f x + f b = ∑ x ∈ Finset.Icc a b, f x

full_name: Finset.mul_prod_Ioc_eq_prod_Icc
code: @[to_additive]
lemma mul_prod_Ioc_eq_prod_Icc (h : a ≤ b) : f a * ∏ x ∈ Ioc a b, f x = ∏ x ∈ Icc a b, f x 
goal: f a * ∏ x ∈ Finset.Ioc a b, f x = ∏ x ∈ Finset.Icc a b, f x

full_name: Finset.add_sum_Ioc_eq_sum_Icc
code: @[to_additive]
lemma mul_prod_Ioc_eq_prod_Icc (h : a ≤ b) : f a * ∏ x ∈ Ioc a b, f x = ∏ x ∈ Icc a b, f x 
goal: f a + ∑ x ∈ Finset.Ioc a b, f x = ∑ x ∈ Finset.Icc a b, f x

full_name: Finset.prod_Ioc_mul_eq_prod_Icc
code: @[to_additive]
lemma prod_Ioc_mul_eq_prod_Icc (h : a ≤ b) : (∏ x ∈ Ioc a b, f x) * f a = ∏ x ∈ Icc a b, f x 
goal: (∏ x ∈ Finset.Ioc a b, f x) * f a = ∏ x ∈ Finset.Icc a b, f x

full_name: Finset.sum_Ioc_add_eq_sum_Icc
code: @[to_additive]
lemma prod_Ioc_mul_eq_prod_Icc (h : a ≤ b) : (∏ x ∈ Ioc a b, f x) * f a = ∏ x ∈ Icc a b, f x 
goal: ∑ x ∈ Finset.Ioc a b, f x + f a = ∑ x ∈ Finset.Icc a b, f x

full_name: Finset.mul_prod_Ioi_eq_prod_Ici
code: @[to_additive]
lemma mul_prod_Ioi_eq_prod_Ici (a : α) : f a * ∏ x ∈ Ioi a, f x = ∏ x ∈ Ici a, f x 
goal: f a * ∏ x ∈ Finset.Ioi a, f x = ∏ x ∈ Finset.Ici a, f x

full_name: Finset.add_sum_Ioi_eq_sum_Ici
code: @[to_additive]
lemma mul_prod_Ioi_eq_prod_Ici (a : α) : f a * ∏ x ∈ Ioi a, f x = ∏ x ∈ Ici a, f x 
goal: f a + ∑ x ∈ Finset.Ioi a, f x = ∑ x ∈ Finset.Ici a, f x

full_name: Finset.sum_Ioi_add_eq_sum_Ici
code: @[to_additive]
lemma prod_Ioi_mul_eq_prod_Ici (a : α) : (∏ x ∈ Ioi a, f x) * f a = ∏ x ∈ Ici a, f x 
goal: ∑ x ∈ Finset.Ioi a, f x + f a = ∑ x ∈ Finset.Ici a, f x

full_name: Finset.prod_Ioi_mul_eq_prod_Ici
code: @[to_additive]
lemma prod_Ioi_mul_eq_prod_Ici (a : α) : (∏ x ∈ Ioi a, f x) * f a = ∏ x ∈ Ici a, f x 
goal: (∏ x ∈ Finset.Ioi a, f x) * f a = ∏ x ∈ Finset.Ici a, f x

full_name: Finset.mul_prod_Iio_eq_prod_Iic
code: @[to_additive]
lemma mul_prod_Iio_eq_prod_Iic (a : α) : f a * ∏ x ∈ Iio a, f x = ∏ x ∈ Iic a, f x 
goal: f a * ∏ x ∈ Finset.Iio a, f x = ∏ x ∈ Finset.Iic a, f x

full_name: Finset.add_sum_Iio_eq_sum_Iic
code: @[to_additive]
lemma mul_prod_Iio_eq_prod_Iic (a : α) : f a * ∏ x ∈ Iio a, f x = ∏ x ∈ Iic a, f x 
goal: f a + ∑ x ∈ Finset.Iio a, f x = ∑ x ∈ Finset.Iic a, f x

full_name: Finset.sum_Iio_add_eq_sum_Iic
code: @[to_additive]
lemma prod_Iio_mul_eq_prod_Iic (a : α) : (∏ x ∈ Iio a, f x) * f a = ∏ x ∈ Iic a, f x 
goal: ∑ x ∈ Finset.Iio a, f x + f a = ∑ x ∈ Finset.Iic a, f x

full_name: Finset.prod_Iio_mul_eq_prod_Iic
code: @[to_additive]
lemma prod_Iio_mul_eq_prod_Iic (a : α) : (∏ x ∈ Iio a, f x) * f a = ∏ x ∈ Iic a, f x 
goal: (∏ x ∈ Finset.Iio a, f x) * f a = ∏ x ∈ Finset.Iic a, f x

full_name: Finset.prod_prod_Ioi_mul_eq_prod_prod_off_diag
code: @[to_additive]
lemma prod_prod_Ioi_mul_eq_prod_prod_off_diag (f : α → α → M) :
    ∏ i, ∏ j ∈ Ioi i, f j i * f i j = ∏ i, ∏ j ∈ {i}ᶜ, f j i 
goal: ∏ i : α, ∏ j ∈ Finset.Ioi i, f j i * f i j = ∏ i : α, ∏ j ∈ {i}ᶜ, f j i

full_name: Finset.sum_sum_Ioi_add_eq_sum_sum_off_diag
code: @[to_additive]
lemma prod_prod_Ioi_mul_eq_prod_prod_off_diag (f : α → α → M) :
    ∏ i, ∏ j ∈ Ioi i, f j i * f i j = ∏ i, ∏ j ∈ {i}ᶜ, f j i 
goal: ∑ i : α, ∑ j ∈ Finset.Ioi i, (f j i + f i j) = ∑ i : α, ∑ j ∈ {i}ᶜ, f j i

full_name: Finset.prod_Ico_add'
code: @[to_additive]
theorem prod_Ico_add' [OrderedCancelAddCommMonoid α] [ExistsAddOfLE α] [LocallyFiniteOrder α]
    (f : α → M) (a b c : α) : (∏ x ∈ Ico a b, f (x + c)) = ∏ x ∈ Ico (a + c) (b + c), f x 
goal: ∏ x ∈ Finset.Ico a b, f (x + c) = ∏ x ∈ Finset.Ico (a + c) (b + c), f x

full_name: Finset.sum_Ico_add'
code: @[to_additive]
theorem prod_Ico_add' [OrderedCancelAddCommMonoid α] [ExistsAddOfLE α] [LocallyFiniteOrder α]
    (f : α → M) (a b c : α) : (∏ x ∈ Ico a b, f (x + c)) = ∏ x ∈ Ico (a + c) (b + c), f x 
goal: ∑ x ∈ Finset.Ico a b, f (x + c) = ∑ x ∈ Finset.Ico (a + c) (b + c), f x

full_name: Finset.prod_Ico_add
code: @[to_additive]
theorem prod_Ico_add [OrderedCancelAddCommMonoid α] [ExistsAddOfLE α] [LocallyFiniteOrder α]
    (f : α → M) (a b c : α) : (∏ x ∈ Ico a b, f (c + x)) = ∏ x ∈ Ico (a + c) (b + c), f x 
goal: ∏ x ∈ Finset.Ico a b, f (c + x) = ∏ x ∈ Finset.Ico (a + c) (b + c), f x

full_name: Finset.sum_Ico_add
code: @[to_additive]
theorem prod_Ico_add [OrderedCancelAddCommMonoid α] [ExistsAddOfLE α] [LocallyFiniteOrder α]
    (f : α → M) (a b c : α) : (∏ x ∈ Ico a b, f (c + x)) = ∏ x ∈ Ico (a + c) (b + c), f x 
goal: ∑ x ∈ Finset.Ico a b, f (c + x) = ∑ x ∈ Finset.Ico (a + c) (b + c), f x

full_name: Finset.prod_Ico_succ_top
code: @[to_additive]
theorem prod_Ico_succ_top {a b : ℕ} (hab : a ≤ b) (f : ℕ → M) :
    (∏ k ∈ Ico a (b + 1), f k) = (∏ k ∈ Ico a b, f k) * f b 
goal: ∏ k ∈ Finset.Ico a (b + 1), f k = (∏ k ∈ Finset.Ico a b, f k) * f b

full_name: Finset.sum_Ico_succ_top
code: @[to_additive]
theorem prod_Ico_succ_top {a b : ℕ} (hab : a ≤ b) (f : ℕ → M) :
    (∏ k ∈ Ico a (b + 1), f k) = (∏ k ∈ Ico a b, f k) * f b 
goal: ∑ k ∈ Finset.Ico a (b + 1), f k = ∑ k ∈ Finset.Ico a b, f k + f b

full_name: Finset.prod_eq_prod_Ico_succ_bot
code: @[to_additive]
theorem prod_eq_prod_Ico_succ_bot {a b : ℕ} (hab : a < b) (f : ℕ → M) :
    ∏ k ∈ Ico a b, f k = f a * ∏ k ∈ Ico (a + 1) b, f k 
goal: ∏ k ∈ Finset.Ico a b, f k = f a * ∏ k ∈ Finset.Ico (a + 1) b, f k

full_name: Finset.sum_eq_sum_Ico_succ_bot
code: @[to_additive]
theorem prod_eq_prod_Ico_succ_bot {a b : ℕ} (hab : a < b) (f : ℕ → M) :
    ∏ k ∈ Ico a b, f k = f a * ∏ k ∈ Ico (a + 1) b, f k 
goal: ∑ k ∈ Finset.Ico a b, f k = f a + ∑ k ∈ Finset.Ico (a + 1) b, f k

full_name: Finset.prod_Ico_consecutive
code: @[to_additive]
theorem prod_Ico_consecutive (f : ℕ → M) {m n k : ℕ} (hmn : m ≤ n) (hnk : n ≤ k) :
    ((∏ i ∈ Ico m n, f i) * ∏ i ∈ Ico n k, f i) = ∏ i ∈ Ico m k, f i 
goal: (∏ i ∈ Finset.Ico m n, f i) * ∏ i ∈ Finset.Ico n k, f i = ∏ i ∈ Finset.Ico m k, f i

full_name: Finset.sum_Ico_consecutive
code: @[to_additive]
theorem prod_Ico_consecutive (f : ℕ → M) {m n k : ℕ} (hmn : m ≤ n) (hnk : n ≤ k) :
    ((∏ i ∈ Ico m n, f i) * ∏ i ∈ Ico n k, f i) = ∏ i ∈ Ico m k, f i 
goal: ∑ i ∈ Finset.Ico m n, f i + ∑ i ∈ Finset.Ico n k, f i = ∑ i ∈ Finset.Ico m k, f i

full_name: Finset.prod_Ioc_consecutive
code: @[to_additive]
theorem prod_Ioc_consecutive (f : ℕ → M) {m n k : ℕ} (hmn : m ≤ n) (hnk : n ≤ k) :
    ((∏ i ∈ Ioc m n, f i) * ∏ i ∈ Ioc n k, f i) = ∏ i ∈ Ioc m k, f i 
goal: (∏ i ∈ Finset.Ioc m n, f i) * ∏ i ∈ Finset.Ioc n k, f i = ∏ i ∈ Finset.Ioc m k, f i

full_name: Finset.sum_Ioc_consecutive
code: @[to_additive]
theorem prod_Ioc_consecutive (f : ℕ → M) {m n k : ℕ} (hmn : m ≤ n) (hnk : n ≤ k) :
    ((∏ i ∈ Ioc m n, f i) * ∏ i ∈ Ioc n k, f i) = ∏ i ∈ Ioc m k, f i 
goal: ∑ i ∈ Finset.Ioc m n, f i + ∑ i ∈ Finset.Ioc n k, f i = ∑ i ∈ Finset.Ioc m k, f i

full_name: Finset.sum_Ioc_succ_top
code: @[to_additive]
theorem prod_Ioc_succ_top {a b : ℕ} (hab : a ≤ b) (f : ℕ → M) :
    (∏ k ∈ Ioc a (b + 1), f k) = (∏ k ∈ Ioc a b, f k) * f (b + 1) 
goal: ∑ k ∈ Finset.Ioc a (b + 1), f k = ∑ k ∈ Finset.Ioc a b, f k + f (b + 1)

full_name: Finset.prod_Ioc_succ_top
code: @[to_additive]
theorem prod_Ioc_succ_top {a b : ℕ} (hab : a ≤ b) (f : ℕ → M) :
    (∏ k ∈ Ioc a (b + 1), f k) = (∏ k ∈ Ioc a b, f k) * f (b + 1) 
goal: ∏ k ∈ Finset.Ioc a (b + 1), f k = (∏ k ∈ Finset.Ioc a b, f k) * f (b + 1)

full_name: Finset.prod_Icc_succ_top
code: @[to_additive]
theorem prod_Icc_succ_top {a b : ℕ} (hab : a ≤ b + 1) (f : ℕ → M) :
    (∏ k in Icc a (b + 1), f k) = (∏ k in Icc a b, f k) * f (b + 1) 
goal: ∏ k ∈ Finset.Icc a (b + 1), f k = (∏ k ∈ Finset.Icc a b, f k) * f (b + 1)

full_name: Finset.sum_Icc_succ_top
code: @[to_additive]
theorem prod_Icc_succ_top {a b : ℕ} (hab : a ≤ b + 1) (f : ℕ → M) :
    (∏ k in Icc a (b + 1), f k) = (∏ k in Icc a b, f k) * f (b + 1) 
goal: ∑ k ∈ Finset.Icc a (b + 1), f k = ∑ k ∈ Finset.Icc a b, f k + f (b + 1)

full_name: Finset.sum_range_add_sum_Ico
code: @[to_additive]
theorem prod_range_mul_prod_Ico (f : ℕ → M) {m n : ℕ} (h : m ≤ n) :
    ((∏ k ∈ range m, f k) * ∏ k ∈ Ico m n, f k) = ∏ k ∈ range n, f k 
goal: ∑ k ∈ Finset.range m, f k + ∑ k ∈ Finset.Ico m n, f k = ∑ k ∈ Finset.range n, f k

full_name: Finset.prod_range_mul_prod_Ico
code: @[to_additive]
theorem prod_range_mul_prod_Ico (f : ℕ → M) {m n : ℕ} (h : m ≤ n) :
    ((∏ k ∈ range m, f k) * ∏ k ∈ Ico m n, f k) = ∏ k ∈ range n, f k 
goal: (∏ k ∈ Finset.range m, f k) * ∏ k ∈ Finset.Ico m n, f k = ∏ k ∈ Finset.range n, f k

full_name: Finset.sum_Ico_eq_add_neg
code: @[to_additive]
theorem prod_Ico_eq_mul_inv {δ : Type*} [CommGroup δ] (f : ℕ → δ) {m n : ℕ} (h : m ≤ n) :
    ∏ k ∈ Ico m n, f k = (∏ k ∈ range n, f k) * (∏ k ∈ range m, f k)⁻¹ 
goal: ∑ k ∈ Finset.Ico m n, f k = ∑ k ∈ Finset.range n, f k + -∑ k ∈ Finset.range m, f k

full_name: Finset.prod_Ico_eq_mul_inv
code: @[to_additive]
theorem prod_Ico_eq_mul_inv {δ : Type*} [CommGroup δ] (f : ℕ → δ) {m n : ℕ} (h : m ≤ n) :
    ∏ k ∈ Ico m n, f k = (∏ k ∈ range n, f k) * (∏ k ∈ range m, f k)⁻¹ 
goal: ∏ k ∈ Finset.Ico m n, f k = (∏ k ∈ Finset.range n, f k) * (∏ k ∈ Finset.range m, f k)⁻¹

full_name: Finset.prod_Ico_eq_div
code: @[to_additive]
theorem prod_Ico_eq_div {δ : Type*} [CommGroup δ] (f : ℕ → δ) {m n : ℕ} (h : m ≤ n) :
    ∏ k ∈ Ico m n, f k = (∏ k ∈ range n, f k) / ∏ k ∈ range m, f k 
goal: ∏ k ∈ Finset.Ico m n, f k = (∏ k ∈ Finset.range n, f k) / ∏ k ∈ Finset.range m, f k

full_name: Finset.sum_Ico_eq_sub
code: @[to_additive]
theorem prod_Ico_eq_div {δ : Type*} [CommGroup δ] (f : ℕ → δ) {m n : ℕ} (h : m ≤ n) :
    ∏ k ∈ Ico m n, f k = (∏ k ∈ range n, f k) / ∏ k ∈ range m, f k 
goal: ∑ k ∈ Finset.Ico m n, f k = ∑ k ∈ Finset.range n, f k - ∑ k ∈ Finset.range m, f k

full_name: Finset.sum_range_sub_sum_range
code: @[to_additive]
theorem prod_range_div_prod_range {α : Type*} [CommGroup α] {f : ℕ → α} {n m : ℕ} (hnm : n ≤ m) :
    ((∏ k ∈ range m, f k) / ∏ k ∈ range n, f k) =
    ∏ k ∈ (range m).filter fun k => n ≤ k, f k 
goal: ∑ k ∈ Finset.range m, f k - ∑ k ∈ Finset.range n, f k = ∑ k ∈ Finset.filter (fun k => n ≤ k) (Finset.range m), f k

full_name: Finset.prod_range_div_prod_range
code: @[to_additive]
theorem prod_range_div_prod_range {α : Type*} [CommGroup α] {f : ℕ → α} {n m : ℕ} (hnm : n ≤ m) :
    ((∏ k ∈ range m, f k) / ∏ k ∈ range n, f k) =
    ∏ k ∈ (range m).filter fun k => n ≤ k, f k 
goal: (∏ k ∈ Finset.range m, f k) / ∏ k ∈ Finset.range n, f k = ∏ k ∈ Finset.filter (fun k => n ≤ k) (Finset.range m), f k

full_name: Finset.sum_Ico_Ico_comm
code: /-- The two ways of summing over `(i, j)` in the range `a ≤ i ≤ j < b` are equal. -/
theorem sum_Ico_Ico_comm {M : Type*} [AddCommMonoid M] (a b : ℕ) (f : ℕ → ℕ → M) :
    (∑ i ∈ Finset.Ico a b, ∑ j ∈ Finset.Ico i b, f i j) =
      ∑ j ∈ Finset.Ico a b, ∑ i ∈ Finset.Ico a (j + 1), f i j 
goal: ∑ i ∈ Finset.Ico a b, ∑ j ∈ Finset.Ico i b, f i j = ∑ j ∈ Finset.Ico a b, ∑ i ∈ Finset.Ico a (j + 1), f i j

full_name: Finset.sum_Ico_Ico_comm'
code: /-- The two ways of summing over `(i, j)` in the range `a ≤ i < j < b` are equal. -/
theorem sum_Ico_Ico_comm' {M : Type*} [AddCommMonoid M] (a b : ℕ) (f : ℕ → ℕ → M) :
    (∑ i ∈ Finset.Ico a b, ∑ j ∈ Finset.Ico (i + 1) b, f i j) =
      ∑ j ∈ Finset.Ico a b, ∑ i ∈ Finset.Ico a j, f i j 
goal: ∑ i ∈ Finset.Ico a b, ∑ j ∈ Finset.Ico (i + 1) b, f i j = ∑ j ∈ Finset.Ico a b, ∑ i ∈ Finset.Ico a j, f i j

full_name: Finset.sum_Ico_eq_sum_range
code: @[to_additive]
theorem prod_Ico_eq_prod_range (f : ℕ → M) (m n : ℕ) :
    ∏ k ∈ Ico m n, f k = ∏ k ∈ range (n - m), f (m + k) 
goal: ∑ k ∈ Finset.Ico m n, f k = ∑ k ∈ Finset.range (n - m), f (m + k)

full_name: Finset.prod_Ico_eq_prod_range
code: @[to_additive]
theorem prod_Ico_eq_prod_range (f : ℕ → M) (m n : ℕ) :
    ∏ k ∈ Ico m n, f k = ∏ k ∈ range (n - m), f (m + k) 
goal: ∏ k ∈ Finset.Ico m n, f k = ∏ k ∈ Finset.range (n - m), f (m + k)

full_name: Finset.prod_Ico_reflect
code: theorem prod_Ico_reflect (f : ℕ → M) (k : ℕ) {m n : ℕ} (h : m ≤ n + 1) :
    (∏ j ∈ Ico k m, f (n - j)) = ∏ j ∈ Ico (n + 1 - m) (n + 1 - k), f j 
goal: ∏ j ∈ Finset.Ico k m, f (n - j) = ∏ j ∈ Finset.Ico (n + 1 - m) (n + 1 - k), f j

full_name: Finset.sum_Ico_reflect
code: theorem sum_Ico_reflect {δ : Type*} [AddCommMonoid δ] (f : ℕ → δ) (k : ℕ) {m n : ℕ}
    (h : m ≤ n + 1) : (∑ j ∈ Ico k m, f (n - j)) = ∑ j ∈ Ico (n + 1 - m) (n + 1 - k), f j 
goal: ∑ j ∈ Finset.Ico k m, f (n - j) = ∑ j ∈ Finset.Ico (n + 1 - m) (n + 1 - k), f j

full_name: Finset.prod_range_reflect
code: theorem prod_range_reflect (f : ℕ → M) (n : ℕ) :
    (∏ j ∈ range n, f (n - 1 - j)) = ∏ j ∈ range n, f j 
goal: ∏ j ∈ Finset.range n, f (n - 1 - j) = ∏ j ∈ Finset.range n, f j

full_name: Finset.sum_range_reflect
code: theorem sum_range_reflect {δ : Type*} [AddCommMonoid δ] (f : ℕ → δ) (n : ℕ) :
    (∑ j ∈ range n, f (n - 1 - j)) = ∑ j ∈ range n, f j 
goal: ∑ j ∈ Finset.range n, f (n - 1 - j) = ∑ j ∈ Finset.range n, f j

full_name: Finset.prod_Ico_id_eq_factorial
code: @[simp]
theorem prod_Ico_id_eq_factorial : ∀ n : ℕ, (∏ x ∈ Ico 1 (n + 1), x) = n !
  
goal: ∏ x ∈ Finset.Ico 1 (n + 1), x = n !

full_name: Finset.prod_range_add_one_eq_factorial
code: @[simp]
theorem prod_range_add_one_eq_factorial : ∀ n : ℕ, (∏ x ∈ range n, (x + 1)) = n !
  
goal: ∏ x ∈ Finset.range n, (x + 1) = n !

full_name: Finset.sum_range_id_mul_two
code: /-- Gauss' summation formula -/
theorem sum_range_id_mul_two (n : ℕ) : (∑ i ∈ range n, i) * 2 = n * (n - 1) 
goal: (∑ i ∈ Finset.range n, i) * 2 = n * (n - 1)

full_name: Finset.sum_range_id
code: /-- Gauss' summation formula -/
theorem sum_range_id (n : ℕ) : ∑ i ∈ range n, i = n * (n - 1) / 2 
goal: ∑ i ∈ Finset.range n, i = n * (n - 1) / 2

full_name: Finset.prod_range_diag_flip
code: @[to_additive]
lemma prod_range_diag_flip (n : ℕ) (f : ℕ → ℕ → M) :
    (∏ m ∈ range n, ∏ k ∈ range (m + 1), f k (m - k)) =
      ∏ m ∈ range n, ∏ k ∈ range (n - m), f m k 
goal: ∏ m ∈ Finset.range n, ∏ k ∈ Finset.range (m + 1), f k (m - k) = ∏ m ∈ Finset.range n, ∏ k ∈ Finset.range (n - m), f m k

full_name: Finset.sum_range_diag_flip
code: @[to_additive]
lemma prod_range_diag_flip (n : ℕ) (f : ℕ → ℕ → M) :
    (∏ m ∈ range n, ∏ k ∈ range (m + 1), f k (m - k)) =
      ∏ m ∈ range n, ∏ k ∈ range (n - m), f m k 
goal: ∑ m ∈ Finset.range n, ∑ k ∈ Finset.range (m + 1), f k (m - k) = ∑ m ∈ Finset.range n, ∑ k ∈ Finset.range (n - m), f m k

full_name: Finset.prod_range_succ_div_prod
code: @[to_additive]
theorem prod_range_succ_div_prod : ((∏ i ∈ range (n + 1), f i) / ∏ i ∈ range n, f i) = f n 
goal: (∏ i ∈ Finset.range (n + 1), f i) / ∏ i ∈ Finset.range n, f i = f n

full_name: Finset.sum_range_succ_sub_sum
code: @[to_additive]
theorem prod_range_succ_div_prod : ((∏ i ∈ range (n + 1), f i) / ∏ i ∈ range n, f i) = f n 
goal: ∑ i ∈ Finset.range (n + 1), f i - ∑ i ∈ Finset.range n, f i = f n

full_name: Finset.sum_range_succ_sub_top
code: @[to_additive]
theorem prod_range_succ_div_top : (∏ i ∈ range (n + 1), f i) / f n = ∏ i ∈ range n, f i 
goal: ∑ i ∈ Finset.range (n + 1), f i - f n = ∑ i ∈ Finset.range n, f i

full_name: Finset.prod_range_succ_div_top
code: @[to_additive]
theorem prod_range_succ_div_top : (∏ i ∈ range (n + 1), f i) / f n = ∏ i ∈ range n, f i 
goal: (∏ i ∈ Finset.range (n + 1), f i) / f n = ∏ i ∈ Finset.range n, f i

full_name: Finset.sum_Ico_sub_bot
code: @[to_additive]
theorem prod_Ico_div_bot (hmn : m < n) : (∏ i ∈ Ico m n, f i) / f m = ∏ i ∈ Ico (m + 1) n, f i 
goal: ∑ i ∈ Finset.Ico m n, f i - f m = ∑ i ∈ Finset.Ico (m + 1) n, f i

full_name: Finset.prod_Ico_div_bot
code: @[to_additive]
theorem prod_Ico_div_bot (hmn : m < n) : (∏ i ∈ Ico m n, f i) / f m = ∏ i ∈ Ico (m + 1) n, f i 
goal: (∏ i ∈ Finset.Ico m n, f i) / f m = ∏ i ∈ Finset.Ico (m + 1) n, f i

full_name: Finset.prod_Ico_succ_div_top
code: @[to_additive]
theorem prod_Ico_succ_div_top (hmn : m ≤ n) :
    (∏ i ∈ Ico m (n + 1), f i) / f n = ∏ i ∈ Ico m n, f i 
goal: (∏ i ∈ Finset.Ico m (n + 1), f i) / f n = ∏ i ∈ Finset.Ico m n, f i

full_name: Finset.sum_Ico_succ_sub_top
code: @[to_additive]
theorem prod_Ico_succ_div_top (hmn : m ≤ n) :
    (∏ i ∈ Ico m (n + 1), f i) / f n = ∏ i ∈ Ico m n, f i 
goal: ∑ i ∈ Finset.Ico m (n + 1), f i - f n = ∑ i ∈ Finset.Ico m n, f i