File: Mathlib/Algebra/BigOperators/NatAntidiagonal.lean

full_name: Finset.Nat.prod_antidiagonal_succ
code: theorem prod_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → M} :
    (∏ p ∈ antidiagonal (n + 1), f p)
      = f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2) 
goal: ∏ p ∈ Finset.antidiagonal (n + 1), f p = f (0, n + 1) * ∏ p ∈ Finset.antidiagonal n, f (p.1 + 1, p.2)

full_name: Finset.Nat.sum_antidiagonal_succ
code: theorem sum_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → N} :
    (∑ p ∈ antidiagonal (n + 1), f p) = f (0, n + 1) + ∑ p ∈ antidiagonal n, f (p.1 + 1, p.2) 
goal: ∑ p ∈ Finset.antidiagonal (n + 1), f p = f (0, n + 1) + ∑ p ∈ Finset.antidiagonal n, f (p.1 + 1, p.2)

full_name: Finset.Nat.prod_antidiagonal_swap
code: @[to_additive]
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕ × ℕ → M} :
    ∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p 
goal: ∏ p ∈ Finset.antidiagonal n, f p.swap = ∏ p ∈ Finset.antidiagonal n, f p

full_name: Finset.Nat.sum_antidiagonal_swap
code: @[to_additive]
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕ × ℕ → M} :
    ∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p 
goal: ∑ p ∈ Finset.antidiagonal n, f p.swap = ∑ p ∈ Finset.antidiagonal n, f p

full_name: Finset.Nat.prod_antidiagonal_succ'
code: theorem prod_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → M} : (∏ p ∈ antidiagonal (n + 1), f p) =
    f (n + 1, 0) * ∏ p ∈ antidiagonal n, f (p.1, p.2 + 1) 
goal: ∏ p ∈ Finset.antidiagonal (n + 1), f p = f (n + 1, 0) * ∏ p ∈ Finset.antidiagonal n, f (p.1, p.2 + 1)

full_name: Finset.Nat.sum_antidiagonal_succ'
code: theorem sum_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → N} :
    (∑ p ∈ antidiagonal (n + 1), f p) = f (n + 1, 0) + ∑ p ∈ antidiagonal n, f (p.1, p.2 + 1) 
goal: ∑ p ∈ Finset.antidiagonal (n + 1), f p = f (n + 1, 0) + ∑ p ∈ Finset.antidiagonal n, f (p.1, p.2 + 1)

full_name: Finset.Nat.sum_antidiagonal_subst
code: @[to_additive]
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕ × ℕ → ℕ → M} :
    ∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) 
goal: ∑ p ∈ Finset.antidiagonal n, f p n = ∑ p ∈ Finset.antidiagonal n, f p (p.1 + p.2)

full_name: Finset.Nat.prod_antidiagonal_subst
code: @[to_additive]
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕ × ℕ → ℕ → M} :
    ∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) 
goal: ∏ p ∈ Finset.antidiagonal n, f p n = ∏ p ∈ Finset.antidiagonal n, f p (p.1 + p.2)

full_name: Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk
code: @[to_additive]
theorem prod_antidiagonal_eq_prod_range_succ_mk {M : Type*} [CommMonoid M] (f : ℕ × ℕ → M)
    (n : ℕ) : ∏ ij ∈ antidiagonal n, f ij = ∏ k ∈ range n.succ, f (k, n - k) 
goal: ∑ ij ∈ Finset.antidiagonal n, f ij = ∑ k ∈ Finset.range n.succ, f (k, n - k)

full_name: Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk
code: @[to_additive]
theorem prod_antidiagonal_eq_prod_range_succ_mk {M : Type*} [CommMonoid M] (f : ℕ × ℕ → M)
    (n : ℕ) : ∏ ij ∈ antidiagonal n, f ij = ∏ k ∈ range n.succ, f (k, n - k) 
goal: ∏ ij ∈ Finset.antidiagonal n, f ij = ∏ k ∈ Finset.range n.succ, f (k, n - k)

full_name: Finset.Nat.sum_antidiagonal_eq_sum_range_succ
code: /-- This lemma matches more generally than `Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk` when
using `rw ← `. -/
@[to_additive "This lemma matches more generally than
`Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk` when using `rw ← `."]
theorem prod_antidiagonal_eq_prod_range_succ {M : Type*} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ) :
    ∏ ij ∈ antidiagonal n, f ij.1 ij.2 = ∏ k ∈ range n.succ, f k (n - k) 
goal: ∑ ij ∈ Finset.antidiagonal n, f ij.1 ij.2 = ∑ k ∈ Finset.range n.succ, f k (n - k)

full_name: Finset.Nat.prod_antidiagonal_eq_prod_range_succ
code: /-- This lemma matches more generally than `Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk` when
using `rw ← `. -/
@[to_additive "This lemma matches more generally than
`Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk` when using `rw ← `."]
theorem prod_antidiagonal_eq_prod_range_succ {M : Type*} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ) :
    ∏ ij ∈ antidiagonal n, f ij.1 ij.2 = ∏ k ∈ range n.succ, f k (n - k) 
goal: ∏ ij ∈ Finset.antidiagonal n, f ij.1 ij.2 = ∏ k ∈ Finset.range n.succ, f k (n - k)