From 6dc18a4ae23b84aeee4456c3f39a944109b5c68f Mon Sep 17 00:00:00 2001 From: Jim Pryor Date: Mon, 20 Sep 2010 11:42:50 -0400 Subject: [PATCH] move *.js, *.ml -> code/ Signed-off-by: Jim Pryor --- code/lambda.cmi | Bin 0 -> 3295 bytes code/lambda.cmo | Bin 0 -> 8569 bytes lambda.js => code/lambda.js | 0 code/lambda.ml | 374 ++++++++++++++++++++++++++++++++++++++++++++ code/q_lambda.cmi | Bin 0 -> 143066 bytes code/q_lambda.cmo | Bin 0 -> 7929 bytes code/q_lambda.ml | 51 ++++++ lambda-let.html | 2 +- 8 files changed, 426 insertions(+), 1 deletion(-) create mode 100644 code/lambda.cmi create mode 100644 code/lambda.cmo rename lambda.js => code/lambda.js (100%) create mode 100644 code/lambda.ml create mode 100644 code/q_lambda.cmi create mode 100644 code/q_lambda.cmo create mode 100644 code/q_lambda.ml diff --git a/code/lambda.cmi b/code/lambda.cmi new file mode 100644 index 0000000000000000000000000000000000000000..532e6bbb50191ea4bbe5b064ba939e58a63dc45d GIT binary patch literal 3295 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 YeCv+QFYKFq{tt71{i8GHAM2q10d?BJ6951J literal 0 HcmV?d00001 diff --git a/lambda.js b/code/lambda.js similarity index 100% rename from lambda.js rename to code/lambda.js diff --git a/code/lambda.ml b/code/lambda.ml new file mode 100644 index 00000000..3f1435dc --- /dev/null +++ b/code/lambda.ml @@ -0,0 +1,374 @@ +(* *) + +module Private = struct + type var_t = int*string + let var v = (0,v) + let string_of_var (i,v) = v ^ String.make i '\'' + let equal_var (i1,v1) (i2,v2) = i1 == i2 && (String.compare v1 v2 == 0) + + type lambda_t = [ `Var of var_t | `Lam of var_t * lambda_t | `App of lambda_t * lambda_t ] + + type debruijn_t = [ `Var of var_t | `DVar of int | `DLam of debruijn_t | `DApp of debruijn_t*debruijn_t ] + + let db_subst (expr : debruijn_t) (m : int) (repl : debruijn_t) = + let rec rename m i = function + | `Var _ as term -> term + | `DVar j as term when j < i -> term + | `DVar j -> `DVar (j + m - 1) + | `DApp(n1,n2) -> `DApp(rename m i n1, rename m i n2) + | `DLam n -> `DLam(rename m (i+1) n) + in let rec loop m = function + | `Var _ as term -> term + | `DVar n as term when n < m -> term + | `DVar n when n > m -> `DVar (n-1) + | `DVar n -> rename n 1 repl + | `DApp(m1,m2) -> `DApp(loop m m1, loop m m2) + | `DLam mterm -> `DLam(loop (m+1) mterm) + in loop m expr + + let db (expr : lambda_t) : debruijn_t = + let pos seq (target : var_t) handler default = + let rec loop (i : int) = function + | [] -> default + | x::xs when equal_var x target -> handler i + | _::xs -> loop (i+1) xs + in loop 1 seq + in let rec loop seq = function + | `Var v as term -> pos seq v (fun i -> `DVar i) term + | `Lam (v,t) -> `DLam(loop (v::seq) t) + | `App (t1,t2) -> `DApp(loop seq t1, loop seq t2) + in loop [] expr + + let rec db_equal (t1 : debruijn_t) (t2 : debruijn_t) = match (t1,t2) with + | (`Var v1,`Var v2) -> equal_var v1 v2 + | (`DVar i1, `DVar i2) -> i1 == i2 + | (`DApp(m1,m2),`DApp(n1,n2)) -> db_equal m1 n1 && db_equal m2 n2 + | (`DLam(t1),`DLam(t2)) -> db_equal t1 t2 + | _ -> false + + let rec db_contains (t1 : debruijn_t) (t2 : debruijn_t) = match (t1,t2) with + | (`Var v1,`Var v2) -> equal_var v1 v2 + | (`DVar i1, `DVar i2) -> i1 == i2 + | (`DApp(m1,m2),`DApp(n1,n2)) when db_equal m1 n1 && db_equal m2 n2 -> true + | (`DApp(m1,m2), term) -> db_contains m1 term || db_contains m2 term + | (`DLam(t1),`DLam(t2)) when db_equal t1 t2 -> true + | (`DLam(t1), term) -> db_contains t1 term + | _ -> false + + (* non-normalizing string_of_lambda *) + let string_of_lambda (expr : lambda_t) = + let rec top = function + | `Var v -> string_of_var v + | `Lam _ as t -> "fun " ^ funct t + | `App ((`App _ as t1),t2) -> top t1 ^ " " ^ atom t2 + | `App (t1,t2) -> atom t1 ^ " " ^ atom t2 + and atom = function + | `Var v -> string_of_var v + | `Lam _ as t -> "(fun " ^ funct t ^ ")" + | `App _ as t -> "(" ^ top t ^ ")" + and funct = function + | `Lam (v,(`Lam _ as t)) -> (string_of_var v) ^ " " ^ funct t + | `Lam (v,t) -> (string_of_var v) ^ " -> " ^ top t + in top expr + + + (* evaluator based on http://okmij.org/ftp/Haskell/Lambda_calc.lhs *) + + (* if v occurs free_in term, returns Some v' where v' is the highest-tagged + * variable with the same name as v occurring (free or bound) in term *) + + let free_in ((tag, name) as v) term = + let rec loop = function + | `Var((tag', name') as v') -> + if name <> name' then false, v + else if tag = tag' then true, v + else false, v' + | `App(t1, t2) -> + let b1, ((tag1, _) as v1) = loop t1 in + let b2, ((tag2, _) as v2) = loop t2 in + b1 || b2, if tag1 > tag2 then v1 else v2 + | `Lam(x, _) when x = v -> (false, v) + | `Lam(_, body) -> loop body + in match loop term with + | false, _ -> None + | true, v -> Some v + + let rec subst v st = function + | term when st = `Var v -> term + | `Var x when x = v -> st + | `Var _ as term -> term + | `App(t1,t2) -> `App(subst v st t1, subst v st t2) + | `Lam(x, _) as term when x = v -> term + (* if x is free in the inserted term st, a capture is possible + * we handle by ... + *) + | `Lam(x, body) -> + (match free_in x st with + (* x not free in st, can substitute st for v without any captures *) + | None -> `Lam(x, subst v st body) + (* x free in st, need to alpha-convert `Lam(x, body) *) + | Some max_x -> + let bump_tag (tag, name) (tag', _) = + (max tag tag') + 1, name in + let bump_tag' ((_, name) as v1) ((_, name') as v2) = + if name = name' then bump_tag v1 v2 else v1 in + (* bump x > max_x from st, then check whether + * it also needs to be bumped > v + *) + let uniq_x = bump_tag' (bump_tag x max_x) v in + let uniq_x' = (match free_in uniq_x body with + | None -> uniq_x + (* bump uniq_x > max_x' from body *) + | Some max_x' -> bump_tag uniq_x max_x' + ) in + (* alpha-convert body *) + let body' = subst x (`Var uniq_x') body in + (* now substitute st for v *) + `Lam(uniq_x', subst v st body') + ) + + let check_eta = function + | `Lam(v, `App(t, `Var u)) when v = u && free_in v t = None -> t + | (_ : lambda_t) as term -> term + + exception Lambda_looping;; + + let eval ?(eta=false) (expr : lambda_t) : lambda_t = + let rec looping (body : debruijn_t) = function + | [] -> false + | x::xs when db_equal body x -> true + | _::xs -> looping body xs + in let rec loop (stack : lambda_t list) (body : lambda_t) = + match body with + | `Var v as term -> unwind term stack + | `App(t1, t2) as term -> loop (t2::stack) t1 + | `Lam(v, body) -> (match stack with + | [] -> + let term = (`Lam(v, loop [] body)) in + if eta then check_eta term else term + | t::rest -> loop rest (subst v t body) + ) + and unwind t1 = function + | [] -> t1 + | t2::ts -> unwind (`App(t1, loop [] t2)) ts + in loop [] expr + + + (* (Oleg's version of) Ken's evaluator; doesn't seem to work -- requires laziness? *) + + let eval' ?(eta=false) (expr : lambda_t) : lambda_t = + let rec loop = function + | `Var v as term -> term + | `Lam(v, body) -> + let term = (`Lam(v, loop body)) in + if eta then check_eta term else term + | `App(`App _ as t1, t2) -> + (match loop t1 with + | `Lam _ as redux -> loop (`App(redux, t2)) + | nonred_head -> `App(nonred_head, loop t2) + ) + | `App(t1, t2) -> `App(t1, loop t2) + in loop expr + + let cbv ?(aggressive=true) (expr : lambda_t) : lambda_t = + let rec loop = function + | `Var x as term -> term + | `App(t1,t2) -> + let t2' = loop t2 in + (match loop t1 with + | `Lam(x, t) -> loop (subst x t2' t) + | _ as term -> `App(term, t2') + ) + | `Lam(x, t) as term -> + if aggressive then `Lam(x, loop t) + else term + in loop expr + + + + (* + module Sorted = struct + let rec cons y = function + | x :: _ as xs when x = y -> xs + | x :: xs when x < y -> x :: cons y xs + | xs [* [] or x > y *] -> y :: xs + + let rec mem y = function + | x :: _ when x = y -> true + | x :: xs when x < y -> mem y xs + | _ [* [] or x > y *] -> false + + let rec remove y = function + | x :: xs when x = y -> xs + | x :: xs when x < y -> x :: remove y xs + | xs [* [] or x > y *] -> xs + + let rec merge x' y' = match x', y' with + | [], ys -> ys + | xs, [] -> xs + | x::xs, y::ys -> + if x < y then x :: merge xs y' + else if x = y then x :: merge xs ys + else [* x > y *] y :: merge x' ys + end + + let free_vars (expr : lambda_t) : string list = + let rec loop = function + | `Var x -> [x] + | `Lam(x,t) -> Sorted.remove x (loop t) + | `App(t1,t2) -> Sorted.merge (loop t1) (loop t2) + in loop expr + + let free_in v (expr : lambda_t) = + Sorted.mem v (free_vars t) + + let new_var = + let counter = ref 0 in + fun () -> (let z = !counter in incr counter; "_v"^(string_of_int z)) + + ... + | `Lam(x, body) as term when not (free_in v body) -> term + | `Lam(y, body) when not (free_in y st) -> `Lam(y, subst v st body) + | `Lam(y, body) -> + let z = new_var () in + subst v st (`Lam(z, subst y (`Var z) body)) + *) + + + + (* + + let bound_vars (expr : lambda_t) : string list = + let rec loop = function + | `Var x -> [] + | `Lam(x,t) -> Sorted.cons x (loop t) + | `App(t1,t2) -> Sorted.merge (loop t1) (loop t2) + in loop expr + + let reduce_cbv ?(aggressive=true) (expr : lambda_t) : lambda_t = + let rec loop = function + | `Var x as term -> term + | `App(t1,t2) -> + let t2' = loop t2 in + (match loop t1 with + | `Lam(x, t) -> loop (subst x t2' t) + | _ as term -> `App(term, t2') + ) + | `Lam(x, t) as term -> + if aggressive then `Lam(x, loop t) + else term + in loop expr + + let reduce_cbn (expr : lambda_t) : lambda_t = + let rec loop = function + | `Var x as term -> term + | `Lam(v, body) -> + check_eta (`Lam(v, loop body)) + | `App(t1,t2) -> + (match loop t1 with + | `Lam(x, t) -> loop (subst x t2 t) + | _ as term -> `App(term, loop t2) + ) + in loop expr + + *) + + + (* + + type env_t = (string * lambda_t) list + + let subst body x value = + ((fun env -> + let new_env = (x, value) :: env in + body new_env) : env_t -> lambda_t) + + type strategy_t = By_value | By_name + + let eval (strategy : strategy_t) (expr : lambda_t) : lambda_t = + in let rec inner = function + | `Var x as t -> + (fun env -> + try List.assoc x env with + | Not_found -> t) + | `App(t1, value) -> + (fun env -> + let value' = + if strategy = By_value then inner value env else value in + (match inner t1 env with + | `Lam(x, body) -> + let body' = (subst (inner body) x value' env) in + if strategy = By_value then body' else inner body' env + | (t1' : lambda_t) -> `App(t1', inner value env) + ) + ) + | `Lam(x, body) -> + (fun env -> + let v = new_var () in + `Lam(v, inner body ((x,`Var v) :: env))) + in inner expr ([] : env_t) + + let pp_env env = + let rec loop acc = function + | [] -> acc + | (x,term)::es -> loop ((x ^ "=" ^ string_of_lambda term) :: acc) es + in "[" ^ (String.concat ", " (loop [] (List.rev env))) ^ "]" + + let eval (strategy : strategy_t) (expr : lambda_t) : lambda_t = + let new_var = + let counter = ref 0 in + fun () -> (let z = !counter in incr counter; "_v"^(string_of_int z)) + in let rec inner term = + begin + Printf.printf "starting [ %s ]\n" (string_of_lambda term); + let res = match term with + | `Var x as t -> + (fun env -> + try List.assoc x env with + | Not_found -> t) + | `App(t1, value) -> + (fun env -> + let value' = + if strategy = By_value then inner value env else value in + (match inner t1 env with + | `Lam(x, body) -> + let body' = (subst (inner body) x value' env) in + if strategy = By_value then body' else inner body' env + | (t1' : lambda_t) -> `App(t1', inner value env) + ) + ) + | `Lam(x, body) -> + (fun env -> + let v = new_var () in + `Lam(v, inner body ((x,`Var v) :: env))) + in + (fun env -> + (Printf.printf "%s with %s => %s\n" (string_of_lambda term) (pp_env env) (string_of_lambda (res env)); res env)) + end + in inner expr ([] : env_t) + + *) + + let normal ?(eta=false) expr = eval ~eta expr + + let normal_string_of_lambda ?(eta=false) (expr : lambda_t) = + string_of_lambda (normal ~eta expr) + + let rec to_int expr = match expr with + | `Lam(s, `Lam(z, `Var z')) when z' = z -> 0 + | `Lam(s, `Var s') when s = s' -> 1 + | `Lam(s, `Lam(z, `App (`Var s', t))) when s' = s -> 1 + to_int (`Lam(s, `Lam(z, t))) + | _ -> failwith (normal_string_of_lambda expr ^ " is not a church numeral") + + let int_of_lambda ?(eta=false) (expr : lambda_t) = + to_int (normal ~eta expr) + +end + +type lambda_t = Private.lambda_t +open Private +let var = var +let pp, pn, pi = string_of_lambda, normal_string_of_lambda, int_of_lambda +let pnv,piv= (fun expr -> string_of_lambda (cbv expr)), (fun expr -> to_int (cbv expr)) +let db, db_equal, db_contains = db, db_equal, db_contains + diff --git a/code/q_lambda.cmi b/code/q_lambda.cmi new file mode 100644 index 0000000000000000000000000000000000000000..f14aaeda302cc1a828f3dc0503c3db4d81dd9964 GIT binary patch literal 143066 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 AOaK4? literal 0 HcmV?d00001 diff --git a/code/q_lambda.cmo b/code/q_lambda.cmo new file mode 100644 index 0000000000000000000000000000000000000000..8fbc2297b93510b9092ab8ee18441614fecc25b0 GIT binary patch literal 7929 zcmds5dvH|M8Q-()CY#-`fv`lhp)4B+n-Jvk5)v`JOTr^eBs@Z_k})pHhOEtt-Ax86 z3`J3-btH*`{t?GZY#piv!xR)NLS_oiz~G1lZAU2v?NqD}ECcOSq4fLRyPtbllC&uV zIz2PLJ?DJqcfQy8?%lIn;IFHll$)DdqA1f%rnH}znoOo-tI3o_eKx@yg@gL<5pE;Q zB@7{qBP0;e))UGIHcY5JVss`8^;HBfK@cjXv226Hed@qo=omzpMnJp6=uB#~Uq(Ij z*AS8j;|XY=UcP)8eisr72%`z$@P3*5HgQ#2L;C>%YbpUvjvsL$4~QT7z=e-00Zr9E zV?FEvz8>UiROY1~I?(PRm`%e>In-Y(hR5lksh$UpA7^_%gw$|`$pp@E{2G-8d1d&C zT9MD!O!J=3H$J9`#Jg4?CRqnfuUkxsqzgWyUIr6TJDCK;&UxY7sU$-~?V<6xji9j% z_$$x;uv8Q`DL5Xi-x-)>p=~u1n9w-_u@N^$Iyd&2J68XenE~nSPmH)>qcxU0d{!| z4#uoIo(n(Zb=Y9P`CfLdcWLa$T~5|R)9ZHkL{6#*>^tsf7$f%hTyabjY3*9^zj&WU z>@@`3XZhaP)sK7Q!~M87CPi&fXDaW-MmnwGUObn8b3*^0{{EBo=l7tWYgr|oXsZ5s z<-HqqkEZIM#+s}*ZGiNC^3SV(53s-e$qDaa|Koc(mdCG?&4Kc7&`t1fpkgVzbbZdZ zKmH9Aw?8$u{^I{n-2KVtzsnKcxycN@bNUpy{44j3E<%VgLUY^_k)Lk?=swxaNhzScD8+M@L69xpY<^R@HYk@cbs_r z_)iWx(Xh^YHq##Dn&V8QG3?-s&?8rc1mvG%?Td^5l`;tYKUiN}){nfR;S4w?&K-LA zmrp>h&=3p8xtLJfu;s=5^oz$w5q43PZ6S=anM`9$-bEF){<`H={)Hm#X-#YCP_>q} z@hhXk+v{qzmX;dAELE7cYg%jPeYg9<;Xo)-QSA@bHiZHO!qiFoTG}#ZmlO%p*ZSBk z1Pz{=T1kJ6SA-*>VEu}U`i4kgWs|>Fh>Hfl*&h<-WTIK@!aO3n&wLPqVZwY&B6UNS zF3ew$On1;2{#H?5?#<_=ytVCh=|aVtQ;piRrQJljP@P@+66$B=M6Zev-tuD=|IxnwTED#J5X) zhmm(Z500uB-?2NU$I)$!eT|JG*&E{|Z!pGXl(%Ffw{9_5rQ^1WL@~HnUmX((gzCiL za$Pz^3^sgn3#Ut$+$x-IiRUEuX}3o>XOdK}7ON=+>oNM%5cV1N< zFc+;4Ct@ZY9rNj_811Ejs>r zkg@anCjChsPU>1MIb!%pLq>{38fCTBGEJn}Bv}q*`66wqrnPmdR&%LOq_t3n#}o&{ z5vBdnZ+*`#-hOFg?S@qak?waiZLBX8@~>7xwt3xqY~yBF&(8S6hF>&~(6r2j^s0@X$P$sek!{wx4xZVTl?3v&yG!gAyQdO$`&;RngYt|OLk( zdHuMx>m^6xWm=ilR9zhiDe8g1M9&L(Yre65HS)dg-~UO|vKCO@ngisXqCRE&;kCP5{Jf5v-S0Adf=kO1YP5-R9c~e*02T%UxS7e&C7-yvTE6;7-I&;_ZXSxD= zU;M<;s%hg;4+!<%(;q(lyUpco_8ljG)KT&3y_)8o6RZu?`|ASAzKxw7>8Fw^=B_z1 z%KpY=Dvq&5^^rTKDw~r|PZ@RQl?e}Rnf>U}^!+79egghF=MUFJme(rnkNthJHTC_7y-BQl-(R+!HqB`W)%hbz_o+!a8JF94zIEupw)67~ zc57Nj$?^x4yw9h+>zZmz^MiGT%1=p!FSJ707*<{Bj+giREN|zz3$LXd)-"; t = term -> <:expr< `Lam(var $v$, $t$) >> + | "fun"; v = var; v' = var; "->"; t = term -> <:expr< `Lam(var $v$, `Lam(var $v'$, $t$)) >> + | "fun"; v = var; v' = var; v'' = var; "->"; t = term -> <:expr< `Lam(var $v$, `Lam(var $v'$, `Lam(var $v''$, $t$))) >> + | "fun"; v = var; v' = var; v'' = var; v''' = var; "->"; t = term -> <:expr< `Lam(var $v$, `Lam(var $v'$, `Lam(var $v''$, `Lam(var $v'''$, $t$)))) >> + | "fun"; v = var; v' = var; v'' = var; v''' = var; v'''' = var; "->"; t = term -> <:expr< `Lam(var $v$, `Lam(var $v'$, `Lam(var $v''$, `Lam(var $v'''$, `Lam(var $v''''$, $t$))))) >> + ] + + | "app" + [ t1 = SELF; t2 = SELF -> <:expr< `App($t1$, $t2$) >> ] + + | "simple" + [ `ANTIQUOT((""|"term"), a) -> expr_of_string _loc a + | v = var -> <:expr< `Var(var $v$) >> + | "("; t = term; ")" -> t + ] + + ]; + var: + [[ v = LIDENT -> <:expr< $str:v$ >> + | `ANTIQUOT((""|"var"), a) -> expr_of_string _loc a + ]]; + term_eoi: + [[ t = term; `EOI -> t ]]; +END;; + +let expand_lambda_quot_expr loc _loc_name_opt quotation_contents = + LambdaGram.parse_string term_eoi loc quotation_contents;; + +(* to have this syntax <:lam< fun k -> k >> *) +Syntax.Quotation.add "lam" Syntax.Quotation.DynAst.expr_tag expand_lambda_quot_expr;; + +Syntax.Quotation.default := "lam";; + diff --git a/lambda-let.html b/lambda-let.html index f56c2c52..307c408c 100644 --- a/lambda-let.html +++ b/lambda-let.html @@ -1,7 +1,7 @@ Lambda tutorial - + -- 2.11.0