Matita is an interactive theorem prover being developed by the Helm team at the University of Bologna. Its stable version 0.5.x may be downloaded at http://matita.cs.unibo.it. The tool originated in the European project MoWGLI as a set of XML-based tools aimed to provide a mathematician-friendly web-interface to repositories of formal mathematical knoweldge, supporting advanced content-based functionalities for querying, searching and browsing the library. It has since then evolved into a light but fully fledged ITP, particularly suited for the assessment of innovative ideas, both at foundational and logical level. In this paper, we give an account of the whole system, its peculiarities and its main applications.
The systemMatita is an interactive proof assistant, adopting a dependent type theory -the Calculus of (Co)Inductive Constructions (CIC) -as its foundational language for describing proofs. It is thus compatible, at the proof term level, with Coq [27], and the two systems are able to check each other's proof objects. Since the two systems do not share a single line of code, but are akin to each other, it is natural to take Coq as the main term of comparison, referring to other systems (most notably, Isabelle and HOL) when some ideas or philosophies characteristic of these latter tools have been imported into our system.Similarly to Coq, Matita follows the so called De Bruijn principle, stating that proofs generated by the system should be verifiable by a small and trusted component, traditionally called kernel. Unsurprisingly, the kernel has roughly the same size in the two tools, in spite of a few differences in the encoding of terms: in particular, Matita's kernel handles explicit substitutions to mimic Coq's Section mechanism, and can cope with existential metavariables, i.e. non-linear placeholders that are Curry-Howard isomorphic to holes in the proofs. Metavariables cannot be instantiated by the kernel: they are considered as opaque constants, with a declared type, only equal to themselves.While this extension does not make the kernel sensibly more complex or fragile, it has a beneficial effect on the size of the type inference subsystem, here