Big operators and fin
#
Some results about products and sums over the type fin
.
The most important results are the induction formulas fin.prod_univ_cast_succ
and fin.prod_univ_succ
, and the formula fin.prod_const
for the product of a
constant function. These results have variants for sums instead of products.
theorem
finset.sum_range
{β : Type u_2}
[add_comm_monoid β]
{n : ℕ}
(f : ℕ → β) :
∑ (i : ℕ) in finset.range n, f i = ∑ (i : fin n), f ↑i
theorem
finset.prod_range
{β : Type u_2}
[comm_monoid β]
{n : ℕ}
(f : ℕ → β) :
∏ (i : ℕ) in finset.range n, f i = ∏ (i : fin n), f ↑i
theorem
fin.prod_univ_def
{β : Type u_2}
[comm_monoid β]
{n : ℕ}
(f : fin n → β) :
∏ (i : fin n), f i = (list.map f (list.fin_range n)).prod
theorem
fin.sum_univ_def
{β : Type u_2}
[add_comm_monoid β]
{n : ℕ}
(f : fin n → β) :
∑ (i : fin n), f i = (list.map f (list.fin_range n)).sum
theorem
fin.sum_of_fn
{β : Type u_2}
[add_comm_monoid β]
{n : ℕ}
(f : fin n → β) :
(list.of_fn f).sum = ∑ (i : fin n), f i
theorem
fin.prod_of_fn
{β : Type u_2}
[comm_monoid β]
{n : ℕ}
(f : fin n → β) :
(list.of_fn f).prod = ∏ (i : fin n), f i
A sum of a function f : fin 0 → β
is 0
because fin 0
is empty
theorem
fin.prod_univ_succ_above
{β : Type u_2}
[comm_monoid β]
{n : ℕ}
(f : fin (n + 1) → β)
(x : fin (n + 1)) :
A product of a function f : fin (n + 1) → β
over all fin (n + 1)
is the product of f x
, for some x : fin (n + 1)
times the remaining product
theorem
fin.sum_univ_succ_above
{β : Type u_2}
[add_comm_monoid β]
{n : ℕ}
(f : fin (n + 1) → β)
(x : fin (n + 1)) :
A product of a function f : fin (n + 1) → β
over all fin (n + 1)
is the product of f (fin.last n)
plus the remaining product
theorem
fin.sum_filter_zero_lt
{M : Type u_1}
[add_comm_monoid M]
{n : ℕ}
{v : fin n.succ → M} :
∑ (i : fin n.succ) in finset.filter (λ (i : fin n.succ), 0 < i) finset.univ, v i = ∑ (j : fin n), v j.succ
theorem
fin.prod_filter_zero_lt
{M : Type u_1}
[comm_monoid M]
{n : ℕ}
{v : fin n.succ → M} :
∏ (i : fin n.succ) in finset.filter (λ (i : fin n.succ), 0 < i) finset.univ, v i = ∏ (j : fin n), v j.succ
theorem
fin.prod_filter_succ_lt
{M : Type u_1}
[comm_monoid M]
{n : ℕ}
(j : fin n)
(v : fin n.succ → M) :
∏ (i : fin n.succ) in finset.filter (λ (i : fin n.succ), j.succ < i) finset.univ, v i = ∏ (j : fin n) in finset.filter (λ (i : fin n), j < i) finset.univ, v j.succ
theorem
fin.sum_filter_succ_lt
{M : Type u_1}
[add_comm_monoid M]
{n : ℕ}
(j : fin n)
(v : fin n.succ → M) :
∑ (i : fin n.succ) in finset.filter (λ (i : fin n.succ), j.succ < i) finset.univ, v i = ∑ (j : fin n) in finset.filter (λ (i : fin n), j < i) finset.univ, v j.succ
theorem
list.sum_take_of_fn
{α : Type u_1}
[add_comm_monoid α]
{n : ℕ}
(f : fin n → α)
(i : ℕ) :
(list.take i (list.of_fn f)).sum = ∑ (j : fin n) in finset.filter (λ (j : fin n), j.val < i) finset.univ, f j
theorem
list.prod_take_of_fn
{α : Type u_1}
[comm_monoid α]
{n : ℕ}
(f : fin n → α)
(i : ℕ) :
(list.take i (list.of_fn f)).prod = ∏ (j : fin n) in finset.filter (λ (j : fin n), j.val < i) finset.univ, f j
theorem
list.sum_of_fn
{α : Type u_1}
[add_comm_monoid α]
{n : ℕ}
{f : fin n → α} :
(list.of_fn f).sum = ∑ (i : fin n), f i
theorem
list.prod_of_fn
{α : Type u_1}
[comm_monoid α]
{n : ℕ}
{f : fin n → α} :
(list.of_fn f).prod = ∏ (i : fin n), f i