Documentation

Mathlib.Algebra.BigOperators.Fin

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_castSucc 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.

Main declarations #

theorem Finset.prod_range {M : Type u_2} [CommMonoid M] {n : โ„•} (f : โ„• โ†’ M) :
โˆ i โˆˆ range n, f i = โˆ i : Fin n, f โ†‘i
theorem Finset.sum_range {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : โ„• โ†’ M) :
โˆ‘ i โˆˆ range n, f i = โˆ‘ i : Fin n, f โ†‘i
theorem Fin.prod_ofFn {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin n โ†’ M) :
(List.ofFn f).prod = โˆ i : Fin n, f i
theorem Fin.sum_ofFn {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin n โ†’ M) :
(List.ofFn f).sum = โˆ‘ i : Fin n, f i
theorem Fin.prod_univ_def {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin n โ†’ M) :
โˆ i : Fin n, f i = (List.map f (List.finRange n)).prod
theorem Fin.sum_univ_def {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin n โ†’ M) :
โˆ‘ i : Fin n, f i = (List.map f (List.finRange n)).sum
theorem Fin.prod_univ_zero {M : Type u_2} [CommMonoid M] (f : Fin 0 โ†’ M) :
โˆ i : Fin 0, f i = 1

A product of a function f : Fin 0 โ†’ M is 1 because Fin 0 is empty

theorem Fin.sum_univ_zero {M : Type u_2} [AddCommMonoid M] (f : Fin 0 โ†’ M) :
โˆ‘ i : Fin 0, f i = 0

A sum of a function f : Fin 0 โ†’ M is 0 because Fin 0 is empty

