Proofs and Programs (original) (raw)
2 fondational problem. The goal was to give rigor or logico-formal foundations to all mathematical activities. In spite of the failures of the Hilbert's initial project, the ideas of logicians and mathematicians like Turing, Kleene, Church, Gödel, Herbrand... set the bases for Computer Science. Turing Machines, later developed also by Von Neumann, have formed the paradigm of the first computers and of languages known as imperative programming (based on orders like 'do', 'go to'...). The formal systems for computing we will talk about had above all an influence on functional programming and logical programming, which are recent styles of programming and differ from the imperative style. Moreover, they are linked even more directly to the developments of mathematical logic since the '30s. Mathematical logic, in its 'metamathematical' analysis aspect, has Mathematics themselves as its object of study, its languages and its deductive methods, like geometry, to take a purely mathematical discipline as an example, has as its object of study figures and structures of space. One can therefore imagine rather artificial but convenient a three-level stratification, which has organised, with the passing of this century, the 'mathematical discourse': the geometric-algebraic structures, the mathematical theories which study them (algebra, geometry...) and, finally, metatheories that deal with mathematical theories and where one may develop a 'theory of proofs' (one will also try to see the limits of this 'organisation of mathematical discourse'). In other words, from the point of view of computations and languages, linear algebra and analytic geometry, for instance, study the expressions that represent lines on a plane or surfaces in space; λ−calculus, as a language of Proof Theory, manipulates words or expressions that represent formal proofs. In fact, expressions of this language codify abstract mathematical proofs and, therefore computations carried out on them correspond to formal operations on proofs, rather than on the lines or on the surfaces. The fact that λ-calculus is programmable, and that in fact it is a paradigmatic programming language, allows to describe the passage from Proof Theory, as an abstract theory in mathematical logic, to automated proofs and symbolic calculus, as mathematical methods in computing. Although we will speak further on of Proof Theory, we will underline here the 'constructivist' approach in order to present 'proofs as lambda-terms' and study the computer version of provability. While using λ−calculus, we will mention the role of Category Theory in the mathematical semantics of deduction and of formal programming languages (see below). Indeed, the results that link the different sectors of Mathematics and Computer Science place λ−calculus and Combinatory Logic, an equivalent system, at the meeting point of vast sectors of Logic and their applications, providing these theories with an importance that goes beyond their origins as a system for calculability or effective provability. As we have said, the two theories, which have as a common base the 'algebraic calculus without variables' of Shoenfinkel dating from the early Twenties and that are owed to Church and Curry (1928-1936), essentially proposed to 'formalise'