-- Finite numbers, i.e., natural numbers bounded above by a given natural number.

module Examples.Fin where

open import Prelude.Function
open import Prelude.InverseImage
open import Description
open import Ornament
open import Examples.Nat

open import Data.Empty using ()
open import Data.Unit using (; tt)
open import Data.Product using (Σ; _,_)
open import Data.List using (List; []; _∷_)

FinOD : OrnDesc Nat ! NatD
FinOD = wrap λ { (ok zero   )  Δ  λ ()
               ; (ok (suc n))  σ ListTag λ { `nil   ṿ tt
                                            ; `cons  ṿ (ok n , tt) } }

Fin : Nat  Set
Fin = μ  FinOD