theorem Fin.prod_univ_succAbove {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (x : Fin (n + 1)) :
โˆ i : Fin (n + 1), f i = f x * โˆ i : Fin n, f (x.succAbove i)

A product of a function f : Fin (n + 1) โ†’ M 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_succAbove {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (x : Fin (n + 1)) :
โˆ‘ i : Fin (n + 1), f i = f x + โˆ‘ i : Fin n, f (x.succAbove i)

A sum of a function f : Fin (n + 1) โ†’ M over all Fin (n + 1) is the sum of f x, for some x : Fin (n + 1) plus the remaining sum

theorem Fin.prod_univ_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ i : Fin (n + 1), f i = f 0 * โˆ i : Fin n, f i.succ

A product of a function f : Fin (n + 1) โ†’ M over all Fin (n + 1) is the product of f 0 times the remaining product

theorem Fin.sum_univ_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ‘ i : Fin (n + 1), f i = f 0 + โˆ‘ i : Fin n, f i.succ

A sum of a function f : Fin (n + 1) โ†’ M over all Fin (n + 1) is the sum of f 0 plus the remaining sum

theorem Fin.prod_univ_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ i : Fin (n + 1), f i = (โˆ i : Fin n, f i.castSucc) * f (last n)

A product of a function f : Fin (n + 1) โ†’ M over all Fin (n + 1) is the product of f (Fin.last n) times the remaining product

theorem Fin.sum_univ_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ‘ i : Fin (n + 1), f i = โˆ‘ i : Fin n, f i.castSucc + f (last n)

A sum of a function f : Fin (n + 1) โ†’ M over all Fin (n + 1) is the sum of f (Fin.last n) plus the remaining sum

@[simp]
theorem Fin.prod_univ_getElem {M : Type u_2} [CommMonoid M] (l : List M) :
โˆ i : Fin l.length, l[โ†‘i] = l.prod
@[simp]
theorem Fin.sum_univ_getElem {M : Type u_2} [AddCommMonoid M] (l : List M) :
โˆ‘ i : Fin l.length, l[โ†‘i] = l.sum
@[simp]
theorem Fin.prod_univ_fun_getElem {ฮน : Type u_1} {M : Type u_2} [CommMonoid M] (l : List ฮน) (f : ฮน โ†’ M) :
โˆ i : Fin l.length, f l[โ†‘i] = (List.map f l).prod
@[simp]
theorem Fin.sum_univ_fun_getElem {ฮน : Type u_1} {M : Type u_2} [AddCommMonoid M] (l : List ฮน) (f : ฮน โ†’ M) :
โˆ‘ i : Fin l.length, f l[โ†‘i] = (List.map f l).sum
@[simp]
theorem Fin.prod_cons {M : Type u_2} [CommMonoid M] {n : โ„•} (x : M) (f : Fin n โ†’ M) :
โˆ i : Fin n.succ, cons x f i = x * โˆ i : Fin n, f i
@[simp]
theorem Fin.sum_cons {M : Type u_2} [AddCommMonoid M] {n : โ„•} (x : M) (f : Fin n โ†’ M) :
โˆ‘ i : Fin n.succ, cons x f i = x + โˆ‘ i : Fin n, f i
@[simp]
theorem Fin.prod_snoc {M : Type u_2} [CommMonoid M] {n : โ„•} (x : M) (f : Fin n โ†’ M) :
โˆ i : Fin n.succ, snoc f x i = (โˆ i : Fin n, f i) * x
@[simp]
theorem Fin.sum_snoc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (x : M) (f : Fin n โ†’ M) :
โˆ‘ i : Fin n.succ, snoc f x i = โˆ‘ i : Fin n, f i + x
theorem Fin.prod_univ_one {M : Type u_2} [CommMonoid M] (f : Fin 1 โ†’ M) :
โˆ i : Fin 1, f i = f 0
theorem Fin.sum_univ_one {M : Type u_2} [AddCommMonoid M] (f : Fin 1 โ†’ M) :
โˆ‘ i : Fin 1, f i = f 0
@[simp]
theorem Fin.prod_univ_two {M : Type u_2} [CommMonoid M] (f : Fin 2 โ†’ M) :
โˆ i : Fin 2, f i = f 0 * f 1
@[simp]
theorem Fin.sum_univ_two {M : Type u_2} [AddCommMonoid M] (f : Fin 2 โ†’ M) :
โˆ‘ i : Fin 2, f i = f 0 + f 1
theorem Fin.prod_univ_two' {ฮน : Type u_1} {M : Type u_2} [CommMonoid M] (f : ฮน โ†’ M) (a b : ฮน) :
โˆ i : Fin (Nat.succ 0).succ, f (![a, b] i) = f a * f b
theorem Fin.sum_univ_two' {ฮน : Type u_1} {M : Type u_2} [AddCommMonoid M] (f : ฮน โ†’ M) (a b : ฮน) :
โˆ‘ i : Fin (Nat.succ 0).succ, f (![a, b] i) = f a + f b
theorem Fin.prod_univ_three {M : Type u_2} [CommMonoid M] (f : Fin 3 โ†’ M) :
โˆ i : Fin 3, f i = f 0 * f 1 * f 2
theorem Fin.sum_univ_three {M : Type u_2} [AddCommMonoid M] (f : Fin 3 โ†’ M) :
โˆ‘ i : Fin 3, f i = f 0 + f 1 + f 2
theorem Fin.prod_univ_four {M : Type u_2} [CommMonoid M] (f : Fin 4 โ†’ M) :
โˆ i : Fin 4, f i = f 0 * f 1 * f 2 * f 3
theorem Fin.sum_univ_four {M : Type u_2} [AddCommMonoid M] (f : Fin 4 โ†’ M) :
โˆ‘ i : Fin 4, f i = f 0 + f 1 + f 2 + f 3
theorem Fin.prod_univ_five {M : Type u_2} [CommMonoid M] (f : Fin 5 โ†’ M) :
โˆ i : Fin 5, f i = f 0 * f 1 * f 2 * f 3 * f 4
theorem Fin.sum_univ_five {M : Type u_2} [AddCommMonoid M] (f : Fin 5 โ†’ M) :
โˆ‘ i : Fin 5, f i = f 0 + f 1 + f 2 + f 3 + f 4
theorem Fin.prod_univ_six {M : Type u_2} [CommMonoid M] (f : Fin 6 โ†’ M) :
โˆ i : Fin 6, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5
theorem Fin.sum_univ_six {M : Type u_2} [AddCommMonoid M] (f : Fin 6 โ†’ M) :
โˆ‘ i : Fin 6, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5
theorem Fin.prod_univ_seven {M : Type u_2} [CommMonoid M] (f : Fin 7 โ†’ M) :
โˆ i : Fin 7, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6
theorem Fin.sum_univ_seven {M : Type u_2} [AddCommMonoid M] (f : Fin 7 โ†’ M) :
โˆ‘ i : Fin 7, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5 + f 6
theorem Fin.prod_univ_eight {M : Type u_2} [CommMonoid M] (f : Fin 8 โ†’ M) :
โˆ i : Fin 8, f i = f 0 * f 1 * f 2 * f 3 * f 4 * f 5 * f 6 * f 7
theorem Fin.sum_univ_eight {M : Type u_2} [AddCommMonoid M] (f : Fin 8 โ†’ M) :
โˆ‘ i : Fin 8, f i = f 0 + f 1 + f 2 + f 3 + f 4 + f 5 + f 6 + f 7
theorem Fin.prod_const {M : Type u_2} [CommMonoid M] (n : โ„•) (x : M) :
โˆ _i : Fin n, x = x ^ n
theorem Fin.sum_const {M : Type u_2} [AddCommMonoid M] (n : โ„•) (x : M) :
โˆ‘ _i : Fin n, x = n โ€ข x
theorem Fin.prod_congr' {M : Type u_2} [CommMonoid M] {a b : โ„•} (f : Fin b โ†’ M) (h : a = b) :
โˆ i : Fin a, f (Fin.cast h i) = โˆ i : Fin b, f i
theorem Fin.sum_congr' {M : Type u_2} [AddCommMonoid M] {a b : โ„•} (f : Fin b โ†’ M) (h : a = b) :
โˆ‘ i : Fin a, f (Fin.cast h i) = โˆ‘ i : Fin b, f i
theorem Fin.prod_univ_add {M : Type u_2} [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)
theorem Fin.sum_univ_add {M : Type u_2} [AddCommMonoid 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)
theorem Fin.prod_trunc {M : Type u_2} [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 (castAdd b i)
theorem Fin.sum_trunc {M : Type u_2} [AddCommMonoid M] {a b : โ„•} (f : Fin (a + b) โ†’ M) (hf : โˆ€ (j : Fin b), f (natAdd a j) = 0) :
โˆ‘ i : Fin (a + b), f i = โˆ‘ i : Fin a, f (castAdd b i)
@[simp]
theorem Fin.prod_insertNth {M : Type u_2} [CommMonoid M] {n : โ„•} (i : Fin (n + 1)) (x : M) (p : Fin n โ†’ M) :
โˆ j : Fin (n + 1), i.insertNth x p j = x * โˆ j : Fin n, p j
@[simp]
theorem Fin.sum_insertNth {M : Type u_2} [AddCommMonoid M] {n : โ„•} (i : Fin (n + 1)) (x : M) (p : Fin n โ†’ M) :
โˆ‘ j : Fin (n + 1), i.insertNth x p j = x + โˆ‘ j : Fin n, p j
@[simp]
theorem Fin.mul_prod_removeNth {M : Type u_2} [CommMonoid M] {n : โ„•} (i : Fin (n + 1)) (f : Fin (n + 1) โ†’ M) :
f i * โˆ j : Fin n, i.removeNth f j = โˆ j : Fin (n + 1), f j
@[simp]
theorem Fin.add_sum_removeNth {M : Type u_2} [AddCommMonoid M] {n : โ„•} (i : Fin (n + 1)) (f : Fin (n + 1) โ†’ M) :
f i + โˆ‘ j : Fin n, i.removeNth f j = โˆ‘ j : Fin (n + 1), f j

Products over intervals: Fin.cast #

theorem Fin.prod_Icc_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Icc (Fin.cast h a) (Fin.cast h b), f i = โˆ i โˆˆ Finset.Icc a b, f (Fin.cast h i)
theorem Fin.sum_Icc_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Icc (Fin.cast h a) (Fin.cast h b), f i = โˆ‘ i โˆˆ Finset.Icc a b, f (Fin.cast h i)
theorem Fin.prod_Ico_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ico (Fin.cast h a) (Fin.cast h b), f i = โˆ i โˆˆ Finset.Ico a b, f (Fin.cast h i)
theorem Fin.sum_Ico_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ico (Fin.cast h a) (Fin.cast h b), f i = โˆ‘ i โˆˆ Finset.Ico a b, f (Fin.cast h i)
theorem Fin.prod_Ioc_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioc (Fin.cast h a) (Fin.cast h b), f i = โˆ i โˆˆ Finset.Ioc a b, f (Fin.cast h i)
theorem Fin.sum_Ioc_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioc (Fin.cast h a) (Fin.cast h b), f i = โˆ‘ i โˆˆ Finset.Ioc a b, f (Fin.cast h i)
theorem Fin.prod_Ioo_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioo (Fin.cast h a) (Fin.cast h b), f i = โˆ i โˆˆ Finset.Ioo a b, f (Fin.cast h i)
theorem Fin.sum_Ioo_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioo (Fin.cast h a) (Fin.cast h b), f i = โˆ‘ i โˆˆ Finset.Ioo a b, f (Fin.cast h i)
theorem Fin.prod_uIcc_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.uIcc (Fin.cast h a) (Fin.cast h b), f i = โˆ i โˆˆ Finset.uIcc a b, f (Fin.cast h i)
theorem Fin.sum_uIcc_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.uIcc (Fin.cast h a) (Fin.cast h b), f i = โˆ‘ i โˆˆ Finset.uIcc a b, f (Fin.cast h i)
theorem Fin.prod_Ici_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Ici (Fin.cast h a), f i = โˆ i โˆˆ Finset.Ici a, f (Fin.cast h i)
theorem Fin.sum_Ici_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Ici (Fin.cast h a), f i = โˆ‘ i โˆˆ Finset.Ici a, f (Fin.cast h i)
theorem Fin.prod_Ioi_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Ioi (Fin.cast h a), f i = โˆ i โˆˆ Finset.Ioi a, f (Fin.cast h i)
theorem Fin.sum_Ioi_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Ioi (Fin.cast h a), f i = โˆ‘ i โˆˆ Finset.Ioi a, f (Fin.cast h i)
theorem Fin.prod_Iic_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iic (Fin.cast h a), f i = โˆ i โˆˆ Finset.Iic a, f (Fin.cast h i)
theorem Fin.sum_Iic_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iic (Fin.cast h a), f i = โˆ‘ i โˆˆ Finset.Iic a, f (Fin.cast h i)
theorem Fin.prod_Iio_cast {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iio (Fin.cast h a), f i = โˆ i โˆˆ Finset.Iio a, f (Fin.cast h i)
theorem Fin.sum_Iio_cast {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n = m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iio (Fin.cast h a), f i = โˆ‘ i โˆˆ Finset.Iio a, f (Fin.cast h i)

Products over intervals: Fin.castLE #

theorem Fin.prod_Icc_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Icc (castLE h a) (castLE h b), f i = โˆ i โˆˆ Finset.Icc a b, f (castLE h i)
theorem Fin.sum_Icc_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Icc (castLE h a) (castLE h b), f i = โˆ‘ i โˆˆ Finset.Icc a b, f (castLE h i)
theorem Fin.prod_Ico_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ico (castLE h a) (castLE h b), f i = โˆ i โˆˆ Finset.Ico a b, f (castLE h i)
theorem Fin.sum_Ico_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ico (castLE h a) (castLE h b), f i = โˆ‘ i โˆˆ Finset.Ico a b, f (castLE h i)
theorem Fin.prod_Ioc_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioc (castLE h a) (castLE h b), f i = โˆ i โˆˆ Finset.Ioc a b, f (castLE h i)
theorem Fin.sum_Ioc_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioc (castLE h a) (castLE h b), f i = โˆ‘ i โˆˆ Finset.Ioc a b, f (castLE h i)
theorem Fin.prod_Ioo_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioo (castLE h a) (castLE h b), f i = โˆ i โˆˆ Finset.Ioo a b, f (castLE h i)
theorem Fin.sum_Ioo_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioo (castLE h a) (castLE h b), f i = โˆ‘ i โˆˆ Finset.Ioo a b, f (castLE h i)
theorem Fin.prod_uIcc_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.uIcc (castLE h a) (castLE h b), f i = โˆ i โˆˆ Finset.uIcc a b, f (castLE h i)
theorem Fin.sum_uIcc_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.uIcc (castLE h a) (castLE h b), f i = โˆ‘ i โˆˆ Finset.uIcc a b, f (castLE h i)
theorem Fin.prod_Iic_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iic (castLE h a), f i = โˆ i โˆˆ Finset.Iic a, f (castLE h i)
theorem Fin.sum_Iic_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iic (castLE h a), f i = โˆ‘ i โˆˆ Finset.Iic a, f (castLE h i)
theorem Fin.prod_Iio_castLE {M : Type u_2} [CommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iio (castLE h a), f i = โˆ i โˆˆ Finset.Iio a, f (castLE h i)
theorem Fin.sum_Iio_castLE {M : Type u_2} [AddCommMonoid M] {n m : โ„•} (h : n โ‰ค m) (f : Fin m โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iio (castLE h a), f i = โˆ‘ i โˆˆ Finset.Iio a, f (castLE h i)

Products over intervals: Fin.castAdd #

theorem Fin.prod_Icc_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Icc (castAdd m a) (castAdd m b), f i = โˆ i โˆˆ Finset.Icc a b, f (castAdd m i)
theorem Fin.sum_Icc_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Icc (castAdd m a) (castAdd m b), f i = โˆ‘ i โˆˆ Finset.Icc a b, f (castAdd m i)
theorem Fin.prod_Ico_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ico (castAdd m a) (castAdd m b), f i = โˆ i โˆˆ Finset.Ico a b, f (castAdd m i)
theorem Fin.sum_Ico_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ico (castAdd m a) (castAdd m b), f i = โˆ‘ i โˆˆ Finset.Ico a b, f (castAdd m i)
theorem Fin.prod_Ioc_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioc (castAdd m a) (castAdd m b), f i = โˆ i โˆˆ Finset.Ioc a b, f (castAdd m i)
theorem Fin.sum_Ioc_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioc (castAdd m a) (castAdd m b), f i = โˆ‘ i โˆˆ Finset.Ioc a b, f (castAdd m i)
theorem Fin.prod_Ioo_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioo (castAdd m a) (castAdd m b), f i = โˆ i โˆˆ Finset.Ioo a b, f (castAdd m i)
theorem Fin.sum_Ioo_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioo (castAdd m a) (castAdd m b), f i = โˆ‘ i โˆˆ Finset.Ioo a b, f (castAdd m i)
theorem Fin.prod_uIcc_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.uIcc (castAdd m a) (castAdd m b), f i = โˆ i โˆˆ Finset.uIcc a b, f (castAdd m i)
theorem Fin.sum_uIcc_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.uIcc (castAdd m a) (castAdd m b), f i = โˆ‘ i โˆˆ Finset.uIcc a b, f (castAdd m i)
theorem Fin.prod_Iic_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iic (castAdd m a), f i = โˆ i โˆˆ Finset.Iic a, f (castAdd m i)
theorem Fin.sum_Iic_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iic (castAdd m a), f i = โˆ‘ i โˆˆ Finset.Iic a, f (castAdd m i)
theorem Fin.prod_Iio_castAdd {M : Type u_2} [CommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iio (castAdd m a), f i = โˆ i โˆˆ Finset.Iio a, f (castAdd m i)
theorem Fin.sum_Iio_castAdd {M : Type u_2} [AddCommMonoid M] {n : โ„•} (m : โ„•) (f : Fin (n + m) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iio (castAdd m a), f i = โˆ‘ i โˆˆ Finset.Iio a, f (castAdd m i)

Products over intervals: Fin.castSucc #

theorem Fin.prod_Icc_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Icc a.castSucc b.castSucc, f i = โˆ i โˆˆ Finset.Icc a b, f i.castSucc
theorem Fin.sum_Icc_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Icc a.castSucc b.castSucc, f i = โˆ‘ i โˆˆ Finset.Icc a b, f i.castSucc
theorem Fin.prod_Ico_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ico a.castSucc b.castSucc, f i = โˆ i โˆˆ Finset.Ico a b, f i.castSucc
theorem Fin.sum_Ico_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ico a.castSucc b.castSucc, f i = โˆ‘ i โˆˆ Finset.Ico a b, f i.castSucc
theorem Fin.prod_Ioc_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioc a.castSucc b.castSucc, f i = โˆ i โˆˆ Finset.Ioc a b, f i.castSucc
theorem Fin.sum_Ioc_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioc a.castSucc b.castSucc, f i = โˆ‘ i โˆˆ Finset.Ioc a b, f i.castSucc
theorem Fin.prod_Ioo_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioo a.castSucc b.castSucc, f i = โˆ i โˆˆ Finset.Ioo a b, f i.castSucc
theorem Fin.sum_Ioo_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioo a.castSucc b.castSucc, f i = โˆ‘ i โˆˆ Finset.Ioo a b, f i.castSucc
theorem Fin.prod_uIcc_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.uIcc a.castSucc b.castSucc, f i = โˆ i โˆˆ Finset.uIcc a b, f i.castSucc
theorem Fin.sum_uIcc_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.uIcc a.castSucc b.castSucc, f i = โˆ‘ i โˆˆ Finset.uIcc a b, f i.castSucc
theorem Fin.prod_Iic_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iic a.castSucc, f i = โˆ i โˆˆ Finset.Iic a, f i.castSucc
theorem Fin.sum_Iic_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iic a.castSucc, f i = โˆ‘ i โˆˆ Finset.Iic a, f i.castSucc
theorem Fin.prod_Iio_castSucc {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Iio a.castSucc, f i = โˆ i โˆˆ Finset.Iio a, f i.castSucc
theorem Fin.sum_Iio_castSucc {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Iio a.castSucc, f i = โˆ‘ i โˆˆ Finset.Iio a, f i.castSucc

Products over intervals: Fin.succ #

theorem Fin.prod_Icc_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Icc a.succ b.succ, f i = โˆ i โˆˆ Finset.Icc a b, f i.succ
theorem Fin.sum_Icc_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Icc a.succ b.succ, f i = โˆ‘ i โˆˆ Finset.Icc a b, f i.succ
theorem Fin.prod_Ico_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ico a.succ b.succ, f i = โˆ i โˆˆ Finset.Ico a b, f i.succ
theorem Fin.sum_Ico_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ico a.succ b.succ, f i = โˆ‘ i โˆˆ Finset.Ico a b, f i.succ
theorem Fin.prod_Ioc_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioc a.succ b.succ, f i = โˆ i โˆˆ Finset.Ioc a b, f i.succ
theorem Fin.sum_Ioc_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioc a.succ b.succ, f i = โˆ‘ i โˆˆ Finset.Ioc a b, f i.succ
theorem Fin.prod_Ioo_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.Ioo a.succ b.succ, f i = โˆ i โˆˆ Finset.Ioo a b, f i.succ
theorem Fin.sum_Ioo_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.Ioo a.succ b.succ, f i = โˆ‘ i โˆˆ Finset.Ioo a b, f i.succ
theorem Fin.prod_uIcc_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ i โˆˆ Finset.uIcc a.succ b.succ, f i = โˆ i โˆˆ Finset.uIcc a b, f i.succ
theorem Fin.sum_uIcc_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a b : Fin n) :
โˆ‘ i โˆˆ Finset.uIcc a.succ b.succ, f i = โˆ‘ i โˆˆ Finset.uIcc a b, f i.succ
theorem Fin.prod_Ici_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Ici a.succ, f i = โˆ i โˆˆ Finset.Ici a, f i.succ
theorem Fin.sum_Ici_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Ici a.succ, f i = โˆ‘ i โˆˆ Finset.Ici a, f i.succ
@[simp]
theorem Fin.prod_Ioi_succ {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ i โˆˆ Finset.Ioi a.succ, f i = โˆ i โˆˆ Finset.Ioi a, f i.succ
@[simp]
theorem Fin.sum_Ioi_succ {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (a : Fin n) :
โˆ‘ i โˆˆ Finset.Ioi a.succ, f i = โˆ‘ i โˆˆ Finset.Ioi a, f i.succ
theorem Fin.prod_Ioi_zero {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ i โˆˆ Finset.Ioi 0, f i = โˆ j : Fin n, f j.succ
theorem Fin.sum_Ioi_zero {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) :
โˆ‘ i โˆˆ Finset.Ioi 0, f i = โˆ‘ j : Fin n, f j.succ
theorem Fin.prod_prod_eq_prod_triangle_mul {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ Fin n โ†’ M) :
โˆ i : Fin (n + 1), โˆ j : Fin n, f i j = โˆ i : Fin n, โˆ j โˆˆ Finset.Ici i, f i.castSucc j * f j.succ i

The product of g i j over i j : Fin (n + 1), i โ‰  j, is equal to the product of g i j * g j i over i < j.

The additive version of this lemma is useful for some proofs about differential forms. In this application, the function has the signature f : Fin (n + 1) โ†’ Fin n โ†’ M, where f i j means g i (Fin.succAbove i j) in the informal statements.

Similarly, the product of g i j * g j i over i < j is written as f (Fin.castSucc i) j * f (Fin.succ j) i over i j : Fin n, j โ‰ฅ i.

theorem Fin.sum_sum_eq_sum_triangle_add {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ Fin n โ†’ M) :
โˆ‘ i : Fin (n + 1), โˆ‘ j : Fin n, f i j = โˆ‘ i : Fin n, โˆ‘ j โˆˆ Finset.Ici i, (f i.castSucc j + f j.succ i)

The sum of g i j over i j : Fin (n + 1), i โ‰  j, is equal to the sum of g i j + g j i over i < j.

This lemma is useful for some proofs about differential forms. In this application, the function has the signature f : Fin (n + 1) โ†’ Fin n โ†’ M, where f i j means g i (Fin.succAbove i j) in the informal statements.

Similarly, the sum of g i j + g j i over i < j is written as f (Fin.castSucc i) j + f (Fin.succ j) i over i j : Fin n, j โ‰ฅ i.

theorem Fin.sum_pow_mul_eq_add_pow {n : โ„•} {R : Type u_3} [CommSemiring R] (a b : R) :
โˆ‘ s : Finset (Fin n), a ^ s.card * b ^ (n - s.card) = (a + b) ^ n
theorem Fin.sum_neg_one_pow (R : Type u_3) [Ring R] (m : โ„•) :
โˆ‘ n : Fin m, (-1) ^ โ†‘n = if Even m then 0 else 1
def Fin.partialProd {M : Type u_2} [Monoid M] {n : โ„•} (f : Fin n โ†’ M) (i : Fin (n + 1)) :
M

For f = (aโ‚, ..., aโ‚™) in ฮฑโฟ, partialProd f is (1, aโ‚, aโ‚aโ‚‚, ..., aโ‚...aโ‚™) in ฮฑโฟโบยน.

Equations
    Instances For
      def Fin.partialSum {M : Type u_2} [AddMonoid M] {n : โ„•} (f : Fin n โ†’ M) (i : Fin (n + 1)) :
      M

      For f = (aโ‚, ..., aโ‚™) in ฮฑโฟ, partialSum f is (0, aโ‚, aโ‚ + aโ‚‚, ..., aโ‚ + ... + aโ‚™) in ฮฑโฟโบยน.

      Equations
        Instances For
          @[simp]
          theorem Fin.partialProd_zero {M : Type u_2} [Monoid M] {n : โ„•} (f : Fin n โ†’ M) :
          @[simp]
          theorem Fin.partialSum_zero {M : Type u_2} [AddMonoid M] {n : โ„•} (f : Fin n โ†’ M) :
          theorem Fin.partialProd_succ {M : Type u_2} [Monoid M] {n : โ„•} (f : Fin n โ†’ M) (j : Fin n) :
          theorem Fin.partialSum_succ {M : Type u_2} [AddMonoid M] {n : โ„•} (f : Fin n โ†’ M) (j : Fin n) :
          theorem Fin.partialProd_succ' {M : Type u_2} [Monoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (j : Fin (n + 1)) :
          theorem Fin.partialSum_succ' {M : Type u_2} [AddMonoid M] {n : โ„•} (f : Fin (n + 1) โ†’ M) (j : Fin (n + 1)) :
          theorem Fin.partialProd_init {M : Type u_2} [Monoid M] {n : โ„•} {f : Fin (n + 1) โ†’ M} (i : Fin (n + 1)) :
          theorem Fin.partialSum_init {M : Type u_2} [AddMonoid M] {n : โ„•} {f : Fin (n + 1) โ†’ M} (i : Fin (n + 1)) :
          theorem Fin.partialProd_left_inv {n : โ„•} {G : Type u_3} [Group G] (f : Fin (n + 1) โ†’ G) :
          (f 0 โ€ข partialProd fun (i : Fin n) => (f i.castSucc)โปยน * f i.succ) = f
          theorem Fin.partialSum_left_neg {n : โ„•} {G : Type u_3} [AddGroup G] (f : Fin (n + 1) โ†’ G) :
          (f 0 +แตฅ partialSum fun (i : Fin n) => -f i.castSucc + f i.succ) = f
          theorem Fin.partialProd_right_inv {n : โ„•} {G : Type u_3} [Group G] (f : Fin n โ†’ G) (i : Fin n) :
          theorem Fin.partialSum_right_neg {n : โ„•} {G : Type u_3} [AddGroup G] (f : Fin n โ†’ G) (i : Fin n) :
          theorem Fin.partialProd_contractNth {G : Type u_3} [Monoid G] {n : โ„•} (g : Fin (n + 1) โ†’ G) (a : Fin (n + 1)) :
          partialProd (a.contractNth (fun (x1 x2 : G) => x1 * x2) g) = partialProd g โˆ˜ a.succ.succAbove
          theorem Fin.partialSum_contractNth {G : Type u_3} [AddMonoid G] {n : โ„•} (g : Fin (n + 1) โ†’ G) (a : Fin (n + 1)) :
          partialSum (a.contractNth (fun (x1 x2 : G) => x1 + x2) g) = partialSum g โˆ˜ a.succ.succAbove
          theorem Fin.inv_partialProd_mul_eq_contractNth {n : โ„•} {G : Type u_3} [Group G] (g : Fin (n + 1) โ†’ G) (j : Fin (n + 1)) (k : Fin n) :
          (partialProd g (j.succ.succAbove k.castSucc))โปยน * partialProd g (j.succAbove k).succ = j.contractNth (fun (x1 x2 : G) => x1 * x2) g k

          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 Fin.neg_partialSum_add_eq_contractNth {n : โ„•} {G : Type u_3} [AddGroup G] (g : Fin (n + 1) โ†’ G) (j : Fin (n + 1)) (k : Fin n) :
          -partialSum g (j.succ.succAbove k.castSucc) + partialSum g (j.succAbove k).succ = j.contractNth (fun (x1 x2 : G) => x1 + x2) g k

          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.

          def finFunctionFinEquiv {m n : โ„•} :
          (Fin n โ†’ Fin m) โ‰ƒ Fin (m ^ n)

          Equivalence between Fin n โ†’ Fin m and Fin (m ^ n).

          Equations
            Instances For
              @[simp]
              theorem finFunctionFinEquiv_apply_val {m n : โ„•} (f : Fin n โ†’ Fin m) :
              โ†‘(finFunctionFinEquiv f) = โˆ‘ i : Fin n, โ†‘(f i) * m ^ โ†‘i
              @[simp]
              theorem finFunctionFinEquiv_symm_apply_val {m n : โ„•} (a : Fin (m ^ n)) (b : Fin n) :
              โ†‘(finFunctionFinEquiv.symm a b) = โ†‘a / m ^ โ†‘b % m
              theorem finFunctionFinEquiv_apply {m n : โ„•} (f : Fin n โ†’ Fin m) :
              โ†‘(finFunctionFinEquiv f) = โˆ‘ i : Fin n, โ†‘(f i) * m ^ โ†‘i
              theorem finFunctionFinEquiv_single {m n : โ„•} [NeZero m] (i : Fin n) (j : Fin m) :
              โ†‘(finFunctionFinEquiv (Pi.single i j)) = โ†‘j * m ^ โ†‘i
              def finPiFinEquiv {m : โ„•} {n : Fin m โ†’ โ„•} :
              ((i : Fin m) โ†’ Fin (n i)) โ‰ƒ Fin (โˆ i : Fin m, n i)

              Equivalence between โˆ€ i : Fin m, Fin (n i) and Fin (โˆ i : Fin m, n i).

              Equations
                Instances For
                  theorem finPiFinEquiv_apply {m : โ„•} {n : Fin m โ†’ โ„•} (f : (i : Fin m) โ†’ Fin (n i)) :
                  โ†‘(finPiFinEquiv f) = โˆ‘ i : Fin m, โ†‘(f i) * โˆ j : Fin โ†‘i, n (Fin.castLE โ‹ฏ j)
                  theorem finPiFinEquiv_single {m : โ„•} {n : Fin m โ†’ โ„•} [โˆ€ (i : Fin m), NeZero (n i)] (i : Fin m) (j : Fin (n i)) :
                  โ†‘(finPiFinEquiv (Pi.single i j)) = โ†‘j * โˆ j : Fin โ†‘i, n (Fin.castLE โ‹ฏ j)
                  def finSigmaFinEquiv {m : โ„•} {n : Fin m โ†’ โ„•} :
                  (i : Fin m) ร— Fin (n i) โ‰ƒ Fin (โˆ‘ i : Fin m, n i)

                  Equivalence between the Sigma type (i : Fin m) ร— Fin (n i) and Fin (โˆ‘ i : Fin m, n i).

                  Equations
                    Instances For
                      @[simp]
                      theorem finSigmaFinEquiv_apply {m : โ„•} {n : Fin m โ†’ โ„•} (k : (i : Fin m) ร— Fin (n i)) :
                      โ†‘(finSigmaFinEquiv k) = โˆ‘ i : Fin โ†‘k.fst, n (Fin.castLE โ‹ฏ i) + โ†‘k.snd
                      theorem finSigmaFinEquiv_one {n : Fin 1 โ†’ โ„•} (ij : (i : Fin 1) ร— Fin (n i)) :
                      โ†‘(finSigmaFinEquiv ij) = โ†‘ij.snd

                      finSigmaFinEquiv on Fin 1 ร— f is just f

                      theorem List.prod_take_ofFn {M : Type u_2} [CommMonoid M] {n : โ„•} (f : Fin n โ†’ M) (i : โ„•) :
                      (take i (ofFn f)).prod = โˆ j : Fin n with โ†‘j < i, f j
                      theorem List.sum_take_ofFn {M : Type u_2} [AddCommMonoid M] {n : โ„•} (f : Fin n โ†’ M) (i : โ„•) :
                      (take i (ofFn f)).sum = โˆ‘ j : Fin n with โ†‘j < i, f j
                      theorem List.prod_ofFn {M : Type u_2} [CommMonoid M] {n : โ„•} {f : Fin n โ†’ M} :
                      (ofFn f).prod = โˆ i : Fin n, f i
                      theorem List.sum_ofFn {M : Type u_2} [AddCommMonoid M] {n : โ„•} {f : Fin n โ†’ M} :
                      (ofFn f).sum = โˆ‘ i : Fin n, f i
                      theorem List.alternatingProd_eq_finset_prod {G : Type u_3} [DivisionCommMonoid G] (L : List G) :
                      L.alternatingProd = โˆ i : Fin L.length, L[i] ^ (-1) ^ โ†‘i