@[deprecated Array.finRange]
Alias of Array.finRange
.
finRange n
is the array of all elements of Fin n
in order.
Equations
Instances For
@[deprecated List.finRange]
Alias of List.finRange
.
finRange n
lists all elements of Fin n
in order
Equations
Instances For
@[inline]
def
Fin.dfoldrM
{m : Type u_1 → Type u_2}
[Monad m]
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.succ → m (α i.castSucc))
(init : α (Fin.last n))
:
m (α 0)
Heterogeneous monadic fold over Fin n
from right to left:
Fin.foldrM n f xₙ = do
let xₙ₋₁ : α (n-1) ← f (n-1) xₙ
let xₙ₋₂ : α (n-2) ← f (n-2) xₙ₋₁
...
let x₀ : α 0 ← f 0 x₁
pure x₀
This is the dependent version of Fin.foldrM
.
Equations
- Fin.dfoldrM n α f init = Fin.dfoldrM.loop n α f n ⋯ init
Instances For
@[specialize #[]]
def
Fin.dfoldrM.loop
{m : Type u_1 → Type u_2}
[Monad m]
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.succ → m (α i.castSucc))
(i : Nat)
(h : i < n + 1)
(x : α ⟨i, h⟩)
:
m (α 0)
Inner loop for Fin.dfoldrM
.
Fin.dfoldrM.loop n f i h xᵢ = do
let xᵢ₋₁ ← f (i-1) xᵢ
...
let x₁ ← f 1 x₂
let x₀ ← f 0 x₁
pure x₀
Equations
- Fin.dfoldrM.loop n α f i_2.succ h_2 x_2 = f ⟨i_2, ⋯⟩ x_2 >>= Fin.dfoldrM.loop n α f i_2 ⋯
- Fin.dfoldrM.loop n α f 0 h_2 x_2 = pure x_2
Instances For
@[inline]
def
Fin.dfoldr
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.succ → α i.castSucc)
(init : α (Fin.last n))
:
α 0
Heterogeneous fold over Fin n
from the right: foldr 3 f x = f 0 (f 1 (f 2 x))
, where
f 2 : α 3 → α 2
, f 1 : α 2 → α 1
, etc.
This is the dependent version of Fin.foldr
.
Equations
- Fin.dfoldr n α f init = Fin.dfoldrM n α f init
Instances For
@[inline]
def
Fin.dfoldlM
{m : Type u_1 → Type u_2}
[Monad m]
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.castSucc → m (α i.succ))
(init : α 0)
:
m (α (Fin.last n))
Heterogeneous monadic fold over Fin n
from left to right:
Fin.foldlM n f x₀ = do
let x₁ : α 1 ← f 0 x₀
let x₂ : α 2 ← f 1 x₁
...
let xₙ : α n ← f (n-1) xₙ₋₁
pure xₙ
This is the dependent version of Fin.foldlM
.
Equations
- Fin.dfoldlM n α f init = Fin.dfoldlM.loop n α f 0 ⋯ init
Instances For
@[specialize #[]]
def
Fin.dfoldlM.loop
{m : Type u_1 → Type u_2}
[Monad m]
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.castSucc → m (α i.succ))
(i : Nat)
(h : i < n + 1)
(x : α ⟨i, h⟩)
:
m (α (Fin.last n))
Inner loop for Fin.dfoldlM
.
Fin.foldM.loop n α f i h xᵢ = do
let xᵢ₊₁ : α (i+1) ← f i xᵢ
...
let xₙ : α n ← f (n-1) xₙ₋₁
pure xₙ
Equations
- Fin.dfoldlM.loop n α f i h x = if h' : i < n then f ⟨i, h'⟩ x >>= Fin.dfoldlM.loop n α f (i + 1) ⋯ else cast ⋯ (pure x)
Instances For
@[inline]
def
Fin.dfoldl
(n : Nat)
(α : Fin (n + 1) → Type u_1)
(f : (i : Fin n) → α i.castSucc → α i.succ)
(init : α 0)
:
α (Fin.last n)
Heterogeneous fold over Fin n
from the left: foldl 3 f x = f 0 (f 1 (f 2 x))
, where
f 0 : α 0 → α 1
, f 1 : α 1 → α 2
, etc.
This is the dependent version of Fin.foldl
.
Equations
- Fin.dfoldl n α f init = Fin.dfoldlM n α f init