%%% Mini-ML Natural Semantics %%% Author: Frank Pfenning, based on [Michaylov & Pfenning 92] feval : env -> exp' -> val -> type. %name feval D. %mode feval +N +F -W. % Variables fev_1 : feval (N , W) 1 W. fev_^ : feval (N , W') (F ^) W <- feval N F W. fev_1+ : feval (N + F) 1 W <- feval N F W. fev_^+ : feval (N + F') (F ^) W <- feval N F W. % Natural Numbers fev_z : feval N z' z*. fev_s : feval N (s' F) (s* W) <- feval N F W. fev_case_z : feval N (case' F1 F2 F3) W <- feval N F1 z* <- feval N F2 W. fev_case_s : feval N (case' F1 F2 F3) W <- feval N F1 (s* W1) <- feval (N , W1) F3 W. % Pairs fev_pair : feval N (pair' F1 F2) (pair* W1 W2) <- feval N F1 W1 <- feval N F2 W2. fev_fst : feval N (fst' F) W1 <- feval N F (pair* W1 W2). fev_snd : feval N (snd' F) W2 <- feval N F (pair* W1 W2). % Functions fev_lam : feval N (lam' F) (clo N (lam' F)). fev_app : feval N (app' F1 F2) W <- feval N F1 (clo N' (lam' F1')) <- feval N F2 W2 <- feval (N' , W2) F1' W. % Definitions fev_letv : feval N (letv' F1 F2) W <- feval N F1 W1 <- feval (N , W1) F2 W. fev_letn : feval N (letn' F1 F2) W <- feval (N + F1) F2 W. % Recursion fev_fix : feval N (fix' F) W <- feval (N + (fix' F)) F W.