Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 10th, 2012  |  syntax: None  |  size: 1.08 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. tyFun : Set -> Set -> Set;
  2. tyFun A T = A -> T;
  3.  
  4. using (G:Vect Set n) {
  5.  
  6.   data Expr : Vect Set n -> Set -> Set where
  7.     Var : (i:Fin n) -> Expr G (vlookup i G)
  8.   | Val : T -> Expr G T
  9.   | Lam : Expr (A::G) T -> Expr G (tyFun A T) -- using `A -> T` directly fails
  10.   | App : Expr G (A -> T) -> Expr G A -> Expr G T
  11.   | If  : Expr G Bool -> Expr G A -> Expr G A -> Expr G A
  12.   | Op  : (Int -> Int -> C) -> Expr G Int -> Expr G Int -> Expr G C;
  13.  
  14.   data Env : Vect Set n -> Set where
  15.     Empty  : Env VNil
  16.   | Extend : T -> Env G -> Env (T::G);
  17.  
  18.   envLookup : (i:Fin n) -> Env G -> vlookup i G;
  19.   envLookup fO     (Extend t env) = t;
  20.   envLookup (fS i) (Extend t env) = envLookup i env;
  21.  
  22.   interp : Env G -> Expr G T -> T;
  23.   interp env (Var i)     = envLookup i env;
  24.   interp env (Val x)     = x;
  25.   interp env (Lam scope) = \x => interp (Extend x env) scope;
  26.   interp env (App f a)   = interp env f (interp env a);
  27.   interp env (If v t e)  = if (interp env v) then (interp env t)
  28.                                              else (interp env e);
  29.   interp env (Op op l r) = op (interp env l) (interp env r);
  30.  
  31. }