Section: Scientific Foundations
Formalization of mathematics
A proof assistant implements a particular formalism allowing to express mathematics. A traditional formalism allowing to express mathematics is set theory, built on top of first-order predicate logic. Unfortunately, this formalism does not address exactly the needs of a proof assistant. Set theory has been elaborated at the beginning of the 20th century to study mathematically the properties of mathematical reasoning. For this purpose, being able to formalize mathematics “in principle” was enough. Nowadays, the problem is not to formalize mathematics “in principle” but to formalize them “in facts”. Thus, the design of proof assistants has led to ask new questions in logic and, in particular, in proof theory.
Several variants or alternative to set theory have been designed to express mathematics in practice. The system Coq is based on a formalism called The Calculus of Inductive Constructions .
An important feature for such a formalism is the language allowing to express mathematical objects such as functions and sets. It is not desirable to use a formalization of mathematics that has only existence axioms, or even one having the combinator's language obtained by skolemizing these axioms in predicate logic. It is important to have a rich and compact language, in particular a language with binders such as the -calculus.
Another important feature is the ability to integrate deduction and computation. It is not possible, when we use a proof assistant to consider that the proposition 2 + 2 = 4 requires a proof, even a proof simple enough to be found by a automated theorem proving system. Several formalisms such as Martin-Löf's type theory, Boyer-Moore logic, the Calculus of Constructions and the Calculus of Inductive Constructions, include such a possibility to compute inside a proof. Thus, these formalisms designed to express mathematics contain a programming language as a sub-language.
More recently the research in this area has taken several different directions: first the study of deduction modulo that is the simplest extension of predicate logic allowing to mix deduction and computation. Deduction modulo has applications both in automated theorem proving and in proof theory, where it paves the way to a unified theory of cut elimination. Finally, the need to improve the efficiency of computations in the system Coq, has led to the use of compilation techniques issued from the theory of programming language. This has brought logical languages and programming languages closer, allowing for instance to use the language of Coq as a general purpose programming language. This perspective of unifying proof and programming languages is a real challenge for future proof assistants.
Another property of the Calculus of Inductive Constructions that is important for its use as the language of a proof assistant is the possibility to write both constructive and classical proofs. When a proof of existence is constructive, the user can request the computation of a witness, but, of course, not when it is classical.
By insisting on this idea that constructive proofs must be distinguished from classical proofs, the project-team TypiCal participates to rise of a new form a constructivism, not trying to restrict mathematics to constructive mathematics, but trying to identify the part of mathematics that can be done constructively and the part that cannot.
A last property of the Calculus of Inductive Constructions is that proofs are objects of the formalism, exactly as numbers, functions and sets are. This property, based on the celebrated Curry-De Bruijn-Howard correspondence, allows to reduce the safety critical base of the Coq system to a quite small kernel.