15-816 Linear Logic
We show that non-commutative linear logic is closely related to stacks for a simple functional operational semantics. Because functional programming languages do not evaluate under lambda-abstractions, however, parts of the stack must be copied onto the heap at runtime, unless some additional properties are satisfied.
We investigate the example of A-normal forms used in modern functional language compilers. A-normal forms explicitly sequentialize computation and name all intermediate results. It follows from general considerations in non-commutative linear logic that the intermediate values in an A-normal form can be allocated on a global runtime stack. Some compile-time optimization can violate this property, a phenomenon which can be analyzed cleanly using the logical machinery at hand.