]> matita.cs.unibo.it Git - helm.git/blob - helm/papers/matita/matita2.tex
labels here and there
[helm.git] / helm / papers / matita / matita2.tex
1 \documentclass[draft]{kluwer}
2 \usepackage{color}
3 \usepackage{graphicx}
4 % \usepackage{amssymb,amsmath}
5 \usepackage{hyperref}
6 % \usepackage{picins}
7 \usepackage{color}
8 \usepackage{fancyvrb}
9 \usepackage[show]{ed}
10
11 \definecolor{gray}{gray}{0.85}
12 %\newcommand{\logo}[3]{
13 %\parpic(0cm,0cm)(#2,#3)[l]{\includegraphics[width=#1]{whelp-bw}}
14 %}
15
16 \newcommand{\component}{component}
17 \newcommand{\components}{components}
18
19 \newcommand{\AUTO}{\textsc{Auto}}
20 \newcommand{\COQ}{Coq}
21 \newcommand{\COQIDE}{CoqIde}
22 \newcommand{\ELIM}{\textsc{Elim}}
23 \newcommand{\GDOME}{Gdome}
24 \newcommand{\HELM}{Helm}
25 \newcommand{\HINT}{\textsc{Hint}}
26 \newcommand{\IN}{\ensuremath{\dN}}
27 \newcommand{\INSTANCE}{\textsc{Instance}}
28 \newcommand{\IR}{\ensuremath{\dR}}
29 \newcommand{\IZ}{\ensuremath{\dZ}}
30 \newcommand{\LIBXSLT}{LibXSLT}
31 \newcommand{\LOCATE}{\textsc{Locate}}
32 \newcommand{\MATCH}{\textsc{Match}}
33 \newcommand{\MATITA}{Matita}
34 \newcommand{\METAHEADING}{Symbol & Position \\ \hline\hline}
35 \newcommand{\MOWGLI}{MoWGLI}
36 \newcommand{\NAT}{\ensuremath{\mathit{nat}}}
37 \newcommand{\NATIND}{\mathit{nat\_ind}}
38 \newcommand{\NUPRL}{NuPRL}
39 \newcommand{\OCAML}{OCaml}
40 \newcommand{\PROP}{\mathit{Prop}}
41 \newcommand{\REF}[3]{\ensuremath{\mathit{Ref}_{#1}(#2,#3)}}
42 \newcommand{\TEXMACRO}[1]{\texttt{\char92 #1}}
43 \newcommand{\UWOBO}{UWOBO}
44 \newcommand{\GETTER}{Getter}
45 \newcommand{\WHELP}{Whelp}
46 \newcommand{\DOT}{\ensuremath{\mbox{\textbf{.}}}}
47 \newcommand{\SEMICOLON}{\ensuremath{\mbox{\textbf{;}}}}
48 \newcommand{\BRANCH}{\ensuremath{\mbox{\textbf{[}}}}
49 \newcommand{\SHIFT}{\ensuremath{\mbox{\textbf{\textbar}}}}
50 \newcommand{\POS}[1]{\ensuremath{#1\mbox{\textbf{:}}}}
51 \newcommand{\MERGE}{\ensuremath{\mbox{\textbf{]}}}}
52 \newcommand{\FOCUS}[1]{\ensuremath{\mathtt{focus}~#1}}
53 \newcommand{\UNFOCUS}{\ensuremath{\mathtt{unfocus}}}
54 \newcommand{\SKIP}{\MATHTT{skip}}
55 \newcommand{\TACTIC}[1]{\ensuremath{\mathtt{tactic}~#1}}
56
57 \definecolor{gray}{gray}{0.85} % 1 -> white; 0 -> black
58 \newcommand{\NT}[1]{\langle\mathit{#1}\rangle}
59 \newcommand{\URI}[1]{\texttt{#1}}
60 \newcommand{\OP}[1]{``\texttt{#1}''}
61
62 %{\end{SaveVerbatim}\setlength{\fboxrule}{.5mm}\setlength{\fboxsep}{2mm}%
63 \newenvironment{grafite}{\VerbatimEnvironment
64  \begin{SaveVerbatim}{boxtmp}}%
65  {\end{SaveVerbatim}\setlength{\fboxsep}{3mm}%
66   \begin{center}
67    \fcolorbox{black}{gray}{\BUseVerbatim[boxwidth=0.9\linewidth]{boxtmp}}
68   \end{center}}
69
70 \newcounter{example}
71 \newenvironment{example}{\stepcounter{example}\vspace{0.5em}\noindent\emph{Example} \arabic{example}.}
72  {}
73 \newcommand{\ASSIGNEDTO}[1]{\textbf{Assigned to:} #1}
74 \newcommand{\FILE}[1]{\texttt{#1}}
75 % \newcommand{\NOTE}[1]{\ifodd \arabic{page} \else \hspace{-2cm}\fi\ednote{#1}}
76 \newcommand{\NOTE}[1]{\ednote{#1}{foo}}
77 \newcommand{\TODO}[1]{\textbf{TODO: #1}}
78
79 \newcounter{pass}
80 \newcommand{\PASS}{\stepcounter{pass}\arabic{pass}}
81
82 \newsavebox{\tmpxyz}
83 \newcommand{\sequent}[2]{
84   \savebox{\tmpxyz}[0.9\linewidth]{
85     \begin{minipage}{0.9\linewidth}
86       \ensuremath{#1} \\
87       \rule{3cm}{0.03cm}\\
88       \ensuremath{#2}
89     \end{minipage}}\setlength{\fboxsep}{3mm}%
90   \begin{center}
91    \fcolorbox{black}{gray}{\usebox{\tmpxyz}}
92   \end{center}}
93
94 \bibliographystyle{plain}
95
96 \begin{document}
97
98 \begin{opening}
99
100  \title{The \MATITA{} Proof Assistant}
101
102 \author{Andrea \surname{Asperti} \email{asperti@cs.unibo.it}}
103 \author{Claudio \surname{Sacerdoti Coen} \email{sacerdot@cs.unibo.it}}
104 \author{Enrico \surname{Tassi} \email{tassi@cs.unibo.it}}
105 \author{Stefano \surname{Zacchiroli} \email{zacchiro@cs.unibo.it}}
106 \institute{Department of Computer Science, University of Bologna\\
107  Mura Anteo Zamboni, 7 --- 40127 Bologna, ITALY}
108
109 \runningtitle{The \MATITA{} proof assistant}
110 \runningauthor{Asperti, Sacerdoti Coen, Tassi, Zacchiroli}
111
112 % \date{data}
113
114 \begin{motto}
115 ``We are nearly bug-free'' -- \emph{CSC, Oct 2005}
116 \end{motto}
117
118 \begin{abstract}
119  abstract qui
120 \end{abstract}
121
122 \keywords{Proof Assistant, Mathematical Knowledge Management, XML, Authoring,
123 Digital Libraries}
124
125 \end{opening}
126
127
128 \section{Introduction}
129 \label{sec:intro}
130 \MATITA{} is the Proof Assistant under development by the \HELM{} team
131 \cite{mkm-helm} at the University of Bologna, under the direction of 
132 Prof.~Asperti. \\
133 The paper describes the overall architecture of
134 the system, focusing on its most distintive and innovative 
135 features.
136
137 \subsection{Historical Perspective}
138 The origins of \MATITA{} go back to 1999. At the time we were mostly 
139 interested to develop tools and techniques to enhance the accessibility
140 via Web of formal libraries of mathematics. Due to its dimension, the
141 library of the \COQ~\cite{CoqManual} proof assistant (of the order of 35'000 theorems) 
142 was choosed as a privileged test bench for our work, although experiments
143 have been also conducted with other systems, and notably 
144 with \NUPRL{}\cite{nuprl-book}.
145 The work, mostly performed in the framework of the recently concluded 
146 European project IST-33562 \MOWGLI{}~\cite{pechino}, mainly consisted in the 
147 following steps:
148 \begin{itemize}
149 \item exporting the information from the internal representation of
150  \COQ{} to a system and platform independent format. Since XML was at the 
151 time an emerging standard, we naturally adopted this technology, fostering
152 a content-centric architecture\cite{content-centric} where the documents
153 of the library were the the main components around which everything else 
154 has to be build;
155 \item developing indexing and searching techniques supporting semantic
156  queries to the library; 
157 %these efforts gave birth to our \WHELP{}
158 %search engine, described in~\cite{whelp};
159 \item developing languages and tools for a high-quality notational 
160 rendering of mathematical information\footnote{We have been 
161 active in the MathML Working group since 1999.}; 
162 %and developed inside
163 %\HELM{} a MathML-compliant widget for the GTK graphical environment
164 %which can be integrated in any application.
165 \end{itemize}
166
167 According to our content-centric commitment, the library exported from
168 \COQ{} was conceived as being distributed and most of the tools were developed
169 as Web services. The user could interact with the library and the tools by
170 means of a Web interface that orchestrates the Web services.
171
172 The Web services and the other tools have been implemented as front-ends
173 to a set of software libraries, collectively called the \HELM{} libraries.
174 At the end of the \MOWGLI{} project we already disposed of the following
175 tools and software libraries:
176 \begin{itemize}
177 \item XML specifications for the Calculus of Inductive Constructions,
178 with libraries for parsing and saving mathematical objects in such a format
179 \cite{exportation-module};
180 \item metadata specifications with libraries for indexing and querying the
181 XML knowledge base;
182 \item a proof checker library (i.e. the {\em kernel} of a proof assistant), 
183 implemented to check that we exported form the \COQ{} library all the 
184 logically relevant content;
185 \item a sophisticated parser (used by the search engine), able to deal 
186 with potentially ambiguous and incomplete information, typical of the 
187 mathematical notation \cite{disambiguation};
188 \item a {\em refiner} library, i.e. a type inference system, based on
189 partially specified terms, used by the disambiguating parser;
190 \item complex transformation algorithms for proof rendering in natural
191 language \cite{remathematization};
192 \item an innovative, MathML-compliant rendering widget for the GTK 
193 graphical environment\cite{padovani}, supporting 
194 high-quality bidimensional
195 rendering, and semantic selection, i.e. the possibility to select semantically
196 meaningful rendering expressions, and to past the respective content into
197 a different text area.
198 \end{itemize}
199 Starting from all this, developing our own proof assistant was not
200 too far away: essentially, we ``just'' had to
201 add an authoring interface, and a set of functionalities for the
202 overall management of the library, integrating everything into a
203 single system. \MATITA{} is the result of this effort. 
204
205 \subsection{The System}
206 DESCRIZIONE DEL SISTEMA DAL PUNTO DI VISTA ``UTENTE''
207
208 \begin{itemize}
209  \item scelta del sistema fondazionale
210  \item sistema indipendente (da \COQ)
211  \item compatibilit\`a con sistemi legacy
212 \end{itemize}
213
214 \subsection{Relationship with \COQ{}}
215
216 At first sight, \MATITA{} looks as (and partly is) a \COQ{} clone. This is
217 more the effect of the circumstances of its creation described 
218 above than the result of a deliberate design. In particular, we
219 (essentially) share the same foundational dialect of \COQ{} (the
220 Calculus of (Co)Inductive Constructions), the same implementative
221 language (\OCAML{}), and the same (script based) authoring philosophy.
222 However, the analogy essentially stops here and no code is shared by the
223 two systems.
224
225 In a sense; we like to think of \MATITA{} as the way \COQ{} would 
226 look like if entirely rewritten from scratch: just to give an
227 idea, although \MATITA{} currently supports almost all functionalities of
228 \COQ{}, it links 60'000 lines of \OCAML{} code, against the 166'000 lines linked
229 by \COQ{} (and we are convinced that, starting from scratch again,
230 we could furtherly reduce our code in sensible way).
231
232 Moreover, the complexity of the code of \MATITA{} is greatly reduced with
233 respect to \COQ. For instance, the API of the libraries of \MATITA{} comprise
234 989 functions, to be compared with the 4'286 functions of \COQ.
235
236 Finally, \MATITA{} has several innovatives features over \COQ{} that derive
237 from the integration of Mathematical Knowledge Management tools with proof
238 assistants. Among them, the advanced indexing tools over the library and
239 the parser for ambiguous mathematical notation.
240
241 The size and complexity improvements over \COQ{} must be understood
242 historically. \COQ{} is a quite old
243 system whose development started 15\NOTE{Verificare} years ago. Since then
244 several developers have took over the code and several new research ideas
245 that were not considered in the original architecture have been experimented
246 and integrated in the system. Moreover, there exists a lot of developments
247 for \COQ{} that require backward compatibility between each pair of releases;
248 since many central functionalities of a proof assistant are based on heuristics
249 or arbitrary choices to overcome undecidability (e.g. for higher order
250 unification), changing these functionalities mantaining backward compatibility
251 is very difficult. Finally, the code of \COQ{} has been greatly optimized
252 over the years; optimization reduces maintenability and rises the complexity
253 of the code.
254
255 In writing \MATITA{} we have not been hindered by backward compatibility and
256 we have took advantage of the research results and experiences previously
257 developed by others, comprising the authors of \COQ. Moreover, starting from
258 scratch, we have designed in advance the architecture and we have splitted
259 the code in coherent minimally coupled libraries.
260
261 In the future we plan to exploit \MATITA{} as a test bench for new ideas and
262 extensions. Keeping the single libraries and the whole architecture as
263 simple as possible is thus crucial to foster future experiments and to
264 allow other developers to quickly understand our code and contribute.
265
266 %For direct experience of the authors, the learning curve to understand and
267 %be able to contribute to \COQ{}'s code is quite steep and requires direct
268 %and frequent interactions with \COQ{} developers.
269
270 \begin{figure}[t]
271  \begin{center}
272   \includegraphics[width=0.9\textwidth]{librariesCluster.ps}
273   \caption{\MATITA{} libraries}
274   \label{fig:libraries}
275  \end{center}
276 \end{figure}
277
278 \section{Architecture}
279 \label{architettura}
280 Fig.~\ref{fig:libraries} shows the architecture of the \emph{\components}
281 (circle nodes) and \emph{applications} (squared nodes) developed in the HELM
282 project.
283
284 Applications and \components{} depend over other \components{} forming a
285 directed acyclic graph (DAG). Each \component{} can be decomposed in
286 a a set of \emph{modules} also forming a DAG.
287
288 Modules and \components{} provide coherent sets of functionalities
289 at different scales. Applications that require only a few functionalities
290 depend on a restricted set of \components{}.
291
292 Only the proof assistant \MATITA{} and the \WHELP{} search engine are
293 applications meant to be used directly by the user. All the other applications
294 are Web services developed in the HELM and MoWGLI projects and already described
295 elsewhere. In particular:
296 \begin{itemize}
297  \item The \emph{Getter} is a Web service to retrieve an (XML) document
298    from a physical location (URL) given its logical name (URI). The Getter is
299    responsible of updating a table that maps URIs to URLs. Thanks to the Getter
300    it is possible to work on a logically monolithic library that is physically
301    distributed on the network. More information on the Getter can be found
302    in~\cite{zack-master}.
303  \item \emph{Whelp} is a search engine to index and locate mathematical
304    notions (axioms, theorems, definitions) in the logical library managed
305    by the Getter. Typical examples of a query to Whelp are queries that search
306    for a theorem that generalize or instantiate a given formula, or that
307    can be immediately applied to prove a given goal. The output of Whelp is
308    an XML document that lists the URIs of a complete set of candidates that
309    are likely to satisfy the given query. The set is complete in the sense
310    that no notion that actually satisfies the query is thrown away. However,
311    the query is only approssimated in the sense that false matches can be
312    returned. Whelp has been described in~\cite{whelp}.
313  \item \emph{Uwobo} is a Web service that, given the URI of a mathematical
314    notion in the distributed library, renders it according to the user provided
315    two dimensional mathematical notation. Uwobo may also embed the rendering
316    of mathematical notions into arbitrary documents before returning them.
317    The Getter is used by Uwobo to retrieve the document to be rendered.
318    Uwobo has been described in~\cite{zack-master}.
319  \item The \emph{Proof Checker} is a Web service that, given the URI of
320    notion in the distributed library, checks its correctness. Since the notion
321    is likely to depend in an acyclic way over other notions, the proof checker
322    is also responsible of building in a top-down way the DAG of all
323    dependencies, checking in turn every notion for correctness.
324    The proof checker has been described in~\cite{zack-master}.
325  \item The \emph{Dependency Analyzer} is a Web service that can produce
326    a textual or graphical representation of the dependecies of an object.
327    The dependency analyzer has been described in~\cite{zack-master}.
328 \end{itemize}
329
330 The dependency of a \component{} or application over another \component{} can
331 be satisfied by linking the \component{} in the same executable.
332 For those \components{} whose functionalities are also provided by the
333 aforementioned Web services, it is also possible to link stub code that
334 forwards the request to a remote Web service. For instance, the Getter
335 is just a wrapper to the \GETTER \component{} that allows the
336 \component{} to be used as a Web service. \MATITA{} can directly link the code
337 of the \GETTER \component, or it can use a stub library with the same
338 API that forwards every request to the Getter.
339
340 To better understand the architecture of \MATITA{} and the role of each
341 \component, we can focus on the representation of the mathematical information.
342 \MATITA{} is based on (a variant of) the Calculus of (Co)Inductive
343 Constructions (CIC). In CIC terms are used to represent mathematical
344 expressions, types and proofs. \MATITA{} is able to handle terms at
345 four different levels of specification. On each level it is possible to provide
346 a different set of functionalities. The four different levels are:
347 fully specified terms; partially specified terms; 
348 content level terms; presentation level terms.
349
350 \subsection{Fully specified terms}
351 \label{fully-spec}
352  \emph{Fully specified terms} are CIC terms where no information is
353    missing or left implicit. A fully specified term should be well-typed.
354    The mathematical notions (axioms, definitions, theorems) that are stored
355    in our mathematical library are fully specified and well-typed terms.
356    Fully specified terms are extremely verbose (to make type-checking
357    decidable). Their syntax is fixed and does not resemble the usual
358    extendible mathematical notation. They are not meant for direct user
359    consumption.
360
361    The \texttt{cic} \component{} defines the data type that represents CIC terms
362    and provides a parser for terms stored in an XML format.
363
364    The most important \component{} that deals with fully specified terms is
365    \texttt{cic\_proof\_checking}. It implements the procedure that verifies
366    if a fully specified term is well-typed. It also implements the
367    \emph{conversion} judgement that verifies if two given terms are
368    computationally equivalent (i.e. they share the same normal form).
369
370    Terms may reference other mathematical notions in the library.
371    One commitment of our project is that the library should be physically
372    distributed. The \GETTER \component{} manages the distribution,
373    providing a mapping from logical names (URIs) to the physical location
374    of a notion (an URL). The \texttt{urimanager} \component{} provides the URI
375    data type and several utility functions over URIs. The
376    \texttt{cic\_proof\_checking} \component{} calls the \GETTER
377    \component{} every time it needs to retrieve the definition of a mathematical
378    notion referenced by a term that is being type-checked. 
379
380    The Proof Checker is the Web service that provides an interface
381    to the \texttt{cic\_proof\_checking} \component.
382
383    We use metadata and a sort of crawler to index the mathematical notions
384    in the distributed library. We are interested in retrieving a notion
385    by matching, instantiation or generalization of a user or system provided
386    mathematical expression. Thus we need to collect metadata over the fully
387    specified terms and to store the metadata in some kind of (relational)
388    database for later usage. The \texttt{hmysql} \component{} provides
389    a simplified
390    interface to a (possibly remote) MySql database system used to store the
391    metadata. The \texttt{metadata} \component{} defines the data type of the
392    metadata
393    we are collecting and the functions that extracts the metadata from the
394    mathematical notions (the main functionality of the crawler).
395    The \texttt{whelp} \component{} implements a search engine that performs
396    approximated queries by matching/instantiation/generalization. The queries
397    operate only on the metadata and do not involve any actual matching
398    (that will be described later on and that is implemented in the
399     \texttt{cic\_unification} \component). Not performing any actual matching
400    the query only returns a complete and hopefully small set of matching
401    candidates. The process that has issued the query is responsible of
402    actually retrieving from the distributed library the candidates to prune
403    out false matches if interested in doing so.
404
405    The Whelp search engine is the Web service that provides an interface to
406    the \texttt{whelp} \component.
407
408    According to our vision, the library is developed collaboratively so that
409    changing or removing a notion can invalidate other notions in the library.
410    Moreover, changing or removing a notion requires a corresponding change
411    in the metadata database. The \texttt{library} \component{} is responsible
412    of preserving the coherence of the library and the database. For instance,
413    when a notion is removed, all the notions that depend on it and their
414    metadata are removed from the library. This aspect will be better detailed
415    in Sect.~\ref{sec:libmanagement}.
416    
417 \subsection{Partially specified terms}
418 \emph{Partially specified terms} are CIC terms where subterms can be omitted.
419 Omitted subterms can bear no information at all or they may be associated to
420 a sequent. The formers are called \emph{implicit terms} and they occur only
421 linearly. The latters may occur multiple times and are called
422 \emph{metavariables}. An \emph{explicit substitution} is applied to each
423 occurrence of a metavariable. A metavariable stand for a term whose type is
424 given by the conclusion of the sequent. The term must be closed in the
425 context that is given by the ordered list of hypotheses of the sequent.
426 The explicit substitution instantiates every hypothesis with an actual
427 value for the term bound by the hypothesis.
428
429 Partially specified terms are not required to be well-typed. However a
430 partially specified term should be \emph{refinable}. A \emph{refiner} is
431 a type-inference procedure that can instantiate implicit terms and
432 metavariables and that can introduce \emph{implicit coercions} to make a
433 partially specified term be well-typed. The refiner of \MATITA{} is implemented
434 in the \texttt{cic\_unification} \component. As the type checker is based on
435 the conversion check, the refiner is based on \emph{unification} that is
436 a procedure that makes two partially specified term convertible by instantiating
437 as few as possible metavariables that occur in them.
438
439 Since terms are used in CIC to represent proofs, correct incomplete
440 proofs are represented by refinable partially specified terms. The metavariables
441 that occur in the proof correspond to the conjectures still to be proved.
442 The sequent associated to the metavariable is the conjecture the user needs to
443 prove.
444
445 \emph{Tactics} are the procedures that the user can apply to progress in the
446 proof. A tactic proves a conjecture possibly creating new (and hopefully
447 simpler) conjectures. The implementation of tactics is given in the
448 \texttt{tactics} \component. It is heavily based on the refinement and
449 unification procedures of the \texttt{cic\_unification} \component.
450
451 The \texttt{grafite} \component{} defines the abstract syntax tree (AST) for the
452 commands of the \MATITA{} proof assistant. Most of the commands are tactics.
453 Other commands are used to give definitions and axioms or to state theorems
454 and lemmas. The \texttt{grafite\_engine} \component{} is the core of \MATITA{}.
455 It implements the semantics of each command in the grafite AST as a function
456 from status to status.  It implements also an undo function to go back to
457 previous statuses. \TODO{parlare di disambiguazione lazy \& co?}
458
459 As fully specified terms, partially specified terms are not well suited
460 for user consumption since their syntax is not extendible and it is not
461 possible to adopt the usual mathematical notation. However they are already
462 an improvement over fully specified terms since they allow to omit redundant
463 information that can be inferred by the refiner.
464
465 \subsection{Content level terms}
466 \label{sec:contentintro}
467
468 The language used to communicate proofs and expecially expressions with the
469 user does not only needs to be extendible and accomodate the usual mathematical
470 notation. It must also reflect the comfortable degree of imprecision and
471 ambiguity that the mathematical language provides.
472
473 For instance, it is common practice in mathematics to speak of a generic
474 equality that can be used to compare any two terms. However, it is well known
475 that several equalities can be distinguished as soon as we care for decidability
476 or for their computational properties. For instance equality over real
477 numbers is well known to be undecidable, whereas it is decidable over
478 rational numbers.
479
480 Similarly, we usually speak of natural numbers and their operations and
481 properties without caring about their representation. However the computational
482 properties of addition over the binary representation are very different from
483 those of addition over the unary representation. And addition over two natural
484 numbers is definitely different from addition over two real numbers.
485
486 Formal mathematics cannot hide these differences and obliges the user to be
487 very precise on the types he is using and their representation. However,
488 to communicate formulae with the user and with external tools, it seems good
489 practice to stick to the usual imprecise mathematical ontology. In the
490 Mathematical Knowledge Management community this imprecise language is called
491 the \emph{content level} representation of expressions.
492
493 In \MATITA{} we provide two translations: from partially specified terms
494 to content level terms and the other way around. The first translation can also
495 be applied to fully specified terms since a fully specified term is a special
496 case of partially specified term where no metavariable or implicit term occurs.
497
498 The translation from partially specified terms to content level terms must
499 discriminate between terms used to represent proofs and terms used to represent
500 expressions. The firsts are translated to a content level representation of
501 proof steps that can easily be rendered in natural language. The latters
502 are translated to MathML Content formulae. MathML Content~\cite{mathml} is a W3C
503 standard
504 for the representation of content level expressions in an XML extensible format.
505
506 The translation to content level is implemented in the
507 \texttt{acic\_content} \component. Its input are \emph{annotated partially
508 specified terms}, that are maximally unshared
509 partially specified terms enriched with additional typing information for each
510 subterm. This information is used to discriminate between terms that represent
511 proofs and terms that represent expressions. Part of it is also stored at the
512 content level since it is required to generate the natural language rendering
513 of proofs. The terms need to be maximally unshared (i.e. they must be a tree
514 and not a DAG). The reason is that to the occurrences of a subterm in
515 two different positions we need to associate different typing informations.
516 This association is made easier when the term is represented as a tree since
517 it is possible to label each node with an unique identifier and associate
518 the typing information using a map on the identifiers.
519 The \texttt{cic\_acic} \component{} unshares and annotates terms. It is used
520 by the \texttt{library} \component{} since fully specified terms are stored
521 in the library in their annotated form.
522
523 We do not provide yet a reverse translation from content level proofs to
524 partially specified terms. But in \texttt{cic\_disambiguation} we do provide
525 the reverse translation for expressions. The mapping from
526 content level expressions to partially specified terms is not unique due to
527 the ambiguity of the content level. As a consequence the translation
528 is guided by an \emph{interpretation}, that is a function that chooses for
529 every ambiguous expression one partially specified term. The
530 \texttt{cic\_disambiguation} \component{} implements the
531 disambiguation algorithm we presented in~\cite{disambiguation} that is
532 responsible of building in an efficicent way the set of all ``correct''
533 interpretations. An interpretation is correct if the partially specified term
534 obtained using the interpretation is refinable.
535
536 \subsection{Presentation level terms}
537
538 Content level terms are a sort of abstract syntax trees for mathematical
539 expressions and proofs. The concrete syntax given to these abstract trees
540 is called \emph{presentation level}.
541
542 The main important difference between the content level language and the
543 presentation level language is that only the former is extendible. Indeed,
544 the presentation level language is a finite language that comprises all
545 the usual mathematical symbols. Mathematicians invent new notions every
546 single day, but they stick to a set of symbols that is more or less fixed.
547
548 The fact that the presentation language is finite allows the definition of
549 standard languages. In particular, for formulae we have adopt MathML
550 Presentation~\cite{mathml} that is an XML dialect standardized by the W3C. To
551 visually
552 represent proofs it is enough to embed formulae in plain text enriched with
553 formatting boxes. Since the language of formatting boxes is very simple,
554 many equivalent specifications exist and we have adopted our own, called
555 BoxML.
556
557 The \texttt{content\_pres} \component{} contains the implementation of the
558 translation from content level terms to presentation level terms. The
559 rendering of presentation level terms is left to the application that uses
560 the \component. However, in the \texttt{hgdome} \component{} we provide a few
561 utility functions to build a \GDOME~\cite{gdome2} MathML+BoxML tree from our
562 presentation
563 level terms. \GDOME{} MathML+BoxML trees can be rendered by the GtkMathView
564 widget developed by Luca Padovani \cite{padovani}. The widget is
565 particularly interesting since it allows to implement \emph{semantic
566 selection}.
567
568 Semantic selection is a technique that consists in enriching the presentation
569 level terms with pointers to the content level terms and to the partially
570 specified terms they correspond to. Highlight of formulae in the widget is
571 constrained to selection of meaningful expressions, i.e. expressions that
572 correspond to a lower level term, that is a content term or a partially or
573 fully specified term.
574 Once the rendering of a lower level term is
575 selected it is possible for the application to retrieve the pointer to the
576 lower level term. An example of applications of semantic selection is
577 \emph{semantic cut\&paste}: the user can select an expression and paste it
578 elsewhere preserving its semantics (i.e. the partially specified term),
579 possibly performing some semantic transformation over it (e.g. renaming
580 variables that would be captured or lambda-lifting free variables).
581
582 The reverse translation from presentation level terms to content level terms
583 is implemented by a parser that is also found in \texttt{content\_pres}.
584 Differently from the translation from content level terms to partially
585 refined terms, this translation is not ambiguous. The reason is that the
586 parsing tool we have adopted (CamlP4) is not able to parse ambiguous
587 grammars. Thus we require the mapping from presentation level terms
588 (concrete syntax) to content level terms (abstract syntax) to be unique.
589 This means that the user must fix once and for all the associativity and
590 precedence level of every operator he is using. In practice this limitation
591 does not seem too strong. The reason is that the target of the
592 translation is an ambiguous language and the user is free to associate
593 to every content level term several different interpretations (as a
594 partially specified term).
595
596 Both the direct and reverse translation from presentation to content level
597 terms are parameterized over the user provided mathematical notation. 
598 The \texttt{lexicon} \component{} is responsible of managing the lexicon,
599 that is the set of active notations. It defines an abstract syntax tree
600 of commands to declare and activate new notations and it implements the
601 semantics of these commands. It also implements undoing of the semantic
602 actions. Among the commands there are hints to the
603 disambiguation algorithm that are used to control and speed up disambiguation.
604 These mechanisms will be further discussed in Sect.~\ref{sec:disambiguation}.
605
606 Finally, the \texttt{grafite\_parser} \component{} implements a parser for
607 the concrete syntax of the commands of \MATITA. The parser process a stream
608 of characters and returns a stream of abstract syntax trees (the ones
609 defined by the \texttt{grafite} component and whose semantics is given
610 by \texttt{grafite\_engine}). When the parser meets a command that changes
611 the lexicon, it invokes the \texttt{lexicon} \component{} to immediately
612 process the command. When the parser needs to parse a term at the presentation
613 level, it invokes the already described parser for terms contained in
614 \texttt{content\_pres}.
615
616 The \MATITA{} proof assistant and the \WHELP{} search engine are both linked
617 against the \texttt{grafite\_parser} \components{}
618 since they provide an interface to the user. In both cases the formulae
619 written by the user are parsed using the \texttt{content\_pres} \component{} and
620 then disambiguated using the \texttt{cic\_disambiguation} \component.
621 However, only \MATITA{} is linked against the \texttt{grafite\_engine} and
622 \texttt{tactics} components since \WHELP{} can only execute those ASTs that
623 correspond to queries (implemented in the \texttt{whelp} component).
624
625 The \UWOBO{} Web service wraps the \texttt{content\_pres} \component,
626 providing a rendering service for the documents in the distributed library.
627 To render a document given its URI, \UWOBO{} retrieves it using the
628 \GETTER{} obtaining a document with fully specified terms. Then it translates
629 it to the presentation level passing through the content level. Finally
630 it returns the result document to be rendered by the user's
631 browser.\footnote{\TODO{manca la passata verso HTML}}
632
633
634 The \components{} not yet described (\texttt{extlib}, \texttt{xml},
635 \texttt{logger}, \texttt{registry} and \texttt{utf8\_macros}) are 
636 minor \components{} that provide a core of useful functions and basic
637 services missing from the standard library of the programming language.
638 In particular, the \texttt{xml} \component{} is used
639 to easily represent, parse and pretty-print XML files.
640
641 \section{Using \MATITA (boh \ldots cambiare titolo)}
642
643 \begin{figure}[t]
644  \begin{center}
645 %   \includegraphics[width=0.9\textwidth]{a.eps}
646   \caption{\MATITA{} screenshot}
647   \label{fig:screenshot}
648  \end{center}
649 \end{figure}
650
651 \MATITA{} has a script based user interface. As can be seen in Fig.~... it is
652 split in two main windows: on the left a textual widget is used to edit the
653 script, on the right the list of open goal is shown using a MathML rendering
654 widget. A distinguished part of the script (shaded in the screenshot) represent
655 the commands already executed and can't be edited without undoing them. The
656 remaining part can be freely edited and commands from that part can be executed
657 moving down the execution point. An additional window --- the ``cicBrowser'' ---
658 can be used to browse the library, including the proof being developed, and
659 enable content based search on it. In the cicBrowser proofs are rendered in
660 natural language, automatically generated from the low-level $\lambda$-terms
661 using techniques inspired by \cite{natural,YANNTHESIS}.
662
663 In the \MATITA{} philosophy the script is not relevant \emph{per se}, but is
664 only seen as a convenient way to create mathematical objects. The universe of
665 all these objects makes up the \HELM{} library, which is always completely
666 visible to the user. The mathematical library is thus conceived as a global 
667 hypertext, where objects may freely reference each other. It is a duty of
668 the system to guide the user through the relevant parts of the library. 
669
670 This methodological assumption has many important consequences
671 which will be discussed in the next section.
672
673 %on one side
674 %it requires functionalities for the overall management of the library, 
675 %%%%%comprising efficient indexing techniques to retrieve and filter the 
676 %information; 
677 %on the other it introduces overloading in the use of 
678 %identifiers and mathematical notation, requiring sophisticated disambiguation
679 %techniques for interpreting the user inputs.  
680 %In the next two sections we shall separately discuss the two previous 
681 %points. 
682
683 %In order to maximize accessibility mathematical objects are encoded in XML. (As%discussed in the introduction,) the modular architecture of \MATITA{} is
684 %organized in components which work on data in this format. For instance the
685 %rendering engine, which transform $\lambda$-terms encoded as XML document to
686 %MathML Presentation documents, can be used apart from \MATITA{} to print  ...
687 %FINIRE
688
689 A final section is devoted to some innovative aspects
690 of the authoring system, such as a step by step tactical execution, 
691 content selection and copy-paste. 
692
693 \section{Library Management}
694
695 \subsection{Indexing and searching}
696
697
698 \subsection{Compilation and decompilation}
699 \label{sec:libmanagement}
700
701 The aim of this section is to describe the way matita 
702 preserves the consistency and the availability of the library
703 trough the \WHELP{} technology, in response to the user addition or 
704 deletion of mathematical objects.
705
706 As already sketched in \ref{fully-spec} the output of the
707 compilation of a script is split among two storage media, a
708 classical filesystem and a relational database. The former is used to
709 store the XML encoding of the objects defined in the script, the
710 disambiguation aliases and the interpretation and notational convention defined,
711 while the latter is used to store all the metadata needed by
712 \WHELP{}. In addition the \GETTER component
713 should be updated with the the new mapping between the logical URI
714 and the physical path of objects.
715
716 While this kind of consistency has nothing to do with the nature of
717 the content of the library and is thus of poor interest (but really
718 tedious to implement and keep bug-free), there is a more deep
719 notion of mathematical consistency we need to provide. Each object
720 must reference only defined object (i.e. each proof must use only
721 already proved theorems). 
722
723 We will focus on how matita ensures the interesting kind
724 of consistency during the formalization of a mathematical theory, 
725 giving the user the freedom of adding, deleting, modifying objects
726 without loosing the feeling of an always visible and browsable
727 library.
728
729 \subsubsection{Compilation}
730 The typechecker component guarantees that if an object is well typed
731 it depends only on well defined objects available in the library,
732 that is exactly what we need to be sure that the logic consistency of
733 the library is preserved. We have only find the right order of
734 compilation of the scripts that compose the user development.
735
736 For this purpose we developed a low level tool called \emph{matitadep}
737 that takes in input the list of files that compose the development and
738 outputs their dependencies in a format suitable for the make utility.
739 The user is not asked to run \emph{matitadep} nor make by hand, but
740 simply to tell matita the root directory of his development (where all
741 script files can be found) and matita will handle all the compilation
742 tasks.\\
743 To calculate dependencies it is enough to look at the script file for
744 its inclusions of other parts of the development or for explicit
745 references to other objects (i.e. with explicit aliases, see
746 \ref{aliases}). 
747
748 The output of the compilation is immediately available to the user
749 trough the \WHELP{} technology, since all metadata are stored in a
750 user-specific area of the database where the search engine has read
751 access, and all the automated tactics that operates on the whole
752 library, like auto, have full visibility of the newly defined objects.
753
754 Compilation is rather simple, and the only tricky case is when we want
755 to compile again the same script, maybe after the deletion of a
756 theorem. Here the policy is simple: decompile it before recompiling.
757 As we will see in the next section decompilation will ensure that
758 there will be no theorems in the development that depends on the
759 removed item.
760
761 \subsubsection{Decompilation}
762 Decompiling an object involves,
763 recursively, the decompilation of all the objects that depend on it.
764
765 The calculation of the reverse dependencies can be computed in two
766 ways, using the relational database or using a simpler set of metadata
767 that matita saves in the filesystem as a result of compilation. The
768 former technique is the same used by the \emph{Dependency Analyzer}
769 described in \cite{zack-master} and really depends on a relational
770 database.\\ 
771 The latter is a fall-back in case the database is not available. Due to
772 the complex deployment of a complex peace of software like a database,
773 it is a common usage for the \HELM{} team to use a single and remote
774 database, that may result unavailable if the user workstation lacks
775 connectivity.  This facility has to be intended only as a fall-back,
776 since the whole \WHELP{} technology depends on the database.
777
778 Decompilation guarantees that if an object is removed there are no
779 dandling references to it, and that the part of the library still
780 compiled is logically consistent. Since decompilation involves the
781 deletion of all the outputs of the compilation, metadata included, the
782 library browsable trough the \WHELP{} technology is always up to date.
783
784 \subsubsection{Interactive and batch (de)compilation}
785 \MATITA{} includes an interactive graphical interface and a batch
786 compiler. Only the former is intended to be used directly by the
787 user, the latter is automatically invoked when a not yet compiled
788 part of the user development is required.
789
790 While they share the same engine for compilation and decompilation,
791 they provide different granularity. The batch compiler is only able to
792 compile a whole script file and reciprocally it can decompile only a whole
793 script, and consequently all the other scripts that rely on an object
794 defined in it. The interactive interface is able to execute single steps
795 of compilation, that may include the definition of an object, and
796 symmetrically to undo single steps, thus removing single objects.
797
798 %
799 %goals: consentire sviluppo di una librearia mantenendo integrita' referenziale e usando le teconologie nostre (quindi con metadati, XML, libreria visibile)
800 %\subsubsection{Composition}
801 %scripts.ma, .moo, XML, metadata
802 %\subsubsection{Compilation}
803 %analogie con compilazione classica dso.\\
804 %granularita' differenti per uso interattivo e non
805 %\paragraph{Batch}
806 %- granularita' .ma/buri \\
807 %-- motivazioni\\
808 %- come si calcolano le dipendenze\\
809 %- quando la si usa\\
810 %- metodi (cc e clean)\\
811 %- garanzie
812 %\paragraph{Interactive}
813 %- granularita' fine\\
814 %-- motivazioni
815 %\label{sec:libmanagement}
816 %consistenza: integrita' referenziale
817 %Goals: mantenere consistente la rappresentazione della libreria su memoria persistente consentendo di compilare e decompilare le compilation unit (.ma).\\
818 %Vincoli: dipendenze oggetti-oggetti e metadati-oggetti\\
819 %Due livelli di gestione libreria, uno e' solo in fase interattiva dove la compilazione e' passo passo: \\
820 %--- granularita' oggetto per matita interactive\\
821 %--- granularita' baseuri (compilation unit) per la libreria\\
822 %In entrmbi i casi ora:\\
823 %--- matitaSync: add, remove, timetravel(facility-macro tra 2 stati)[obj]\\
824 %--- matitaCleanLib: clean\_baseuri (che poi usa matitaSync a sua volta)[comp1]\\
825 %Vincoli di add: typecheck ( ==$>$ tutto quello che usa sta in lib)\\
826 %Vincoli di remove: \\
827 %--- la remove di mSync non li controlla (ma sa cosa cancellare per ogni uri)\\
828 %--- la clean\_baseuri calcola le dipendenze con i metadati (o anche i moo direi) e li rispetta\\
829 %Undo di matita garantisce la consistenza a patto che l'history che tiene sia ok\\
830 %Undo della lib (mClean) garantisce la consistenza (usando moo o Db).\\
831
832 \subsection{Automation}
833
834 \subsection{\MATITA's naming convention}
835 A minor but not entirely negligible aspect of \MATITA{} is that of
836 adopting a (semi)-rigid naming convention for identifiers, derived by 
837 our studies about metadata for statements. 
838 The convention is only applied to identifiers for theorems 
839 (not definitions), and relates the name of a proof to its statement.
840 The basic rules are the following:
841 \begin{itemize}
842 \item each identifier is composed by an ordered list of (short)
843 names occurring in a left to right traversal of the statement; 
844 \item all identifiers should (but this is not strictly compulsory) 
845 separated by an underscore,
846 \item identifiers in two different hypothesis, or in an hypothesis
847 and in the conlcusion must be separated by the string ``\verb+_to_+'';
848 \item the identifier may be followed by a numerical suffix, or a
849 single or duoble apostrophe.
850
851 \end{itemize}
852 Take for instance the theorem
853 \[\forall n:nat. n = plus \; n\; O\]
854 Possible legal names are: \verb+plus_n_O+, \verb+plus_O+, 
855 \verb+eq_n_plus_n_O+ and so on. 
856 Similarly, consider the theorem 
857 \[\forall n,m:nat. n<m \to n \leq m\]
858 In this case \verb+lt_to_le+ is a legal name, 
859 while \verb+lt_le+ is not.\\
860 But what about, say, the symmetric law of equality? Probably you would like 
861 to name such a theorem with something explicitly recalling symmetry.
862 The correct approach, 
863 in this case, is the following. You should start with defining the 
864 symmetric property for relations
865
866 \[definition\;symmetric\;= \lambda A:Type.\lambda R.\forall x,y:A.R x y \to R y x \]
867
868 Then, you may state the symmetry of equality as
869 \[ \forall A:Type. symmetric \;A\;(eq \; A)\]
870 and \verb+symmetric_eq+ is valid \MATITA{} name for such a theorem. 
871 So, somehow unexpectedly, the introduction of semi-rigid naming convention
872 has an important benefical effect on the global organization of the library, 
873 forcing the user to define abstract notions and properties before 
874 using them (and formalizing such use).
875
876 Two cases have a special treatment. The first one concerns theorems whose
877 conclusion is a (universally quantified) predicate variable, i.e. 
878 theorems of the shape
879 $\forall P,\dots.P(t)$.
880 In this case you may replace the conclusion with the word
881 ``elim'' or ``case''.
882 For instance the name \verb+nat_elim2+ is a legal name for the double
883 induction principle.
884
885 The other special case is that of statements whose conclusion is a
886 match expression. 
887 A typical example is the following
888 \begin{verbatim}
889   \forall n,m:nat. 
890       match (eqb n m) with
891         [ true  \Rightarrow n = m 
892         | false \Rightarrow n \neq m]
893 \end{verbatim}
894 where $eqb$ is boolean equality.
895 In this cases, the name can be build starting from the matched
896 expression and the suffix \verb+_to_Prop+. In the above example, 
897 \verb+eqb_to_Prop+ is accepted. 
898
899 \section{The \MATITA{} user interface}
900
901 \subsection{Disambiguation}
902 \label{sec:disambiguation}
903
904 Software applications that involve input of mathematical content should strive
905 to require the user as less drift from informal mathematics as possible. We
906 believe this to be a fundamental aspect of such applications user interfaces.
907 Being that drift in general very large when inputing
908 proofs~\cite{debrujinfactor}, in \MATITA{} we achieved good results for
909 mathematical formulae which can be input using a \TeX-like encoding (the
910 concrete syntax corresponding to presentation level terms) and are then
911 translated (in multiple steps) to partially specified terms as sketched in
912 Sect.~\ref{sec:contentintro}.
913
914 The key component of the translation is the generic disambiguation algorithm
915 implemented in the \texttt{disambiguation} component of Fig.~\ref{fig:libraries}
916 and presented in~\cite{disambiguation}. In this section we present how to use
917 such an algorithm in the context of the development of a library of formalized
918 mathematics. We will see that using multiple passes of the algorithm, varying
919 some of its parameters, helps in keeping the input terse without sacrificing
920 expressiveness.
921
922 \subsubsection{Disambiguation aliases}
923 \label{aliases}
924 Let's start with the definition of the ``strictly greater then'' notion over
925 (Peano) natural numbers.
926
927 \begin{grafite}
928 include "nat/nat.ma".
929 ..
930 definition gt: nat \to nat \to Prop \def
931   \lambda n, m. m < n.
932 \end{grafite}
933
934 The \texttt{include} statement adds the requirement that the part of the library
935 defining the notion of natural numbers should be defined before
936 processing the what follows. Note indeed that the algorithm presented
937 in~\cite{disambiguation} does not describe where interpretations for ambiguous
938 expressions come from, since it is application-specific. As a first
939 approximation, we will assume that in \MATITA{} they come from the library (i.e.
940 all interpretations available in the library are used) and the \texttt{include}
941 statements are used to ensure the availability of required library slices (see
942 Sect.~\ref{sec:libmanagement}).
943
944 While processing the \texttt{gt} definition, \MATITA{} has to disambiguate two
945 terms: its type and its body. Being available in the required library only one
946 interpretation both for the unbound identifier \texttt{nat} and for the
947 \OP{<} operator, and being the resulting partially specified term refinable,
948 both type and body are easily disambiguated.
949
950 Now suppose we have defined integers as signed natural numbers, and that we want
951 to prove a theorem about an order relationship already defined on them (which of
952 course overload the \OP{<} operator):
953
954 \begin{grafite}
955 include "Z/z.ma".
956 ..
957 theorem Zlt_compat:
958   \forall x, y, z. x < y \to y < z \to x < z.
959 \end{grafite}
960
961 Since integers are defined on top of natural numbers, the part of the library
962 concerning the latters is available when disambiguating \texttt{Zlt\_compat}'s
963 type. Thus, according to the disambiguation algorithm, two different partially
964 specified terms could be associated to it. At first, this might not be seen as a
965 problem, since the user is asked and can choose interactively which of the two
966 she had in mind. However in the long run it has the drawbacks of inhibiting
967 batch compilation of the library (a technique used in \MATITA{} for behind the
968 scene compilation when needed, e.g. when an \texttt{include} is issued) and
969 yields to poor user interaction (imagine how tedious would be to be asked for a
970 choice each time you re-evaluate \texttt{Zlt\_compat}!).
971
972 For this reason we added to \MATITA{} the concept of \emph{disambiguation
973 aliases}. Disambiguation aliases are one-to-many mappings from ambiguous
974 expressions to partially specified terms, which are part of the runtime status
975 of \MATITA. They can be provided by users with the \texttt{alias} statement, but
976 are usually automatically added when evaluating \texttt{include} statements
977 (\emph{implicit aliases}). Aliases implicitely inferred during disambiguation
978 are remembered as well. Moreover, \MATITA{} does it best to ensure that terms
979 which require interactive choice are saved in batch compilable format. Thus,
980 after evaluating the above theorem the script will be changed to the following
981 snippet (assuming that the interpretation of \OP{<} over integers has been
982 choosed):
983
984 \begin{grafite}
985 alias symbol "lt" = "integer 'less than'".
986 theorem Zlt_compat:
987   \forall x, y, z. x < y \to y < z \to x < z.
988 \end{grafite}
989
990 But how are disambiguation aliases used? Since they come from the parts of the
991 library explicitely included we may be tempted of using them as the only
992 available interpretations. This would speed up the disambiguation, but may fail.
993 Consider for example:
994
995 \begin{grafite}
996 theorem lt_mono: \forall x, y, k. x < y \to x < y + k.
997 \end{grafite}
998
999 and suppose that the \OP{+} operator is defined only on natural numbers. If
1000 the alias for \OP{<} points to the integer version of the operator, no
1001 refinable partially specified term matching the term could be found.
1002
1003 For this reason we choosed to attempt \emph{multiple disambiguation passes}. A
1004 first pass attempt to disambiguate using the last available disambiguation
1005 aliases (\emph{mono aliases} pass), in case of failure the next pass try again
1006 the disambiguation forgetting the aliases and using the whole library to
1007 retrieve interpretation for ambiguous expressions (\emph{library aliases} pass).
1008 Since the latter pass may lead to too many choices we intertwined an additional
1009 pass among the two which use as interpretations all the aliases coming for
1010 included parts of the library (\emph{multi aliases} phase). This is the reason
1011 why aliases are \emph{one-to-many} mappings instead of one-to-one. This choice
1012 turned out to be a well-balanced trade-off among performances (earlier passes
1013 fail quickly) and degree of ambiguity supported for presentation level terms.
1014
1015 \subsubsection{Operator instances}
1016
1017 Let's suppose now we want to define a theorem relating ordering relations on
1018 natural and integer numbers. The way we would like to write such a theorem (as
1019 we can read it in the \MATITA{} standard library) is:
1020
1021 \begin{grafite}
1022 include "Z/z.ma".
1023 include "nat/orders.ma".
1024 ..
1025 theorem lt_to_Zlt_pos_pos:
1026   \forall n, m: nat. n < m \to pos n < pos m. 
1027 \end{grafite}
1028
1029 Unfortunately, none of the passes described above is able to disambiguate its
1030 type, no matter how aliases are defined. This is because the \OP{<} operator
1031 occurs twice in the content level term (it has two \emph{instances}) and two
1032 different interpretations for it have to be used in order to obtain a refinable
1033 partially specified term. To address this issue, we have the ability to consider
1034 each instance of a single symbol as a different ambiguous expression in the
1035 content level term, and thus we can assign a different interpretation to each of
1036 them. A disambiguation pass which exploit this feature is said to be using
1037 \emph{fresh instances}.
1038
1039 Fresh instances lead to a non negligible performance loss (since the choice of
1040 an interpretation for one instances does not constraint the choice for the
1041 others). For this reason we always attempt a fresh instances pass only after
1042 attempting a non-fresh one.
1043
1044 \subsubsection{Implicit coercions}
1045
1046 Let's now consider a (rather hypothetical) theorem about derivation:
1047
1048 \begin{grafite}
1049 theorem power_deriv:
1050   \forall n: nat, x: R. d x ^ n dx = n * x ^ (n - 1).
1051 \end{grafite}
1052
1053 and suppose there exists a \texttt{R \TEXMACRO{to} nat \TEXMACRO{to} R}
1054 interpretation for \OP{\^}, and a real number interpretation for \OP{*}.
1055 Mathematichians would write the term that way since it is well known that the
1056 natural number \texttt{n} could be ``injected'' in \IR{} and considered a real
1057 number for the purpose of real multiplication. The refiner of \MATITA{} supports
1058 \emph{implicit coercions} for this reason: given as input the above content
1059 level term, it will return a partially specified term where in place of
1060 \texttt{n} the application of a coercion from \texttt{nat} to \texttt{R} appears
1061 (assuming it has been defined as such of course).
1062
1063 Nonetheless coercions are not always desirable. For example, in disambiguating
1064 \texttt{\TEXMACRO{forall} x: nat. n < n + 1} we don't want the term which uses
1065 two coercions from \texttt{nat} to \texttt{R} around \OP{<} arguments to show up
1066 among the possible partially specified term choices. For this reason in
1067 \MATITA{} we always try first a disambiguation pass which require the refiner
1068 not to use the coercions and only in case of failure we attempt a
1069 coercion-enabled pass.
1070
1071 It is interesting to observe also the relationship among operator instances and
1072 implicit coercions. Consider again the theorem \texttt{lt\_to\_Zlt\_pos\_pos},
1073 which \MATITA{} disambiguated using fresh instances. In case there exists a
1074 coercion from natural numbers to (positive) integers (which indeed does, it is
1075 the \texttt{pos} constructor itself), the theorem can be disambiguated using
1076 twice that coercion on the left hand side of the implication. The obtained
1077 partially specified term however would not probably be the expected one, being a
1078 theorem which prove a trivial implication. For this reason we choose to always
1079 prefer fresh instances over implicit coercions, i.e. we always attempt
1080 disambiguation passes with fresh instances and no implicit coercions before
1081 attempting passes with implicit coercions.
1082
1083 \subsubsection{Disambiguation passes}
1084
1085 Summarizing, we perform multiple disambiguation passes for each presentation
1086 level term and in each of them we have 3 degree of freedom: disambiguation
1087 aliases (mono/multi/library), operator instances (shared/fresh), and implicit
1088 coercions (enabled/disabled). This would lead to up to 12 different
1089 disambiguation passes with ordering to be decided upon. Our choice in \MATITA{}
1090 is depicted in Tab.~\ref{tab:disambpasses}.
1091
1092 \TODO{spiegazione della tabella}
1093
1094 \begin{table}
1095  \caption{Disambiguation passes.\strut}
1096  \label{tab:disambpasses} 
1097  \footnotesize
1098  \begin{center}
1099   \begin{tabular}{c|c|c|c}
1100    \multicolumn{1}{p{1.5cm}|}{\centering\raisebox{-1.5ex}{\textbf{Pass}}}
1101    & \multicolumn{1}{p{3.1cm}|}{\centering\textbf{Disambiguation aliases}}
1102    & \multicolumn{1}{p{2.5cm}|}{\centering\textbf{Operator instances}}
1103    & \multicolumn{1}{p{2.5cm}}{\centering\textbf{Implicit coercions}} \\
1104    \hline
1105    \PASS & Mono aliases   & Shared          & Disabled \\
1106    \PASS & Multi aliases  & Shared          & Disabled \\
1107    \PASS & Mono aliases   & Fresh instances & Disabled \\
1108    \PASS & Multi aliases  & Fresh instances & Disabled \\
1109    \PASS & Mono aliases   & Fresh instances & Enabled  \\
1110    \PASS & Multi aliases  & Fresh instances & Enabled  \\
1111    \PASS & Library aliases& Fresh instances & Enabled
1112   \end{tabular}
1113  \end{center}
1114 \end{table}
1115
1116 \TODO{alias one shot}
1117
1118
1119
1120
1121
1122
1123
1124 \subsection{Patterns}
1125
1126 serve una intro che almeno cita il widget (per i patterns) e che fa
1127 il resoconto delle cose che abbiamo e che non descriviamo,
1128 sottolineando che abbiamo qualcosa da dire sui pattern e sui
1129 tattichini.\\
1130
1131 Patterns are the textual counterpart of the MathML widget graphical
1132 selection.
1133
1134 \MATITA{} benefits of a graphical interface and a powerful MathML rendering
1135 widget that allows the user to select pieces of the sequent he is working
1136 on. While this is an extremely intuitive way for the user to
1137 restrict the application of tactics, for example, to some subterms of the
1138 conclusion or some hypothesis, the way this action is recorded to the text
1139 script is not obvious.\\
1140 In \MATITA{} this issue is addressed by patterns.
1141
1142 \subsubsection{Pattern syntax}
1143 A pattern is composed of two terms: a $\NT{sequent\_path}$ and a
1144 $\NT{wanted}$.
1145 The former mocks-up a sequent, discharging unwanted subterms with $?$ and
1146 selecting the interesting parts with the placeholder $\%$. 
1147 The latter is a term that lives in the context of the placeholders.
1148
1149 The concrete syntax is reported in table \ref{tab:pathsyn}
1150 \NOTE{uso nomi diversi dalla grammatica ma che hanno + senso}
1151 \begin{table}
1152  \caption{\label{tab:pathsyn} Concrete syntax of \MATITA{} patterns.\strut}
1153 \hrule
1154 \[
1155 \begin{array}{@{}rcll@{}}
1156   \NT{pattern} & 
1157     ::= & [~\verb+in match+~\NT{wanted}~]~[~\verb+in+~\NT{sequent\_path}~] & \\
1158   \NT{sequent\_path} & 
1159     ::= & \{~\NT{ident}~[~\verb+:+~\NT{multipath}~]~\}~
1160       [~\verb+\vdash+~\NT{multipath}~] & \\
1161   \NT{wanted} & ::= & \NT{term} & \\
1162   \NT{multipath} & ::= & \NT{term\_with\_placeholders} & \\
1163 \end{array}
1164 \]
1165 \hrule
1166 \end{table}
1167
1168 \subsubsection{How patterns work}
1169 Patterns mimic the user's selection in two steps. The first one
1170 selects roots (subterms) of the sequent, using the
1171 $\NT{sequent\_path}$,  while the second 
1172 one searches the $\NT{wanted}$ term starting from these roots. Both are
1173 optional steps, and by convention the empty pattern selects the whole
1174 conclusion.
1175
1176 \begin{description}
1177 \item[Phase 1]
1178   concerns only the $[~\verb+in+~\NT{sequent\_path}~]$
1179   part of the syntax. $\NT{ident}$ is an hypothesis name and
1180   selects the assumption where the following optional $\NT{multipath}$
1181   will operate. \verb+\vdash+ can be considered the name for the goal.
1182   If the whole pattern is omitted, the whole goal will be selected.
1183   If one or more hypotheses names are given the selection is restricted to 
1184   these assumptions. If a $\NT{multipath}$ is omitted the whole
1185   assumption is selected. Remember that the user can be mostly
1186   unaware of this syntax, since the system is able to write down a 
1187   $\NT{sequent\_path}$ starting from a visual selection.
1188   \NOTE{Questo ancora non va in matita}
1189
1190   A $\NT{multipath}$ is a CiC term in which a special constant $\%$
1191   is allowed.
1192   The roots of discharged subterms are marked with $?$, while $\%$
1193   is used to select roots. The default $\NT{multipath}$, the one that
1194   selects the whole term, is simply $\%$.
1195   Valid $\NT{multipath}$ are, for example, $(?~\%~?)$ or $\%~\verb+\to+~(\%~?)$
1196   that respectively select the first argument of an application or
1197   the source of an arrow and the head of the application that is
1198   found in the arrow target.
1199
1200   The first phase selects not only terms (roots of subterms) but also 
1201   their context that will be eventually used in the second phase.
1202
1203 \item[Phase 2] 
1204   plays a role only if the $[~\verb+in match+~\NT{wanted}~]$
1205   part is specified. From the first phase we have some terms, that we
1206   will see as subterm roots, and their context. For each of these
1207   contexts the $\NT{wanted}$ term is disambiguated in it and the
1208   corresponding root is searched for a subterm $\alpha$-equivalent to
1209   $\NT{wanted}$. The result of this search is the selection the
1210   pattern represents.
1211
1212 \end{description}
1213
1214 \noindent
1215 Since the first step is equipotent to the composition of the two
1216 steps, the system uses it to represent each visual selection.
1217 The second step is only meant for the
1218 experienced user that writes patterns by hand, since it really
1219 helps in writing concise patterns as we will see in the
1220 following examples.
1221
1222 \subsubsection{Examples}
1223 To explain how the first step works let's give an example. Consider
1224 you want to prove the uniqueness of the identity element $0$ for natural
1225 sum, and that you can relay on the previously demonstrated left
1226 injectivity of the sum, that is $inj\_plus\_l:\forall x,y,z.x+y=z+y \to x =z$.
1227 Typing
1228 \begin{grafite}
1229 theorem valid_name: \forall n,m. m + n = n \to m = O.
1230   intros (n m H).
1231 \end{grafite}
1232 \noindent
1233 leads you to the following sequent 
1234 \sequent{
1235 n:nat\\
1236 m:nat\\
1237 H: m + n = n}{
1238 m=O
1239 }
1240 \noindent
1241 where you want to change the right part of the equivalence of the $H$
1242 hypothesis with $O + n$ and then use $inj\_plus\_l$ to prove $m=O$.
1243 \begin{grafite}
1244   change in H:(? ? ? %) with (O + n).
1245 \end{grafite}
1246 \noindent
1247 This pattern, that is a simple instance of the $\NT{sequent\_path}$
1248 grammar entry, acts on $H$ that has type (without notation) $(eq~nat~(m+n)~n)$
1249 and discharges the head of the application and the first two arguments with a
1250 $?$ and selects the last argument with $\%$. The syntax may seem uncomfortable,
1251 but the user can simply select with the mouse the right part of the equivalence
1252 and left to the system the burden of writing down in the script file the
1253 corresponding pattern with $?$ and $\%$ in the right place (that is not
1254 trivial, expecially where implicit arguments are hidden by the notation, like
1255 the type $nat$ in this example).
1256
1257 Changing all the occurrences of $n$ in the hypothesis $H$ with $O+n$ 
1258 works too and can be done, by the experienced user, writing directly
1259 a simpler pattern that uses the second phase.
1260 \begin{grafite}
1261   change in match n in H with (O + n).
1262 \end{grafite}
1263 \noindent
1264 In this case the $\NT{sequent\_path}$ selects the whole $H$, while
1265 the second phase searches the wanted $n$ inside it by
1266 $\alpha$-equivalence. The resulting
1267 equivalence will be $m+(O+n)=O+n$ since the second phase found two
1268 occurrences of $n$ in $H$ and the tactic changed both.
1269
1270 Just for completeness the second pattern is equivalent to the
1271 following one, that is less readable but uses only the first phase.
1272 \begin{grafite}
1273   change in H:(? ? (? ? %) %) with (O + n).
1274 \end{grafite}
1275 \noindent
1276
1277 \subsubsection{Tactics supporting patterns}
1278 In \MATITA{} all the tactics that can be restricted to subterm of the working
1279 sequent accept the pattern syntax. In particular these tactics are: simplify,
1280 change, fold, unfold, generalize, replace and rewrite.
1281
1282 \NOTE{attualmente rewrite e fold non supportano phase 2. per
1283 supportarlo bisogna far loro trasformare il pattern phase1+phase2 
1284 in un pattern phase1only come faccio nell'ultimo esempio. lo si fa
1285 con una pattern\_of(select(pattern))}
1286
1287 \subsubsection{Comparison with \COQ{}}
1288 \COQ{} has a two diffrent ways of restricting the application of tactis to
1289 subterms of the sequent, both relaying on the same special syntax to identify
1290 a term occurrence.
1291
1292 The first way is to use this special syntax to specify directly to the
1293 tactic the occurrnces of a wanted term that should be affected, while
1294 the second is to prepare the sequent with another tactic called
1295 pattern and the apply the real tactic. Note that the choice is not
1296 left to the user, since some tactics needs the sequent to be prepared
1297 with pattern and do not accept directly this special syntax.
1298
1299 The base idea is that to identify a subterm of the sequent we can
1300 write it and say that we want, for example, the third and the fifth
1301 occurce of it (counting from left to right). In our previous example,
1302 to change only the left part of the equivalence, the correct command
1303 is
1304 \begin{grafite}
1305   change n at 2 in H with (O + n)
1306 \end{grafite} 
1307 \noindent
1308 meaning that in the hypothesis $H$ the $n$ we want to change is the
1309 second we encounter proceeding from left toright.
1310
1311 The tactic pattern computes a
1312 $\beta$-expansion of a part of the sequent with respect to some
1313 occurrences of the given term. In the previous example the following
1314 command
1315 \begin{grafite}
1316   pattern n at 2 in H
1317 \end{grafite}
1318 \noindent
1319 would have resulted in this sequent
1320 \begin{grafite}
1321   n : nat
1322   m : nat
1323   H : (fun n0 : nat => m + n = n0) n
1324   ============================
1325    m = 0
1326 \end{grafite}
1327 \noindent
1328 where $H$ is $\beta$-expanded over the second $n$
1329 occurrence. This is a trick to make the unification algorithm ignore
1330 the head of the application (since the unification is essentially
1331 first-order) but normally operate on the arguments. 
1332 This works for some tactics, like rewrite and replace,
1333 but for example not for change and other tactics that do not relay on
1334 unification. 
1335
1336 The idea behind this way of identifying subterms in not really far
1337 from the idea behind patterns, but really fails in extending to
1338 complex notation, since it relays on a mono-dimensional sequent representation.
1339 Real math notation places arguments upside-down (like in indexed sums or
1340 integrations) or even puts them inside a bidimensional matrix.  
1341 In these cases using the mouse to select the wanted term is probably the 
1342 only way to tell the system exactly what you want to do. 
1343
1344 One of the goals of \MATITA{} is to use modern publishing techiques, and
1345 adopting a method for restricting tactics application domain that discourages 
1346 using heavy math notation, would definitively be a bad choice.
1347
1348
1349 \subsection{Tacticals}
1350 There are mainly two kinds of languages used by proof assistants to recorder
1351 proofs: tactic based and declarative. We will not investigate the philosophy
1352 aroud the choice that many proof assistant made, \MATITA{} included, and we
1353 will not compare the two diffrent approaches. We will describe the common
1354 issues of the tactic-based language approach and how \MATITA{} tries to solve
1355 them.
1356
1357 \subsubsection{Tacticals overview}
1358
1359 Tacticals first appeared in LCF and can be seen as programming
1360 constructs, like looping, branching, error recovery or sequential composition.
1361 The following simple example shows three tacticals in action
1362 \begin{grafite}
1363 theorem trivial: 
1364   \forall A,B:Prop. 
1365     A = B \to ((A \to B) \land (B \to A)).
1366   intros (A B H).
1367   split; intro; 
1368     [ rewrite < H. assumption.
1369     | rewrite > H. assumption.
1370     ]
1371 qed.
1372 \end{grafite}
1373
1374 The first is ``\texttt{;}'' that combines the tactic \texttt{split}
1375 with \texttt{intro}, applying the latter to each goal opened by the
1376 former. Then we have ``\texttt{[}'' that branches on the goals (here
1377 we have two goals, the two sides of the logic and).
1378 The first goal $B$ (with $A$ in the context)
1379 is proved by the first sequence of tactics
1380 \texttt{rewrite} and \texttt{assumption}. Then we move to the second
1381 goal with the separator ``\texttt{|}''. The last tactical we see here
1382 is ``\texttt{.}'' that is a sequential composition that selects the
1383 first goal opened for the following tactic (instead of applying it to
1384 them all like ``\texttt{;}''). Note that usually ``\texttt{.}'' is
1385 not considered a tactical, but a sentence terminator (i.e. the
1386 delimiter of commands the proof assistant executes).
1387
1388 Giving serious examples here is rather difficult, since they are hard
1389 to read without the interactive tool. To help the reader in
1390 understanding the following considerations we just give few common
1391 usage examples without a proof context.
1392
1393 \begin{grafite}
1394   elim z; try assumption; [ ... | ... ].
1395   elim z; first [ assumption | reflexivity | id ].
1396 \end{grafite}
1397
1398 The first example goes by induction on a term \texttt{z} and applies
1399 the tactic \texttt{assumption} to each opened goal eventually recovering if
1400 \texttt{assumption} fails. Here we are asking the system to close all
1401 trivial cases and then we branch on the remaining with ``\texttt{[}''.
1402 The second example goes again by induction on \texttt{z} and tries to
1403 close each opened goal first with \texttt{assumption}, if it fails it
1404 tries \texttt{reflexivity} and finally \texttt{id}
1405 that is the tactic that leaves the goal untouched without failing. 
1406
1407 Note that in the common implementation of tacticals both lines are
1408 compositions of tacticals and in particular they are a single
1409 statement (i.e. derived from the same non terminal entry of the
1410 grammar) ended with ``\texttt{.}''. As we will see later in \MATITA{}
1411 this is not true, since each atomic tactic or punctuation is considered 
1412 a single statement.
1413
1414 \subsubsection{Common issues of tactic(als)-based proof languages}
1415 We will examine the two main problems of tactic(als)-based proof script:
1416 maintainability and readability. 
1417
1418 Huge libraries of formal mathematics have been developed, and backward
1419 compatibility is a really time consuming task. \\
1420 A real-life example in the history of \MATITA{} was the reordering of
1421 goals opened by a tactic application. We noticed that some tactics
1422 were not opening goals in the expected order. In particular the
1423 \texttt{elim} tactic on a term of an inductive type with constructors
1424 $c_1, \ldots, c_n$ used to open goals in order $g_1, g_n, g_{n-1}
1425 \ldots, g_2$. The library of \MATITA{} was still in an embryonic state
1426 but some theorems about integers were there. The inductive type of
1427 $\mathcal{Z}$ has three constructors: $zero$, $pos$ and $neg$. All the
1428 induction proofs on this type where written without tacticals and,
1429 obviously, considering the three induction cases in the wrong order.
1430 Fixing the behavior of the tactic broke the library and two days of
1431 work were needed to make it compile again. The whole time was spent in
1432 finding the list of tactics used to prove the third induction case and
1433 swap it with the list of tactics used to prove the second case.  If
1434 the proofs was structured with the branch tactical this task could
1435 have been done automatically. 
1436
1437 From this experience we learned that the use of tacticals for
1438 structuring proofs gives some help but may have some drawbacks in
1439 proof script readability. We must highlight that proof scripts
1440 readability is poor by itself, but in conjunction with tacticals it
1441 can be nearly impossible. The main cause is the fact that in proof
1442 scripts there is no trace of what you are working on. It is not rare
1443 for two different theorems to have the same proof script (while the
1444 proof is completely different).\\
1445 Bad readability is not a big deal for the user while he is
1446 constructing the proof, but is considerably a problem when he tries to
1447 reread what he did or when he shows his work to someone else.  The
1448 workaround commonly used to read a script is to execute it again
1449 step-by-step, so that you can see the proof goal changing and you can
1450 follow the proof steps. This works fine until you reach a tactical.  A
1451 compound statement, made by some basic tactics glued with tacticals,
1452 is executed in a single step, while it obviously performs lot of proof
1453 steps.  In the fist example of the previous section the whole branch
1454 over the two goals (respectively the left and right part of the logic
1455 and) result in a single step of execution. The workaround doesn't work
1456 anymore unless you de-structure on the fly the proof, putting some
1457 ``\texttt{.}'' where you want the system to stop.\\
1458
1459 Now we can understand the tradeoff between script readability and
1460 proof structuring with tacticals. Using tacticals helps in maintaining
1461 scripts, but makes it really hard to read them again, cause of the way
1462 they are executed.
1463
1464 \MATITA{} uses a language of tactics and tacticals, but tries to avoid
1465 this tradeoff, alluring the user to write structured proof without
1466 making it impossible to read them again.
1467
1468 \subsubsection{The \MATITA{} approach: Tinycals}
1469
1470 \begin{table}
1471  \caption{\label{tab:tacsyn} Concrete syntax of \MATITA{} tacticals.\strut}
1472 \hrule
1473 \[
1474 \begin{array}{@{}rcll@{}}
1475   \NT{punctuation} & 
1476     ::= & \SEMICOLON \quad|\quad \DOT \quad|\quad \SHIFT \quad|\quad \BRANCH \quad|\quad \MERGE \quad|\quad \POS{\mathrm{NUMBER}~} & \\
1477   \NT{block\_kind} & 
1478     ::= & \verb+focus+ ~|~ \verb+try+ ~|~ \verb+solve+ ~|~ \verb+first+ ~|~ \verb+repeat+ ~|~ \verb+do+~\mathrm{NUMBER} & \\
1479   \NT{block\_delimiter} & 
1480     ::= & \verb+begin+ ~|~ \verb+end+ & \\
1481   \NT{tactical} & 
1482     ::= & \verb+skip+ ~|~ \NT{tactic} ~|~ \NT{block\_delimiter} ~|~ \NT{block\_kind} ~|~ \NT{punctuation} ~|~& \\
1483 \end{array}
1484 \]
1485 \hrule
1486 \end{table}
1487
1488 \MATITA{} tacticals syntax is reported in table \ref{tab:tacsyn}.
1489 While one would expect to find structured constructs like 
1490 $\verb+do+~n~\NT{tactic}$ the syntax allows pieces of tacticals to be written.
1491 This is essential for base idea behind matita tacticals: step-by-step execution.
1492
1493 The low-level tacticals implementation of \MATITA{} allows a step-by-step
1494 execution of a tactical, that substantially means that a $\NT{block\_kind}$ is
1495 not executed as an atomic operation. This has two major benefits for the user,
1496 even being a so simple idea:
1497 \begin{description}
1498 \item[Proof structuring] 
1499   is much easier. Consider for example a proof by induction, and imagine you
1500   are using classical tacticals in one of the state of the
1501   art graphical interfaces for proof assistant like Proof General or \COQIDE.
1502   After applying the induction principle you have to choose: structure
1503   the proof or not. If you decide for the former you have to branch with
1504   ``\texttt{[}'' and write tactics for all the cases separated by 
1505   ``\texttt{|}'' and then close the tactical with ``\texttt{]}''. 
1506   You can replace most of the cases by the identity tactic just to
1507   concentrate only on the first goal, but you will have to go one step back and
1508   one further every time you add something inside the tactical. Again this is
1509   caused by the one step execution of tacticals and by the fact that to modify
1510   the already executed script you have to undo one step.
1511   And if you are board of doing so, you will finish in giving up structuring
1512   the proof and write a plain list of tactics.\\
1513   With step-by-step tacticals you can apply the induction principle, and just
1514   open the branching tactical ``\texttt{[}''. Then you can interact with the
1515   system reaching a proof of the first case, without having to specify any
1516   tactic for the other goals. When you have proved all the induction cases, you
1517   close the branching tactical with ``\texttt{]}'' and you are done with a 
1518   structured proof. \\
1519   While \MATITA{} tacticals help in structuring proofs they allow you to 
1520   choose the amount of structure you want. There are no constraints imposed by
1521   the system, and if the user wants he can even write completely plain proofs.
1522   
1523 \item[Rereading]
1524   is possible. Going on step by step shows exactly what is going on.  Consider
1525   again a proof by induction, that starts applying the induction principle and
1526   suddenly branches with a ``\texttt{[}''. This clearly separates all the
1527   induction cases, but if the square brackets content is executed in one single
1528   step you completely loose the possibility of rereading it and you have to
1529   temporary remove the branching tactical to execute in a satisfying way the
1530   branches.  Again, executing step-by-step is the way you would like to review
1531   the demonstration. Remember that understanding the proof from the script is
1532   not easy, and only the execution of tactics (and the resulting transformed
1533   goal) gives you the feeling of what is going on.
1534 \end{description}
1535
1536 \section{The \MATITA{} library}
1537
1538 \MATITA{} is \COQ{} compatible, in the sense that every theorem of \COQ{}
1539 can be read, checked and referenced in further developments. 
1540 However, in order to test the actual usability of the system, a
1541 new library of results has been started from scratch. In this case, 
1542 of course, we wrote (and offer) the source script files, 
1543 while, in the case of \COQ, \MATITA{} may only rely on XML files of
1544 \COQ{} objects. 
1545 The current library just comprises about one thousand theorems in 
1546 elementary aspects of arithmetics up to the multiplicative property for 
1547 Eulers' totient function $\phi$.
1548 The library is organized in five main directories: $logic$ (connectives,
1549 quantifiers, equality, $\dots$), $datatypes$ (basic datatypes and type 
1550 constructors), $nat$ (natural numbers), $Z$ (integers), $Q$ (rationals).
1551 The most complex development is $nat$, organized in 25 scripts, listed
1552 in Figure\ref{scripts}
1553 \begin{figure}[htb]
1554 $\begin{array}{lll}
1555 nat.ma    & plus.ma & times.ma  \\
1556 minus.ma  & exp.ma  & compare.ma \\
1557 orders.ma & le\_arith.ma &  lt\_arith.ma \\   
1558 factorial.ma & sigma\_and\_pi.ma & minimization.ma  \\
1559 div\_and\_mod.ma & gcd.ma & congruence.ma \\
1560 primes.ma & nth\_prime.ma & ord.ma\\
1561 count.ma  & relevant\_equations.ma & permutation.ma \\ 
1562 factorization.ma & chinese\_reminder.ma & fermat\_little\_th.ma \\     
1563 totient.ma& & \\
1564 \end{array}$
1565 \caption{\label{scripts}\MATITA{} scripts on natural numbers}
1566 \end{figure}
1567
1568 We do not plan to maintain the library in a centralized way, 
1569 as most of the systems do. On the contary we are currently
1570 developing wiki-technologies to support a collaborative 
1571 development of the library, encouraging people to expand, 
1572 modify and elaborate previous contributions.
1573
1574 \section{Conclusions}
1575
1576 \acknowledgements
1577 We would like to thank all the students that during the past
1578 five years collaborated in the \HELM{} project and contributed to 
1579 the development of \MATITA{}, and in particular
1580 M.~Galat\`a, A.~Griggio, F.~Guidi, P.~Di~Lena, L.~Padovani, I.~Schena, M.~Selmi,
1581 and V.~Tamburrelli.
1582
1583 \theendnotes
1584
1585 \bibliography{matita}
1586
1587 \end{document}
1588