Thomas Dietert
September 26th, 2019
Haskell Hackers Meetup
Variables in an expression that are not bound by any lambda abstraction
Variables in the body of an expression that are bound (captured) by a variable binding in an outer lambda abstraction
\( \lambda x \rightarrow \lambda y \rightarrow x \quad =_{\alpha} \quad \lambda a \rightarrow \lambda b \rightarrow a \)
\( \lambda x \rightarrow \lambda y \rightarrow x \quad \not =_{\alpha} \quad \lambda a \rightarrow \lambda b \rightarrow b \)
(evaluation)
* call by value
(type-checking)
(STLC)
(evaluation)
(type-checking)
(System-F)
\( \tau \Coloneqq \dots \mid \Lambda \alpha \rightarrow \tau \mid \alpha \)
(System-\(F_\omega\))
(\( \lambda_{\Pi} \), \( \lambda P \))
(evaluation)
(Rule \( \text{VStar} \))
\( \text{VStar} \)
(Rule \( \text{VPi} \))
\( \text{VPi} \)
(type-checking)
(cont.)
(cont.)
(cont.)
(cont.)
(cont.)
\( id = \lambda \alpha \rightarrow \lambda x \rightarrow x \\ :: \forall (\alpha :: *) . \forall (x :: \alpha) . \alpha \)
(syntax + typechecker + evaluator)