Documentation

Batteries.Data.Fin.Fold

dfoldrM #

theorem Fin.dfoldrM_loop_zero {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1)Type u_1} {h : 0 < n + 1} [Monad m] (f : (i : Fin n) → α i.succm (α i.castSucc)) (x : α 0, h) :
Fin.dfoldrM.loop n α f 0 h x = pure x
theorem Fin.dfoldrM_loop_succ {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1)Type u_1} {i : Nat} {h : i + 1 < n + 1} [Monad m] (f : (i : Fin n) → α i.succm (α i.castSucc)) (x : α i + 1, h) :
Fin.dfoldrM.loop n α f (i + 1) h x = f i, x >>= Fin.dfoldrM.loop n α f i
theorem Fin.dfoldrM_loop {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1 + 1)Type u_1} {i : Nat} {h : i + 1 < n + 1 + 1} [Monad m] [LawfulMonad m] (f : (i : Fin (n + 1)) → α i.succm (α i.castSucc)) (x : α i + 1, h) :
Fin.dfoldrM.loop (n + 1) α f (i + 1) h x = Fin.dfoldrM.loop n (α Fin.succ) (fun (x : Fin n) => f x.succ) i x >>= f 0
@[simp]
theorem Fin.dfoldrM_zero {m : Type u_1 → Type u_2} {α : Fin (0 + 1)Type u_1} [Monad m] (f : (i : Fin 0) → α i.succm (α i.castSucc)) (x : α (Fin.last 0)) :
Fin.dfoldrM 0 α f x = pure x
theorem Fin.dfoldrM_succ {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1 + 1)Type u_1} [Monad m] [LawfulMonad m] (f : (i : Fin (n + 1)) → α i.succm (α i.castSucc)) (x : α (Fin.last (n + 1))) :
Fin.dfoldrM (n + 1) α f x = Fin.dfoldrM n (α Fin.succ) (fun (x : Fin n) => f x.succ) x >>= f 0
theorem Fin.dfoldrM_eq_foldrM {m : Type u_1 → Type u_2} {n : Nat} {α : Type u_1} [Monad m] [LawfulMonad m] (f : Fin nαm α) (x : (fun (x : Fin (n + 1)) => α) (Fin.last n)) :
Fin.dfoldrM n (fun (x : Fin (n + 1)) => α) f x = Fin.foldrM n f x
theorem Fin.dfoldr_eq_dfoldrM {n : Nat} {α : Fin (n + 1)Type u_1} (f : (i : Fin n) → α i.succα i.castSucc) (x : α (Fin.last n)) :
Fin.dfoldr n α f x = Fin.dfoldrM n α f x

dfoldr #

@[simp]
theorem Fin.dfoldr_zero {α : Fin (0 + 1)Type u_1} (f : (i : Fin 0) → α i.succα i.castSucc) (x : α (Fin.last 0)) :
Fin.dfoldr 0 α f x = x
theorem Fin.dfoldr_succ {n : Nat} {α : Fin (n + 1 + 1)Type u_1} (f : (i : Fin (n + 1)) → α i.succα i.castSucc) (x : α (Fin.last (n + 1))) :
Fin.dfoldr (n + 1) α f x = f 0 (Fin.dfoldr n (α Fin.succ) (fun (x : Fin n) => f x.succ) x)
theorem Fin.dfoldr_succ_last {n : Nat} {α : Fin (n + 2)Type u_1} (f : (i : Fin (n + 1)) → α i.succα i.castSucc) (x : α (Fin.last (n + 1))) :
Fin.dfoldr (n + 1) α f x = Fin.dfoldr n (α Fin.castSucc) (fun (x : Fin n) => f x.castSucc) (f (Fin.last n) x)
theorem Fin.dfoldr_eq_foldr {n : Nat} {α : Type u_1} (f : Fin nαα) (x : (fun (x : Fin (n + 1)) => α) (Fin.last n)) :
Fin.dfoldr n (fun (x : Fin (n + 1)) => α) f x = Fin.foldr n f x

dfoldlM #

