Documentation

Batteries.Data.Fin.Basic

def Fin.clamp (n m : Nat) :
Fin (m + 1)

min n m as an element of Fin (m + 1)

Equations
Instances For
    @[deprecated Array.finRange]
    def Fin.enum (n : Nat) :

    Alias of Array.finRange.


    finRange n is the array of all elements of Fin n in order.

    Equations
    Instances For
      @[deprecated List.finRange]
      def Fin.list (n : Nat) :
      List (Fin n)

      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.succm (α 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
        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.succm (α 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
          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
            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.castSuccm (α 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
              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.castSuccm (α 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
                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
                  Instances For