Module docstring
{"# Big operators for NatAntidiagonal
This file contains theorems relevant to big operators over Finset.NatAntidiagonal.
"}
{"# Big operators for NatAntidiagonal
This file contains theorems relevant to big operators over Finset.NatAntidiagonal.
"}
Finset.Nat.prod_antidiagonal_succ
theorem
{n : ℕ} {f : ℕ × ℕ → M} : (∏ p ∈ antidiagonal (n + 1), f p) = f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2)
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) := by
rw [antidiagonal_succ, prod_cons, prod_map]; rfl
Finset.Nat.sum_antidiagonal_succ
theorem
{n : ℕ} {f : ℕ × ℕ → N} : (∑ p ∈ antidiagonal (n + 1), f p) = f (0, n + 1) + ∑ p ∈ antidiagonal n, f (p.1 + 1, p.2)
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) :=
@prod_antidiagonal_succ (Multiplicative N) _ _ _
Finset.Nat.prod_antidiagonal_swap
theorem
{n : ℕ} {f : ℕ × ℕ → M} : ∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p
@[to_additive]
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕℕ × ℕ → M} :
∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p := by
conv_lhs => rw [← map_swap_antidiagonal, Finset.prod_map]
rfl
Finset.Nat.prod_antidiagonal_succ'
theorem
{n : ℕ} {f : ℕ × ℕ → M} : (∏ p ∈ antidiagonal (n + 1), f p) = f (n + 1, 0) * ∏ p ∈ antidiagonal n, f (p.1, p.2 + 1)
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) := by
rw [← prod_antidiagonal_swap, prod_antidiagonal_succ, ← prod_antidiagonal_swap]
rfl
Finset.Nat.sum_antidiagonal_succ'
theorem
{n : ℕ} {f : ℕ × ℕ → N} : (∑ p ∈ antidiagonal (n + 1), f p) = f (n + 1, 0) + ∑ p ∈ antidiagonal n, f (p.1, p.2 + 1)
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) :=
@prod_antidiagonal_succ' (Multiplicative N) _ _ _
Finset.Nat.prod_antidiagonal_subst
theorem
{n : ℕ} {f : ℕ × ℕ → ℕ → M} : ∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2)
@[to_additive]
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕℕ × ℕ → ℕ → M} :
∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) :=
prod_congr rfl fun p hp ↦ by rw [mem_antidiagonal.mp hp]
Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk
theorem
{M : Type*} [CommMonoid M] (f : ℕ × ℕ → M) (n : ℕ) : ∏ ij ∈ antidiagonal n, f ij = ∏ k ∈ range n.succ, f (k, n - k)
@[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) :=
Finset.prod_map (range n.succ) ⟨fun i ↦ (i, n - i), fun _ _ h ↦ (Prod.mk.inj h).1⟩ f
Finset.Nat.prod_antidiagonal_eq_prod_range_succ
theorem
{M : Type*} [CommMonoid M] (f : ℕ → ℕ → M) (n : ℕ) :
∏ ij ∈ antidiagonal n, f ij.1 ij.2 = ∏ k ∈ range n.succ, f k (n - k)
/-- 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) :=
prod_antidiagonal_eq_prod_range_succ_mk _ _