packages feed

Agda-2.3.2.2: test/epic/Prelude/Nat.agda

module Prelude.Nat where

open import Prelude.Bool

{-# IMPORT PrimNat #-}

data Nat : Set where
  Z : Nat
  S : Nat -> Nat

{-# BUILTIN NATURAL Nat #-}
{-# BUILTIN ZERO Z #-}
{-# BUILTIN SUC S #-}
{-# COMPILED_DATA Nat PrimNat.N PrimNat.Z PrimNat.S #-}

infixl 30 _+_

_+_ : Nat -> Nat -> Nat
Z + m = m
S n + m = S (n + m)

_*_ : Nat -> Nat -> Nat
Z * m = Z
S n * m = (n * m) + m

_-_ : Nat -> Nat -> Nat
n     - Z     = n
(S n) - (S m) = n - m
Z     - _     = Z

_<_ : Nat -> Nat -> Bool
_ < Z   = false
Z   < S _ = true
S n < S m = n < m

Nid : Nat -> Bool -> Bool
Nid Z true = true
Nid Z false = false
Nid (S n) m =  (Nid n ( m))

{-# BUILTIN NATPLUS _+_ #-}
{-# BUILTIN NATTIMES _*_ #-}
{-# BUILTIN NATMINUS _-_ #-}
-- {-# BUILTIN NATLESS _<_ #-}
-- {-# BUILTIN NATEQUALS __ #-}