X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Freport.git;a=blobdiff_plain;f=Core2Core.tex;h=5df24873befeb7b28d0cf018dfb0924cc3efd85a;hp=b404a03a74ea3e538f1d15b6f79fbc381b8608bb;hb=00c021ee84afe5e9271a59e0ccc22311406555ea;hpb=c86ed93ead8fc3a01bc69e29b60981aad907bf99;ds=sidebyside diff --git a/Core2Core.tex b/Core2Core.tex index b404a03..5df2487 100644 --- a/Core2Core.tex +++ b/Core2Core.tex @@ -60,6 +60,9 @@ \definetyping[lambda][option=LAM,style=sans] \definetype[lam][option=LAM,style=sans] +\installprettytype [TRANS] [TRANS] +\definetyping[trans][option=TRANS,style=normal,before=,after=] + % An (invisible) frame to hold a lambda expression \define[1]\lamframe{ % Put a frame around lambda expressions, so they can have multiple @@ -269,20 +272,12 @@ expression are named, by introducing lambda expressions. When combined with β-reduction and function inlining below, all function-typed expressions should be lambda abstractions or global identifiers. -\transform{η-abstraction} -{ -\lam{E :: * -> *} - -\lam{E} is not the first argument of an application. - -\lam{E} is not a lambda abstraction. - -\lam{x} is a variable that does not occur free in E. - -\conclusion - -\trans{E}{λx.E x} -} +\starttrans +E \lam{E :: * -> *} +-------------- \lam{E} is not the first argument of an application. +λx.E x \lam{E} is not a lambda abstraction. + \lam{x} is a variable that does not occur free in \lam{E}. +\stoptrans \startbuffer[from] foo = λa -> case a of @@ -579,6 +574,17 @@ Definition: A builtin function is a function for which a builtin hardware translation is available, because its actual definition is not translatable. A user-defined function is any other function. +\starttrans +x = E +~ +x Y0 ... Yi ... Yn \lam{Y_i} is not of a runtime representable type +--------------------------------------------- \lam{Y_i} is not a local variable reference +x' = λy0 ... yi-1 f0 ... fm yi+1 ... yn . \lam{f0 ... fm} = free local vars of \lam{Y_i} + E y0 ... yi-1 Yi yi+1 ... yn +~ +x' y0 ... yi-1 f0 ... fm Yi+1 ... Yn +\stoptrans + \transform{Argument propagation} { \lam{x} is a global variable, bound to a user-defined function