## 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 20^{th} 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.