59 lines
986 B
Plaintext
59 lines
986 B
Plaintext
module Zoo3
|
|
|
|
id : (A : _) -> A -> A
|
|
id = \ A x => x
|
|
|
|
List : U -> U
|
|
List = \ A => (L : _) -> (A -> L -> L) -> L -> L
|
|
|
|
nil : (A : _) -> List A
|
|
nil = \ A L cons nil => nil
|
|
|
|
cons : (A : _) -> A -> List A -> List A
|
|
cons = \A x xs L cons nil => cons x (xs _ cons nil)
|
|
|
|
Bool : U
|
|
Bool = (B : _) -> B -> B -> B
|
|
|
|
true : Bool
|
|
true = \ B t f => t
|
|
|
|
false : Bool
|
|
false = \ B t f => f
|
|
|
|
not : Bool -> Bool
|
|
not = \ b B t f => b B f t
|
|
|
|
Eq : (A : _) -> A -> A -> U
|
|
Eq = \A x y => (P : A -> U) -> P x -> P y
|
|
|
|
refl : (A : _) (x : A) -> Eq A x x
|
|
refl = \ A x p px => px
|
|
|
|
list1 : List Bool
|
|
list1 = cons _ true (cons _ false (nil _))
|
|
|
|
Nat : U
|
|
Nat = (N : U) -> (N -> N) -> N -> N
|
|
|
|
five : Nat
|
|
five = \ N s z => s (s (s (s (s z))))
|
|
|
|
add : Nat -> Nat -> Nat
|
|
add = \ a b N s z => a N s (b N s z)
|
|
|
|
mul : Nat -> Nat -> Nat
|
|
mul = \a b N s z => a N (b N s) z
|
|
|
|
ten : Nat
|
|
ten = add five five
|
|
|
|
hundred : Nat
|
|
hundred = mul ten ten
|
|
|
|
thousand : Nat
|
|
thousand = mul ten hundred
|
|
|
|
eqTest : Eq _ hundred hundred
|
|
eqTest = refl _ _
|