bool : type.
true : bool.
false : bool.

nat : type.
z : nat.
succ : natnat.

list : nattype.
nil : list z.
cons : boollist Nlist (succ N).

let l1 = [ ⊢ cons true nil];

let l2 = [ ⊢ cons true (cons false nil)];

rec map : (( ⊢ bool) → ( ⊢ bool)) → ( ⊢ list N) → ( ⊢ list N) =
fn ffn lcase l of
  | [ ⊢ nil] ⇒ [ ⊢ nil]
  | [ ⊢ cons H T] ⇒ let [ ⊢ H'] = f [ ⊢ H] in let [ ⊢ T'] = map f [ ⊢ T] in
    [ ⊢ cons H' T'];

rec head : ( ⊢ list (succ N)) → ( ⊢ bool) =
fn llet [ ⊢ cons H _] = l in [ ⊢ H];

rec tail : ( ⊢ list (succ N)) → ( ⊢ list N) =
fn llet [ ⊢ cons _ T] = l in [ ⊢ T];

© Computation and Logic Group McGill University Logo
Department of Computer Science, McGill University
3480 University Street, Montreal, Quebec, Canada, H3A 0E9