packages feed

Agda-2.3.2.2: examples/AIM6/RegExp/talk/Prelude.agda

------------------------------------------------------------------------
-- Small prelude
------------------------------------------------------------------------

module Prelude where

infixl 6 _+_
infixr 5 _∷_ _++_
infixr 3 _∨_
infix  2 ¬_

------------------------------------------------------------------------
-- Some "logic"

data ⊥ : Set where

¬_ : Set -> Set
¬ a = a -> ⊥

------------------------------------------------------------------------
-- Maybe and Dec

data Maybe (a : Set) : Set where
  just    : a -> Maybe a
  nothing :      Maybe a

data Dec (a : Set) : Set where
  yes :   a -> Dec a
  no  : ¬ a -> Dec a

------------------------------------------------------------------------
-- Lists

data [_] (a : Set) : Set where
  []  : [ a ]
  _∷_ : a -> [ a ] -> [ a ]

_++_ : forall {a} -> [ a ] -> [ a ] -> [ a ]
[]       ++ ys = ys
(x ∷ xs) ++ ys = x ∷ (xs ++ ys)

------------------------------------------------------------------------
-- Natural numbers

data ℕ : Set where
  zero : ℕ
  suc  : ℕ -> ℕ

_+_ : ℕ -> ℕ -> ℕ
zero  + n = n
suc m + n = suc (m + n)

{-# BUILTIN NATURAL ℕ    #-}
{-# BUILTIN ZERO    zero #-}
{-# BUILTIN SUC     suc  #-}
{-# BUILTIN NATPLUS _+_  #-}

------------------------------------------------------------------------
-- Booleans

data Bool : Set where
  true  : Bool
  false : Bool

_∨_ : Bool -> Bool -> Bool
true  ∨ _ = true
false ∨ b = b