bool : type.
true : bool.
false : bool.
nat : type.
z : nat.
succ : nat → nat.
list : nat → type.
nil : list z.
cons : bool → list N → list (succ N).
let l1 = [ ⊢ cons true nil];
let l2 = [ ⊢ cons true (cons false nil)];
rec map : (( ⊢ bool) → ( ⊢ bool)) → ( ⊢ list ) → ( ⊢ list ) =
fn f ⇒ fn l ⇒
case l of
| [ ⊢ nil] ⇒ [ ⊢ nil]
| [ ⊢ cons ] ⇒ let [ ⊢ ] = f [ ⊢ ] in let [ ⊢ ] = map f [ ⊢ ] in
[ ⊢ cons ];
rec head : ( ⊢ list (succ )) → ( ⊢ bool) =
fn l ⇒ let [ ⊢ cons _] = l in [ ⊢ ];
rec tail : ( ⊢ list (succ )) → ( ⊢ list ) =
fn l ⇒ let [ ⊢ cons _ ] = l in [ ⊢ ];
© Computation and Logic Group
Department of Computer Science, McGill University
3480 University Street, Montreal, Quebec, Canada, H3A 0E9