Theory Terms
theory Terms
imports "Nominal-Utils" Vars "AList-Utils-Nominal"
begin
subsubsection ‹Expressions›
text ‹
This is the main data type of the development; our minimal lambda calculus with recursive let-bindings.
It is created using the nominal\_datatype command, which creates alpha-equivalence classes.
The package does not support nested recursion, so the bindings of the let cannot simply be of type
‹(var, exp) list›. Instead, the definition of lists have to be inlined here, as the custom type
‹assn›. Later we create conversion functions between these two types, define a properly typed ‹let›
and redo the various lemmas in terms of that, so that afterwards, the type ‹assn› is no longer
referenced.
›