module Test where
import LambdaLift
import Utilities
program =
(ELet True [("p", ELam ["a", "b"] (ELet False [("p", (EAp (EAp (EConst
(CFun "-")) (EAp (EAp (EConst (CFun "+")) (EVar "a")) (EVar "b")))
(EConst (CNum 20))))] (ELet False [("m", ELam ["p", "q"] (ELet False
[("g", (EAp (EAp (EConst (CFun "+")) (EVar "a")) (EConst (CNum 6))))]
(ELet False [("d", ELam ["pp"] (EAp (EAp (EConst (CFun "+")) (EAp (EAp
(EConst (CFun "+")) (EVar "pp")) (EVar "q"))) (EVar "p")))] (ELet False
[("c", ELam ["q"] (EAp (EAp (EConst (CFun "+")) (EAp (EAp (EConst (CFun
"-")) (EVar "q")) (EVar "g"))) (EVar "a")))] (EAp (EAp (EConst (CFun
"-")) (EAp (EAp (EConst (CFun "-")) (EAp (EVar "d") (EAp (EAp (EConst
(CFun "+")) (EConst (CNum 1))) (EVar "a")))) (EAp (EVar "c") (EAp (EAp
(EConst (CFun "-")) (EVar "a")) (EVar "b"))))) (EVar "p"))))))] (ELet
True [("f", ELam ["a", "b"] (EAp (EAp (EVar "g") (EVar "a")) (EAp (EAp
(EConst (CFun "+")) (EVar "b")) (EConst (CNum 1))))), ("g", ELam ["x",
"y"] (EAp (EAp (EVar "f") (EVar "x")) (EAp (EAp (EConst (CFun "+"))
(EVar "y")) (EVar "b"))))] (ELet False [("h", ELam ["a", "n"] (EAp (EAp
(EVar "m") (EAp (EAp (EConst (CFun "+")) (EVar "n")) (EConst (CNum
1)))) (EAp (EAp (EVar "f") (EVar "a")) (EVar "n"))))] (EAp (EAp (EVar
"h") (EVar "a")) (EVar "p")))))))] (EAp (EAp (EVar "p") (EConst (CNum
5))) (EConst (CNum 6))))
|