This lecture will deal about the proof theoretical foundations of functional programming, that is those mathematical logic theories that will explain some of the features of functional programming. In particular, they will explain the computational mechanisms that are behind and that support the computation of functional programming languages like ML.
The core of a functional language - or better, of any programming language - is the ability to build abstractions over expressions - or over control statements in imperative programming - and then the ability to use this abstractions by applying them to arguments. Hence, in functional programming languages we have the ability to build a function abstraction out of an expression; in this way we define a function, a function of a formal parameter x that will give us back a result. We may then apply this function to an argument. The computation of this kind of structure may be explained as the formal symbolic rewriting of the body of the function, after the actual parameter is substituted for the formal parameter.
This textual substitution and this rewriting are not actually performed in real-life programming languages. But it is a very fruitful conceptual tool in order to explain many of the features and many of the issues that are connected with functional languages. In a real language we will have also arithmetic, data structures, maybe non-functional concepts, and so on. However, in this lecture we will deal only with the formal core.