39 lines
616 B
Plaintext
39 lines
616 B
Plaintext
module Zoo2
|
|
|
|
id : (A : U) -> A -> A
|
|
id = \ A x => x
|
|
|
|
const : (A B : U) -> A -> B -> A
|
|
const = \A B x y => x
|
|
|
|
Nat : U
|
|
Nat = (N : U) -> (N -> N) -> N -> N
|
|
|
|
zero : Nat
|
|
zero = \ _ s z => z
|
|
|
|
succ : Nat -> Nat
|
|
succ = \ n ty s z => s (n ty s z)
|
|
|
|
-- need Nat to reduce (and syntax highlighting)
|
|
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
|
|
|
|
-- and then nf / eval of hundred
|
|
-- #nf hundred
|