theorem Fin.dfoldlM_loop_lt {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1)Type u_1} {i : Nat} [Monad m] (f : (i : Fin n) → α i.castSuccm (α i.succ)) (h : i < n) (x : α i, ) :
Fin.dfoldlM.loop n α f i x = f i, h x >>= Fin.dfoldlM.loop n α f (i + 1)
theorem Fin.dfoldlM_loop_eq {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1)Type u_1} [Monad m] (f : (i : Fin n) → α i.castSuccm (α i.succ)) (x : α n, ) :
Fin.dfoldlM.loop n α f n x = pure x
@[simp]
theorem Fin.dfoldlM_zero {m : Type u_1 → Type u_2} {α : Fin (0 + 1)Type u_1} [Monad m] (f : (i : Fin 0) → α i.castSuccm (α i.succ)) (x : α 0) :
Fin.dfoldlM 0 α f x = pure x
@[irreducible]
theorem Fin.dfoldlM_loop {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1 + 1)Type u_1} {i : Nat} [Monad m] (f : (i : Fin (n + 1)) → α i.castSuccm (α i.succ)) (h : i < n + 1) (x : α i, ) :
Fin.dfoldlM.loop (n + 1) α f i x = do let xf i, h x Fin.dfoldlM.loop n (α Fin.succ) (fun (x1 : Fin n) (x2 : (α Fin.succ) x1.castSucc) => f x1.succ x2) i h x
theorem Fin.dfoldlM_succ {m : Type u_1 → Type u_2} {n : Nat} {α : Fin (n + 1 + 1)Type u_1} [Monad m] (f : (i : Fin (n + 1)) → α i.castSuccm (α i.succ)) (x : α 0) :
Fin.dfoldlM (n + 1) α f x = do let xf 0 x Fin.dfoldlM n (α Fin.succ) (fun (x1 : Fin n) (x2 : (α Fin.succ) x1.castSucc) => f x1.succ x2) x
theorem Fin.dfoldlM_eq_foldlM {m : Type u_1 → Type u_2} {n : Nat} {α : Type u_1} [Monad m] (f : Fin nαm α) (x : α) :
Fin.dfoldlM n (fun (x : Fin (n + 1)) => α) f x = Fin.foldlM n (fun (x : α) (i : Fin n) => f i x) x

dfoldl #

@[simp]
theorem Fin.dfoldl_zero {α : Fin (0 + 1)Type u_1} (f : (i : Fin 0) → α i.castSuccα i.succ) (x : α 0) :
Fin.dfoldl 0 α f x = x
theorem Fin.dfoldl_succ {n : Nat} {α : Fin (n + 1 + 1)Type u_1} (f : (i : Fin (n + 1)) → α i.castSuccα i.succ) (x : α 0) :
Fin.dfoldl (n + 1) α f x = Fin.dfoldl n (α Fin.succ) (fun (x1 : Fin n) (x2 : (α Fin.succ) x1.castSucc) => f x1.succ x2) (f 0 x)
theorem Fin.dfoldl_succ_last {n : Nat} {α : Fin (n + 1 + 1)Type u_1} (f : (i : Fin (n + 1)) → α i.castSuccα i.succ) (x : α 0) :
Fin.dfoldl (n + 1) α f x = f (Fin.last n) (Fin.dfoldl n (α Fin.castSucc) (fun (x1 : Fin n) (x2 : (α Fin.castSucc) x1.castSucc) => f x1.castSucc x2) x)
theorem Fin.dfoldl_eq_dfoldlM {n : Nat} {α : Fin (n + 1)Type u_1} (f : (i : Fin n) → α i.castSuccα i.succ) (x : α 0) :
Fin.dfoldl n α f x = Fin.dfoldlM n α f x
theorem Fin.dfoldl_eq_foldl {n : Nat} {α : Type u_1} (f : Fin nαα) (x : α) :
Fin.dfoldl n (fun (x : Fin (n + 1)) => α) f x = Fin.foldl n (fun (x : α) (i : Fin n) => f i x) x

Fin.fold{l/r}{M} equals List.fold{l/r}{M} #

theorem Fin.foldlM_eq_foldlM_finRange {m : Type u_1 → Type u_2} {α : Type u_1} {n : Nat} [Monad m] (f : αFin nm α) (x : α) :
@[deprecated Fin.foldlM_eq_foldlM_finRange]
theorem Fin.foldlM_eq_foldlM_list {m : Type u_1 → Type u_2} {α : Type u_1} {n : Nat} [Monad m] (f : αFin nm α) (x : α) :

Alias of Fin.foldlM_eq_foldlM_finRange.

theorem Fin.foldrM_eq_foldrM_finRange {m : Type u_1 → Type u_2} {n : Nat} {α : Type u_1} [Monad m] [LawfulMonad m] (f : Fin nαm α) (x : α) :
@[deprecated Fin.foldrM_eq_foldrM_finRange]
theorem Fin.foldrM_eq_foldrM_list {m : Type u_1 → Type u_2} {n : Nat} {α : Type u_1} [Monad m] [LawfulMonad m] (f : Fin nαm α) (x : α) :

Alias of Fin.foldrM_eq_foldrM_finRange.

theorem Fin.foldl_eq_foldl_finRange {α : Type u_1} {n : Nat} (f : αFin nα) (x : α) :
@[deprecated Fin.foldl_eq_foldl_finRange]
theorem Fin.foldl_eq_foldl_list {α : Type u_1} {n : Nat} (f : αFin nα) (x : α) :

Alias of Fin.foldl_eq_foldl_finRange.

theorem Fin.foldr_eq_foldr_finRange {n : Nat} {α : Type u_1} (f : Fin nαα) (x : α) :
@[deprecated Fin.foldr_eq_foldr_finRange]
theorem Fin.foldr_eq_foldr_list {n : Nat} {α : Type u_1} (f : Fin nαα) (x : α) :

Alias of Fin.foldr_eq_foldr_finRange.