]> matita.cs.unibo.it Git - helm.git/blob - helm/papers/matita/matita.tex
- begin{grafite} environment for script snippets
[helm.git] / helm / papers / matita / matita.tex
1 \documentclass[a4paper]{llncs}
2 \pagestyle{headings}
3 \usepackage{color}
4 \usepackage{graphicx}
5 \usepackage{amssymb,amsmath}
6 \usepackage{hyperref}
7 \usepackage{picins}
8 \usepackage{fancyvrb}
9
10 %\newcommand{\logo}[3]{
11 %\parpic(0cm,0cm)(#2,#3)[l]{\includegraphics[width=#1]{whelp-bw}}
12 %}
13
14 \newcommand{\AUTO}{\textsc{Auto}}
15 \newcommand{\COQ}{Coq}
16 \newcommand{\ELIM}{\textsc{Elim}}
17 \newcommand{\HELM}{Helm}
18 \newcommand{\HINT}{\textsc{Hint}}
19 \newcommand{\IN}{\ensuremath{\mathbb{N}}}
20 \newcommand{\INSTANCE}{\textsc{Instance}}
21 \newcommand{\IR}{\ensuremath{\mathbb{R}}}
22 \newcommand{\IZ}{\ensuremath{\mathbb{Z}}}
23 \newcommand{\LIBXSLT}{LibXSLT}
24 \newcommand{\LOCATE}{\textsc{Locate}}
25 \newcommand{\MATCH}{\textsc{Match}}
26 \newcommand{\MATITA}{Matita}
27 \newcommand{\METAHEADING}{Symbol & Position \\ \hline\hline}
28 \newcommand{\MOWGLI}{MoWGLI}
29 \newcommand{\NAT}{\ensuremath{\mathit{nat}}}
30 \newcommand{\NATIND}{\mathit{nat\_ind}}
31 \newcommand{\NUPRL}{NuPRL}
32 \newcommand{\OCAML}{OCaml}
33 \newcommand{\PROP}{\mathit{Prop}}
34 \newcommand{\REF}[3]{\ensuremath{\mathit{Ref}_{#1}(#2,#3)}}
35 \newcommand{\TEXMACRO}[1]{\texttt{\char92 #1}}
36 \newcommand{\UWOBO}{UWOBO}
37 \newcommand{\WHELP}{Whelp}
38
39 \definecolor{gray}{gray}{0.85} % 1 -> white; 0 -> black
40 \newcommand{\NT}[1]{\langle\mathit{#1}\rangle}
41 \newcommand{\URI}[1]{\texttt{#1}}
42
43 %{\end{SaveVerbatim}\setlength{\fboxrule}{.5mm}\setlength{\fboxsep}{2mm}%
44 \newenvironment{grafite}{\VerbatimEnvironment
45  \begin{SaveVerbatim}{boxtmp}}%
46  {\end{SaveVerbatim}\setlength{\fboxsep}{3mm}%
47   \begin{center}
48    \fcolorbox{black}{gray}{\BUseVerbatim[boxwidth=0.9\linewidth]{boxtmp}}
49   \end{center}}
50
51 \newcommand{\ASSIGNEDTO}[1]{\textbf{Assigned to:} #1}
52 \newcommand{\NOTE}[1]{\marginpar{\scriptsize #1}}
53 \newcommand{\TODO}[1]{\textbf{TODO: #1}}
54
55 \title{The Matita proof assistant}
56 \author{Andrea Asperti, Claudio Sacerdoti Coen, Enrico Tassi
57  and Stefano Zacchiroli}
58 \institute{Department of Computer Science, University of Bologna\\
59  Mura Anteo Zamboni, 7 --- 40127 Bologna, ITALY\\
60  \email{$\{$asperti,sacerdot,tassi,zacchiro$\}$@cs.unibo.it}}
61 \bibliographystyle{plain}
62
63 \begin{document}
64 \maketitle
65
66 \begin{abstract}
67 \end{abstract}
68
69 \section{Introduction}
70 \label{sec:intro}
71 {\em Matita} is the proof assistant under development by the \HELM{} team
72 \cite{mkm-helm} at the University of Bologna, under the direction of 
73 Prof.~Asperti. 
74 The origin of the system goes back to 1999. At the time we were mostly 
75 interested to develop tools and techniques to enhance the accessibility
76 via web of formal libraries of mathematics. Due to its dimension, the
77 library of the \COQ{} proof assistant (of the order of 35'000 theorems) 
78 was choosed as a privileged test bench for our work, although experiments
79 have been also conducted with other systems, and notably with \NUPRL{}.
80 The work, mostly performed in the framework of the recently concluded 
81 European project IST-33562 \MOWGLI{}~\cite{pechino}, mainly consisted in the 
82 following teps:
83 \begin{itemize}
84 \item exporting the information from the internal representation of
85  \COQ{} to a system and platform independent format. Since XML was at the 
86 time an emerging standard, we naturally adopted this technology, fostering
87 a content-based architecture for future system, where the documents
88 of the library were the the main components around which everything else 
89 has to be build;
90 \item developing indexing and searching techniques supporting semantic
91  queries to the library; these efforts gave birth to our \WHELP{}
92 search engine, described in~\cite{whelp};
93 \item developing languages and tools for a high-quality notational 
94 rendering of mathematical information; in particular, we have been 
95 active in the MathML Working group since 1999, and developed inside
96 \HELM{} a MathML-compliant widget for the GTK graphical environment
97 which can be integrated in any application.
98 \end{itemize}
99 The exportation issue, extensively discussed in \cite{exportation-module},
100 has several major implications worth to be discussed. 
101
102 The first
103 point concerns the kind of content information to be exported. In a
104 proof assistant like \COQ{}, proofs are represented in at least three clearly
105 distinguishable formats: \emph{scripts} (i.e. sequences of commands issued by the
106 user to the system during an interactive session of proof), \emph{proof objects}
107 (which is the low-level representation of proofs in the form of
108 lambda-terms readable to and checked by kernel) and \emph{proof-trees} (which
109 is a kind of intermediate representation, vaguely inspired by a sequent
110 like notation, that inherits most of the defects but essentially
111 none of the advantages of the previous representations). 
112 Partially related to this problem, there is the
113 issue of the {\em granularity} of the library: scripts usually comprise
114 small developments with many definitions and theorems, while 
115 proof objects correspond to individual mathemtical items. 
116
117 In our case, the choice of the content encoding was eventually dictated
118 by the methodological assumption of offering the information in a
119 stable and system-independent format. The language of scripts is too
120 oriented to \COQ, and it changes too rapidly to be of any interest
121 to third parties. On the other side, the language of proof objects 
122 merely depend on
123 the logical framework (the Calculus of Inductive Constructions, in
124 the case of \COQ), is grammatically simple, semantically clear and, 
125 especially, is very stable (as kernels of proof assistants 
126 often are). 
127 So the granularity of the library is at the level of individual 
128 objects, that also justifies from another point of view the need
129 for efficient searching techniques for retrieving individual 
130 logical items from the repository. 
131
132 The main (possibly only) problem with proof objects is that they are
133 difficult to read and do not directly correspond to what the user typed
134 in. An analogy frequently made in the proof assistant community is that of
135 comparing the vernacular language of scripts to a high level source language
136 and lambda terms to the assembly language they are compiled in. We do not
137 share this view and prefer to look at scripts as an imperative language, 
138 and to lambda terms as their denotational semantics; still, however,
139 denotational semantics is possibly more formal but surely not more readable 
140 than the imperative source.
141
142 For all the previous reasons, a huge amount of work inside \MOWGLI{} has
143 been devoted to automatic reconstruction of proofs in natural language
144 from lambda terms. Since lambda terms are in close connection 
145 with natural deduction 
146 (that is still the most natural logical language discovered so far)
147 the work is not hopeless as it may seem, especially if rendering
148 is combined, as in our case, with dynamic features supporting 
149 in-line expansions or contractions of subproofs. The final 
150 rendering is probably not entirely satisfactory (see \cite{ida} for a
151 discussion), but surely
152 readable (the actual quality largely depends by the way the lambda 
153 term is written). 
154
155 Summing up, we already disposed of the following tools/techniques:
156 \begin{itemize}
157 \item XML specifications for the Calculus of Inductive Constructions,
158 with tools for parsing and saving mathematical objects in such a format;
159 \item metadata specifications and tools for indexing and querying the
160 XML knowledge base;
161 \item a proof checker (i.e. the {\em kernel} of a proof assistant), 
162  implemented to check that we exported form the \COQ{} library all the 
163 logically relevant content;
164 \item a sophisticated parser (used by the search engine), able to deal 
165 with potentially ambiguous and incomplete information, typical of the 
166 mathematical notation \cite{};
167 \item a {\em refiner}, i.e. a type inference system, based on complex 
168 existential variables, used by the disambiguating parser;
169 \item complex transformation algorithms for proof rendering in natural
170 language;
171 \item an innovative rendering widget, supporting high-quality bidimensional
172 rendering, and semantic selection, i.e. the possibility to select semantically
173 meaningfull rendering expressions, and to past the respective content into
174 a different text area.
175 \NOTE{il widget\\ non ha sel\\ semantica}
176 \end{itemize}
177 Starting from all this, the further step of developing our own 
178 proof assistant was too
179 small and too tempting to be neglected. Essentially, we ``just'' had to
180 add an authoring interface, and a set of functionalities for the
181 overall management of the library, integrating everything into a
182 single system. \MATITA{} is the result of this effort. 
183
184 At first sight, \MATITA{} looks as (and partly is) a \COQ{} clone. This is
185 more the effect of the circumstances of its creation described 
186 above than the result of a deliberate design. In particular, we
187 (essentially) share the same foundational dialect of \COQ{} (the
188 Calculus of Inductive Constructions), the same implementative
189 language (\OCAML{}), and the same (script based) authoring philosophy.
190 However, as we shall see, the analogy essentially stops here. 
191
192 In a sense; we like to think of \MATITA{} as the way \COQ{} would 
193 look like if entirely rerwritten from scratch: just to give an
194 idea, although \MATITA{} currently supports almost all functionalities of
195 \COQ{}, it links 60'000 lins of \OCAML{} code, against ... of \COQ{} (and
196 we are convinced that, starting from scratch againg, we could furtherly
197 reduce our code in sensible way).\NOTE{righe\\\COQ{}}
198
199 \begin{itemize}
200  \item scelta del sistema fondazionale
201  \item sistema indipendente (da Coq)
202   \begin{itemize}
203    \item possibilit\`a di sperimentare (soluzioni architetturali, logiche,
204     implementative, \dots)
205    \item compatibilit\`a con sistemi legacy
206   \end{itemize}
207 \end{itemize}
208
209 \section{Features}
210
211 \subsection{mathml}
212 \ASSIGNEDTO{zack}
213
214 \subsection{metavariabili}
215 \ASSIGNEDTO{csc}
216
217 \subsection{pattern}
218 \ASSIGNEDTO{gares}
219
220 \subsection{tatticali}
221 \ASSIGNEDTO{gares}
222
223 \subsection{Disambiguation}
224 \label{sec:disambiguation}
225 \ASSIGNEDTO{zack}
226
227 \begin{table}
228  \caption{\label{tab:termsyn} Concrete syntax of CIC terms: built-in notation\strut}
229 \hrule
230 \[
231 \begin{array}{@{}rcll@{}}
232   \NT{term} & ::= & & \mbox{\bf terms} \\
233     &     & x & \mbox{(identifier)} \\
234     &  |  & n & \mbox{(number)} \\
235     &  |  & s & \mbox{(symbol)} \\
236     &  |  & \mathrm{URI} & \mbox{(URI)} \\
237     &  |  & \verb+?+ & \mbox{(implicit)} \\
238     &  |  & \verb+?+n~[\verb+[+~\{\NT{subst}\}~\verb+]+] & \mbox{(meta)} \\
239     &  |  & \verb+let+~\NT{ptname}~\verb+\def+~\NT{term}~\verb+in+~\NT{term} \\
240     &  |  & \verb+let+~\NT{kind}~\NT{defs}~\verb+in+~\NT{term} \\
241     &  |  & \NT{binder}~\{\NT{ptnames}\}^{+}~\verb+.+~\NT{term} \\
242     &  |  & \NT{term}~\NT{term} & \mbox{(application)} \\
243     &  |  & \verb+Prop+ \mid \verb+Set+ \mid \verb+Type+ \mid \verb+CProp+ & \mbox{(sort)} \\
244     &  |  & \verb+match+~\NT{term}~ & \mbox{(pattern matching)} \\
245     &     & ~ ~ [\verb+[+~\verb+in+~x~\verb+]+]
246               ~ [\verb+[+~\verb+return+~\NT{term}~\verb+]+] \\
247     &     & ~ ~ \verb+with [+~[\NT{rule}~\{\verb+|+~\NT{rule}\}]~\verb+]+ & \\
248     &  |  & \verb+(+~\NT{term}~\verb+:+~\NT{term}~\verb+)+ & \mbox{(cast)} \\
249     &  |  & \verb+(+~\NT{term}~\verb+)+ \\
250   \NT{defs}  & ::= & & \mbox{\bf mutual definitions} \\
251     &     & \NT{fun}~\{\verb+and+~\NT{fun}\} \\
252   \NT{fun} & ::= & & \mbox{\bf functions} \\
253     &     & \NT{arg}~\{\NT{ptnames}\}^{+}~[\verb+on+~x]~\verb+\def+~\NT{term} \\
254   \NT{binder} & ::= & & \mbox{\bf binders} \\
255     &     & \verb+\forall+ \mid \verb+\lambda+ \\
256   \NT{arg} & ::= & & \mbox{\bf single argument} \\
257     &     & \verb+_+ \mid x \\
258   \NT{ptname} & ::= & & \mbox{\bf possibly typed name} \\
259     &     & \NT{arg} \\
260     &  |  & \verb+(+~\NT{arg}~\verb+:+~\NT{term}~\verb+)+ \\
261   \NT{ptnames} & ::= & & \mbox{\bf bound variables} \\
262     &     & \NT{arg} \\
263     &  |  & \verb+(+~\NT{arg}~\{\verb+,+~\NT{arg}\}~[\verb+:+~\NT{term}]~\verb+)+ \\
264   \NT{kind} & ::= & & \mbox{\bf induction kind} \\
265     &     & \verb+rec+ \mid \verb+corec+ \\
266   \NT{rule} & ::= & & \mbox{\bf rules} \\
267     &     & x~\{\NT{ptname}\}~\verb+\Rightarrow+~\NT{term}
268 \end{array}
269 \]
270 \hrule
271 \end{table}
272
273 \subsubsection{Term input}
274
275 The primary form of user interaction employed by \MATITA{} is textual script
276 editing: the user modifies it and evaluate step by step its composing
277 \emph{statements}. Examples of statements are inductive type definitions,
278 theorem declarations, LCF-style tacticals, and macros (e.g. \texttt{Check} can
279 be used to ask the system to refine a given term and pretty print the result).
280 Since many statements refer to terms of the underlying calculus, \MATITA{} needs
281 a concrete syntax able to encode terms of the Calculus of Inductive
282 Constructions.
283
284 Two of the requirements in the design of such a syntax are apparently in
285 contrast:
286 \begin{enumerate}
287  \item the syntax should be as close as possible to common mathematical practice
288   and implement widespread mathematical notations;
289  \item each term described by the syntax should be non-ambiguous meaning that it
290   should exists a function which associates to it a CIC term.
291 \end{enumerate}
292
293 These two requirements are addressed in \MATITA{} by the mean of two mechanisms
294 which work together: \emph{term disambiguation} and \emph{extensible notation}.
295 Their interaction is visible in the architecture of the \MATITA{} input phase,
296 depicted in Fig.~\ref{fig:inputphase}. The architecture is articulated as a
297 pipline of three levels: the concrete syntax level (level 0) is the one the user
298 has to deal with when inserting CIC terms; the abstract syntax level (level 2)
299 is an internal representation which intuitively encodes mathematical formulae at
300 the content level~\cite{adams}\cite{mkm-structure}; the last level is that of
301 CIC terms.
302
303 \begin{figure}[ht]
304  \begin{center}
305   \includegraphics[width=0.9\textwidth]{input_phase}
306   \caption{\MATITA{} input phase}
307  \end{center}
308  \label{fig:inputphase}
309 \end{figure}
310
311 Requirement (1) is addressed by a built-in concrete syntax for terms, described
312 in Tab.~\ref{tab:termsyn}, and the extensible notation mechanisms which offers a
313 way for extending available mathematical notations. Extensible notation, which
314 is also in charge of providing a parsing function mapping concrete syntax terms
315 to content level terms, is described in Sect.~\ref{sec:notation}.  Requirement
316 (2) is addressed by the conjunct action of that parsing function and
317 disambiguation which provides a function from content level terms to CIC terms.
318
319 \subsubsection{Sources of ambiguity}
320
321 The translation from content level terms to CIC terms is not straightforward
322 because some nodes of the content encoding admit more that one CIC encoding,
323 invalidating requirement (2).
324
325 \begin{example}
326
327  Consider the term at the concrete syntax level \texttt{\TEXMACRO{forall} x. x +
328  ln 1 = x} of Fig.~\ref{fig:inputphase}(a), it can be the type of a lemma the
329  user may want to prove. Assuming that both \texttt{+} and \texttt{=} are parsed
330  as infix operators, all the following questions are legitimate and must be
331  answered before obtaining a CIC term from its content level encoding
332  (Fig.~\ref{fig:inputphase}(b)):
333
334  \begin{enumerate}
335
336   \item Since \texttt{ln} is an unbound identifier, which CIC constants does it
337    represent? Many different theorems in the library may share its (rather
338    short) name \dots
339
340   \item Which kind of number (\IN, \IR, \dots) the \texttt{1} literal stand for?
341    Which encoding is used in CIC to represent it? E.g., assuming $1\in\IN$, is
342    it an unary or a binary encoding?
343
344   \item Which kind of equality the ``='' node represents? Is it Leibniz's
345    polymorhpic equality? Is it a decidable equality over \IN, \IR, \dots?
346
347  \end{enumerate}
348
349 \end{example}
350
351 In \MATITA, three \emph{sources of ambiguity} are admitted for content level
352 terms: unbound identifiers, literal numbers, and operators. Each instance of
353 ambiguity sources (ambiguous entity) occuring in a content level term is
354 associated to a \emph{disambiguation domain}. Intuitively a disambiguation
355 domain is a set of CIC terms which may be replaced for an ambiguous entity
356 during disambiguation. Each item of the domain is said to be an
357 \emph{interpretation} for the ambiguous entity.
358
359 \emph{Unbound identifiers} (question 1) are ambiguous entities since the
360 namespace of CIC objects is not flat and the same identifier may denote many
361 ofthem. For example the short name \texttt{plus\_assoc} in the \HELM{} library
362 is shared by three different theorems stating the associative property of
363 different additions.  This kind of ambiguity is avoidable if the user is willing
364 to use long names (in form of URIs in the \texttt{cic://} scheme) in the
365 concrete syntax, with the obvious drawbacks of obtaining long and unreadable
366 terms.
367
368 Given an unbound identifier, the corresponding disambiguation domain is computed
369 querying the library for all constants, inductive types, and inductive type
370 constructors having it as their short name (see the \LOCATE{} query in
371 Sect.~\ref{sec:metadata}).
372
373 \emph{Literal numbers} (question 2) are ambiguous entities as well since
374 different kinds of numbers can be encoded in CIC (\IN, \IR, \IZ, \dots) using
375 different encodings. Considering the restricted example of natural numbers we
376 can for instance encode them in CIC using inductive datatypes with a number of
377 constructor equal to the encoding base plus 1, obtaining one encoding for each
378 base.
379
380 For each possible way of mapping a literal number to a CIC term, \MATITA{} is
381 aware of a \emph{number intepretation function} which, when applied to the
382 natural number denoted by the literal\footnote{at the moment only literal
383 natural number are supported in the concrete syntax} returns a corresponding CIC
384 term. The disambiguation domain for a given literal number is built applying to
385 the literal all available number interpretation functions in turn.
386
387 Number interpretation functions can be defined in OCaml or directly using
388 \TODO{notazione per i numeri}.
389
390 \emph{Operators} (question 3) are intuitively head of applications, as such they
391 are always applied to a non empty sequence of arguments. Their ambiguity is a
392 need since it is often the case that some notation is used in an overloaded
393 fashion to hide the use of different CIC constants which encodes similar
394 concepts. For example, in the standard library of \MATITA{} the infix \texttt{+}
395 notation is available building a binary \texttt{Op(+)} node, whose
396 disambiguation domain may refer to different constants like the addition over
397 natural numbers \URI{cic:/matita/nat/plus/plus.con} or that over real numbers of
398 the \COQ{} standard library \URI{cic:/Coq/Reals/Rdefinitions/Rplus.con}.
399
400 For each possible way of mapping a symbol application to a CIC term, \MATITA{}
401 knows a \emph{symbol interpretation function} which, when applied to a symbol
402 and its arguments, returns a CIC term. The disambiguation domain for a given
403 operator is built applying to the symbol and its arguments all available symbol
404 interpretation functions in turn.
405
406 \begin{grafite}
407  foo
408  bar
409  baz
410 \end{grafite}
411
412 \TODO{FINQUI, il resto \`e copy and paste dal Whelp paper \dots}
413
414 Note that given a content level term with more than one sources of ambiguity,
415 not all possible disambiguation choices are valid: for example, given the input
416 \texttt{1+1} we must choose an interpretation of \texttt{+} which is typable in
417 CIC according to the chosen interpretation for \texttt{1}; choosing as
418 \texttt{+} the addition over natural numbers and as \texttt{1} the real number
419 $1$ will lead to a type error.
420
421 A \emph{disambiguation algorithm} takes as input an ambiguous term and return a
422 fully determined CIC term. The \emph{naive disambiguation algorithm} takes as
423 input an ambiguous term $t$ and proceeds as follows:
424
425 \begin{enumerate}
426
427  \item Create disambiguation domains $\{D_i | i\in\mathit{Dom}(t)\}$, where
428   $\mathit{Dom}(t)$ is the set of ambiguity sources of $t$. Each $D_i$ is a set
429   of CIC terms.
430
431  \item Let $\Phi = \{\phi_i | {i\in\mathit{Dom}(t)},\phi_i\in D_i\}$
432 %  such that $\forall i\in\mathit{Dom}(t),\exists\phi_j\in\Phi,i=j$
433   be an interpretation for $t$. Given $t$ and an interpretation $\Phi$, a CIC
434   term is fully determined. Iterate over all possible interpretations of $t$ and
435   type-check them, keep only typable interpretations (i.e. interpretations that
436   determine typable terms).
437
438  \item Let $n$ be the number of interpretations who survived step 2. If $n=0$
439   signal a type error. If $n=1$ we have found exactly one CIC term
440   corresponding to $t$, returns it as output of the disambiguation phase.
441   If $n>1$ let the user choose one of the $n$ interpretations and returns the
442   corresponding term.
443
444 \end{enumerate}
445
446 The above algorithm is highly inefficient since the number of possible
447 interpretations $\Phi$ grows exponentially with the number of ambiguity sources.
448 The actual algorithm used in \WHELP{} is far more efficient being, in the
449 average case, linear in the number of ambiguity sources.
450
451 The efficient algorithm can be applied if the logic can be extended with
452 metavariables and a refiner can be implemented. This is the case for CIC and
453 several other logics.
454 \emph{Metavariables}~\cite{munoz} are typed, non linear placeholders that can
455 occur in terms; $?_i$ usually denotes the $i$-th metavariable, while $?$ denotes
456 a freshly created metavariable. A \emph{refiner}~\cite{McBride} is a
457 function whose input is a term with placeholders and whose output is either a
458 new term obtained instantiating some placeholder or $\epsilon$, meaning that no
459 well typed instantiation could be found for the placeholders occurring in
460 the term (type error).
461
462 The efficient algorithm starts with an interpretation $\Phi_0 = \{\phi_i |
463 \phi_i = ?, i\in\mathit{Dom}(t)\}$,
464 which associates a fresh metavariable to each
465 source of ambiguity. Then it iterates refining the current CIC term (i.e. the
466 term obtained interpreting $t$ with $\Phi_i$). If the refinement succeeds the
467 next interpretation $\Phi_{i+1}$ will be created \emph{making a choice}, that is
468 replacing a placeholder with one of the possible choice from the corresponding
469 disambiguation domain. The placeholder to be replaced is chosen following a
470 preorder visit of the ambiguous term. If the refinement fails the current set of
471 choices cannot lead to a well-typed term and backtracking is attempted.
472 Once an unambiguous correct interpretation is found (i.e. $\Phi_i$ does no
473 longer contain any placeholder), backtracking is attempted
474 anyway to find the other correct interpretations.
475
476 The intuition which explain why this algorithm is more efficient is that as soon
477 as a term containing placeholders is not typable, no further instantiation of
478 its placeholders could lead to a typable term. For example, during the
479 disambiguation of user input \texttt{\TEXMACRO{forall} x. x*0 = 0}, an
480 interpretation $\Phi_i$ is encountered which associates $?$ to the instance
481 of \texttt{0} on the right, the real number $0$ to the instance of \texttt{0} on
482 the left, and the multiplication over natural numbers (\texttt{mult} for short)
483 to \texttt{*}. The refiner will fail, since \texttt{mult} require a natural
484 argument, and no further instantiation of the placeholder will be tried.
485
486 If, at the end of the disambiguation, more than one possible interpretations are
487 possible, the user will be asked to choose the intended one (see
488 Fig.~\ref{fig:disambiguation}).
489
490 \begin{figure}[htb]
491 %   \centerline{\includegraphics[width=0.9\textwidth]{disambiguation-1}}
492   \caption{\label{fig:disambiguation} Disambiguation: interpretation choice}
493 \end{figure}
494
495 Details of the disambiguation algorithm of \WHELP{} can
496 be found in~\cite{disambiguation}, where an equivalent algorithm
497 that avoids backtracking is also presented.
498
499 \subsection{notazione}
500 \label{sec:notation}
501 \ASSIGNEDTO{zack}
502
503 \subsection{libreria tutta visibile}
504 \ASSIGNEDTO{csc}
505
506 \subsection{ricerca e indicizzazione}
507 \label{sec:metadata}
508 \ASSIGNEDTO{andrea}
509
510 \subsection{auto}
511 \ASSIGNEDTO{andrea}
512
513 \subsection{xml / gestione della libreria}
514 \ASSIGNEDTO{gares}
515
516 \subsection{named variable}
517 \ASSIGNEDTO{csc}
518
519 \subsection{assenza di proof tree / resa in linguaggio naturale}
520 \ASSIGNEDTO{andrea}
521
522 \subsection{selezione semantica, cut paste, hyperlink}
523 \ASSIGNEDTO{zack}
524
525 \subsection{sostituzioni esplicite vs moduli}
526 \ASSIGNEDTO{csc}
527
528 \section{Drawbacks, missing, \dots}
529
530 \subsection{moduli}
531 \ASSIGNEDTO{}
532
533 \subsection{ltac}
534 \ASSIGNEDTO{}
535
536 \subsection{estrazione}
537 \ASSIGNEDTO{}
538
539 \subsection{localizzazione errori}
540 \ASSIGNEDTO{}
541
542 \textbf{Acknowledgements}
543 We would like to thank all the students that during the past
544 five years collaborated in the \HELM{} project and contributed to 
545 the development of Matita, and in particular
546 A.Griggio, F.Guidi, P. Di Lena, L.Padovani, I.Schena, M.Selmi, 
547 V.Tamburrelli.
548
549 \bibliography{matita}
550
551 \end{document}
552