UNPKG

lambda-calculus-with-js

Version:

Using JS' anonymous functions to perform lambda calculus

116 lines (83 loc) 2.47 kB
2λa 0 b 0 3(a 0 b) 0 1a 1b 1c 1d lambda = sign | func | call sign = (1x)+ 0 func = 2 lambda call = 3 lambda lambda ------------- (λa.a b) 3 2 100 100 110 130 120 1110100 1110100 1111100 2 130 2 120 2 a 2 a 2 b c f 1 1 b c λz.λw.(P (z w)) = λz.λw.(z w) f λx.(P λa.x) = λx.(λz.λw.(z w) λa.x) = λx.λw.(λa.x w) a (P a) = (λx.λw.(λa.x w) a) = λw.(λa.a w) a (P a) = (λw.(λa.a w) a) = λa.a b (P b) = (λa.a b) -------------- λa.λb.(a b) f f c 0 1 f a λx.(P λa.x) = λx.(λn.n λa.x) = λx.λa.x f λy.(P λi.y) = λx.λa.x f b λy.(P λb.y) = λy.(λx.λa.x λb.y) = λy.λa.λb.y c λz.λw.(P (z w)) = λz.λw.(λy.λa.λb.y (z w)) = λz.λw.λa.λb.(z w) a (P a) = (λz.λw.λa.λb.(z w) a) = λw.λa.λb.(a w) b (P b) = (λw.λa.λb.(a w) b) = λa.λb.(a b) -------------- true = \x.\y.x false = \x.\y.y and = \p.\q.p q p or = \p.\q.p p q not = \p.p false true Yc = λp.(λf.λa.((p (f f)) a))(λf.λa.((p (f f)) a)) 0 = \f.\x.x 1 = \f.\x.(f x) 2 = \f.\x.(f (f x)) 3 = \f.\x.(f (f (f x))) \a.\b.b -------------- L0 = \T.T \F.F 0 L1 = \T.T \F.(F a) 1 L2 = \T.T \F.((F a) b) 2 L3 = \T.T \F.(((F a) b) c) 3 \F.(((F a) b) c) push_head = \L.\x.\T.T (L former (F x)) (succ (L latter)) push_tail = \L.\x.\F.((L F) x) delete_head = \L.\F.(L \x.F) #reverse = \L.\F.(L ) n+1_params_fn = \n.(n (λa.λb.a)) many_params_fn = ((Y (\s.\r.\a.(s (succ r)))) 0) \a.(a \b.(b a)) f c 0 f c 1 0 f \A. \a.(A [a]) c \B.\C. \a.((B [a]) (C [a])) c = \P.\X.\Y.(P \L.((X L) (Y L))) 0 \C. \a.(a (C [a])) 0 = \P.(P \L.getL L 0) f \D. \a.(a \b.(D [a,b])) f = \P.\D.(P \L.\x.(D (push L x))) c \E.\F. \a.(a \b.((E [a,b]) (F [a,b]))) 1 \F. \a.(a \b.(b (F [a,b]))) 0 \a.(a \b.(b a)) -------------- (\a.(\b.b a) \a.a) c f c f 1 0 f 0 c \A.\B. ((A []) (B [])) f \C.\B. (\a.(C [a]) (B [])) c \D.\E.\B. (\a.((D [a]) (E [a])) (B [])) f \F.\E.\B. (\a.(\b.(F [a,b]) (E [a])) (B [])) 1 \E.\B. (\a.(\b.b (E [a])) (B [])) 0 \B. (\a.(\b.b a) (B [])) f \G. (\a.(\b.b a) (\a.(G [a]))) 0 (\a.(\b.b a) (\a.a)) f = λP.λx.(P λa.x) c = λP.λz.λw.(P (z w)) * = λP.(P *) a = λs.λr.λn.(s (n r)) -------------- l = λf.(((f a) b) c) l[0] = (l λa.λb.λc.a) = (λf.(((f a) b) c) λa.λb.λc.a) 2 = \f.\x.(f (f x)) plus = \a.\b.\F.\X.((a F) ((b F) X)) succ = \a.\F.\X.((a F) (F X)) \g.\h.(h (g F)) 2 = \h.(h \F.(h X))