--- /dev/null
+
+include ../../../Makefile.defs
+
+XSLTPROC=xsltproc
+XHTML_XSL=xsl/matita-xhtml.xsl
+MAIN=matita.xml
+DEPS := $(wildcard *.xml)
+
+DESTDIR = /usr/local/share/doc/matita/
+
+all: quickref-stamp html-stamp pdf-stamp
+
+quickref-stamp: tactics_quickref.xml declarative_tactics_quickref.xml
+ touch $@
+
+tactics_quickref.xml: xsl/tactic_quickref.xsl sec_tactics.xml
+ $(XSLTPROC) --param declarative "''" $< matita.xml > $@
+declarative_tactics_quickref.xml: xsl/tactic_quickref.xsl sec_declarative_tactics.xml
+ $(XSLTPROC) --param declarative "'declarative_'" $< matita.xml > $@
+
+html: quickref-stamp html-stamp
+html-stamp: $(MAIN) $(DEPS) $(XHTML_XSL)
+ $(XSLTPROC) $(XHTML_XSL) $<
+ touch $@
+
+pdf: quickref-stamp pdf-stamp
+pdf-stamp: $(patsubst %.xml,%.pdf,$(MAIN))
+ touch $@
+
+%.pdf: %.xml
+ dblatex -rscripts/fix-symbols.sh -tpdf $<
+%.dvi: %.xml
+ dblatex -rscripts/fix-symbols.sh -tdvi $<
+%.ps: %.xml
+ dblatex -rscripts/fix-symbols.sh -tps $<
+
+install: install-html install-pdf
+install-pdf: pdf-stamp
+ mkdir -p $(DESTDIR)/pdf
+ cp matita.pdf $(DESTDIR)/pdf
+
+install-html: html-stamp
+ mkdir -p $(DESTDIR)/html
+ cp *.html *.css $(DESTDIR)/html
+ test -d $(DESTDIR)/html/figures || mkdir $(DESTDIR)/html/figures
+ cp figures/* $(DESTDIR)/html/figures/
+
+clean:
+ rm -f *.html *.pdf *.ps *.dvi *.tex
+ rm -f *-stamp
+
--- /dev/null
+
+1) in order to generated chunked html directly
+ XHTML_XSL=http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl
+
+2) to obtain a better pdf, package db2latex-xsl
+
+3) write a separate XSLT that includes the standard one
+
+4) have a look at:
+ svn checkout svn://svn.debian.org/svn/ddp/refcard/trunk
+ http://people.debian.org/~debacle/ (thanks Debacle!)
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Matita vs Coq</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_intro.html" title="Chapter 1. Introduction" /><link rel="prev" href="sec_intro.html" title="Chapter 1. Introduction" /><link rel="next" href="sec_install.html" title="Chapter 2. Installation" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Matita vs Coq</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_intro.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="sec_install.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="WrtCoq"></a>Matita vs Coq</h2></div></div></div><p>
+ The system shares a common look&feel with the Coq proof assistant
+ and its graphical user interface. The two systems have the same logic,
+ very close proof languages and similar sets of tactics. Moreover,
+ Matita is compatible with the library of Coq.
+ From the user point of view the main lacking features
+ with respect to Coq are:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>proof extraction;</p></li><li class="listitem"><p>an extensible language of tactics;</p></li><li class="listitem"><p>automatic implicit arguments;</p></li><li class="listitem"><p>several ad-hoc decision procedures;</p></li><li class="listitem"><p>several rarely used variants for most of the tactics;</p></li><li class="listitem"><p>sections and local variables. To maintain compatibility with the library of Coq, theorems defined inside sections are abstracted by name over the section variables; their instances are explicitly applied to actual arguments by means of explicit named substitutions.</p></li></ul></div><p>
+ Still from the user point of view, the main differences with respect
+ to Coq are:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>the language of tacticals that allows execution of partial tactical application;</p></li><li class="listitem"><p>the unification of the concept of metavariable and existential variable;</p></li><li class="listitem"><p>terms with subterms that cannot be inferred are always allowed as arguments of tactics or other commands;</p></li><li class="listitem"><p>ambiguous terms are disambiguated by direct interaction with the user;</p></li><li class="listitem"><p>theorems and definitions in the library are always accessible without needing to require/include them; right now, only notation needs to be included to become active, but we plan to remove this limitation.</p></li></ul></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_intro.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_install.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Introduction </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Installation</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Authoring</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_gettingstarted.html" title="Chapter 3. Getting started" /><link rel="prev" href="cicbrowser.html" title="Browsing and searching" /><link rel="next" href="sec_terms.html" title="Chapter 4. Syntax" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Authoring</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cicbrowser.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Getting started</th><td width="20%" align="right"> <a accesskey="n" href="sec_terms.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="authoring"></a>Authoring</h2></div></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="compilation"></a>How to compile a script</h3></div></div></div><p>
+ Scripts are compiled to base URIs. Base URIs are of the form
+ "cic:/matita/path" and are given once for all for a set
+ of scripts using the "root" file.
+ </p><p>
+ A "root" file has to be placed in the root of a script set,
+ for example, consider the following files and directories, and
+ assume you keep files in "list" separated from files
+ in "sort" (for example the former directory may contain
+ functions and proofs about lists, while latter sorting algorithms
+ for lists):
+</p><pre class="programlisting">
+ list/
+ list.ma (* depending just on the standard library *)
+ utils/
+ swap.ma (* including list.ma *)
+ sort/
+ qsort.ma (* including utils/swap.ma *)
+</pre><p>
+ To be able to compile properly the contents of "list"
+ a file called root has to be placed in it. The file should be like
+ the following snippet.
+</p><pre class="programlisting">
+ baseuri=cic:/matita/mydatastructures
+</pre><p>
+ This file tells Matita that objects generated by
+ "list.ma" have to be placed in
+ "cic:/matita/mydatastructures/list" while
+ objects generated by
+ "swap.ma" have to be placed in
+ "cic:/matita/mydatastructures/utils/swap".
+ </p><p>
+ Once you created the root file, you must generate a depend file.
+ Enter the "list" directory (the root of yuor file set)
+ and type "matitadep". Remember to regenerate the depend file
+ every time you alter the dependencies of your files (for example
+ including other scripts).
+ You can now compile you files typing "matitac".
+ </p><p>
+ To compile the "sort" directory, create a root file
+ in "sort/" like the following one and then run
+ "matitadep".
+</p><pre class="programlisting">
+ baseuri=cic:/matita/myalgorithms
+ include_paths=../list
+</pre><p>
+ The include_paths field can declare a list of paths separated by space.
+ Please omit any "/" from the end of base URIs or paths.
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="authoringinterface"></a>The authoring interface</h3></div></div></div><p><span class="emphasis"><em>TODO</em></span></p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cicbrowser.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_gettingstarted.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_terms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Browsing and searching </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. Syntax</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Definitions and declarations</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_terms.html" title="Chapter 4. Syntax" /><link rel="prev" href="sec_terms.html" title="Chapter 4. Syntax" /><link rel="next" href="proofs.html" title="Proofs" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Definitions and declarations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_terms.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Syntax</th><td width="20%" align="right"> <a accesskey="n" href="proofs.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="axiom_definition_declaration"></a>Definitions and declarations</h2></div></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="axiom"></a><span class="bold"><strong>axiom</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></h3></div></div></div><p><strong class="userinput"><code>axiom H: P</code></strong></p><p><span class="command"><strong>H</strong></span> is declared as an axiom that states <span class="command"><strong>P</strong></span></p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="definition"></a><span class="bold"><strong>definition</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</h3></div></div></div><p><strong class="userinput"><code>definition f: T ≝ t</code></strong></p><p><span class="command"><strong>f</strong></span> is defined as <span class="command"><strong>t</strong></span>;
+ <span class="command"><strong>T</strong></span> is its type. An error is raised if the type of
+ <span class="command"><strong>t</strong></span> is not convertible to <span class="command"><strong>T</strong></span>.</p><p><span class="command"><strong>T</strong></span> is inferred from <span class="command"><strong>t</strong></span> if
+ omitted.</p><p><span class="command"><strong>t</strong></span> can be omitted only if <span class="command"><strong>T</strong></span> is
+ given. In this case Matita enters in interactive mode and
+ <span class="command"><strong>f</strong></span> must be defined by means of tactics.</p><p>Notice that the command is equivalent to <span class="command"><strong>theorem f: T ≝ t</strong></span>.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="letrec"></a><span class="bold"><strong>letrec</strong></span> <span class="emphasis"><em>TODO</em></span></h3></div></div></div><p><span class="emphasis"><em>TODO</em></span></p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="inductive"></a>[<span class="bold"><strong>inductive</strong></span>|<span class="bold"><strong>coinductive</strong></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args2">args2</a></em></span>]… <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>≝</strong></span> [<span class="bold"><strong>|</strong></span>] [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>|</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…
+[<span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>≝</strong></span> [<span class="bold"><strong>|</strong></span>] [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>|</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…]…
+</h3></div></div></div><p><strong class="userinput"><code>inductive i x y z: S ≝ k1:T1 | … | kn:Tn with i' : S' ≝ k1':T1' | … | km':Tm'</code></strong></p><p>Declares a family of two mutually inductive types
+ <span class="command"><strong>i</strong></span> and <span class="command"><strong>i'</strong></span> whose types are
+ <span class="command"><strong>S</strong></span> and <span class="command"><strong>S'</strong></span>, which must be convertible
+ to sorts.</p><p>The constructors <span class="command"><strong>ki</strong></span> of type <span class="command"><strong>Ti</strong></span>
+ and <span class="command"><strong>ki'</strong></span> of type <span class="command"><strong>Ti'</strong></span> are also
+ simultaneously declared. The declared types <span class="command"><strong>i</strong></span> and
+ <span class="command"><strong>i'</strong></span> may occur in the types of the constructors, but
+ only in strongly positive positions according to the rules of the
+ calculus.</p><p>The whole family is parameterized over the arguments <span class="command"><strong>x,y,z</strong></span>.</p><p>If the keyword <span class="command"><strong>coinductive</strong></span> is used, the declared
+ types are considered mutually coinductive.</p><p>Elimination principles for the record are automatically generated
+ by Matita, if allowed by the typing rules of the calculus according to
+ the sort <span class="command"><strong>S</strong></span>. If generated,
+ they are named <span class="command"><strong>i_ind</strong></span>, <span class="command"><strong>i_rec</strong></span> and
+ <span class="command"><strong>i_rect</strong></span> according to the sort of their induction
+ predicate.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="record"></a><span class="bold"><strong>record</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args2">args2</a></em></span>]… <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>≝</strong></span><span class="bold"><strong>{</strong></span>[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>:</strong></span>|<span class="bold"><strong>:></strong></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>;</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>:</strong></span>|<span class="bold"><strong>:></strong></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…<span class="bold"><strong>}</strong></span></h3></div></div></div><p><strong class="userinput"><code>record id x y z: S ≝ { f1: T1; …; fn:Tn }</code></strong></p><p>Declares a new record family <span class="command"><strong>id</strong></span> parameterized over
+ <span class="command"><strong>x,y,z</strong></span>.</p><p><span class="command"><strong>S</strong></span> is the type of the record
+ and it must be convertible to a sort.</p><p>Each field <span class="command"><strong>fi</strong></span> is declared by giving its type
+ <span class="command"><strong>Ti</strong></span>. A record without any field is admitted.</p><p>Elimination principles for the record are automatically generated
+ by Matita, if allowed by the typing rules of the calculus according to
+ the sort <span class="command"><strong>S</strong></span>. If generated,
+ they are named <span class="command"><strong>i_ind</strong></span>, <span class="command"><strong>i_rec</strong></span> and
+ <span class="command"><strong>i_rect</strong></span> according to the sort of their induction
+ predicate.</p><p>For each field <span class="command"><strong>fi</strong></span> a record projection
+ <span class="command"><strong>fi</strong></span> is also automatically generated if projection
+ is allowed by the typing rules of the calculus according to the
+ sort <span class="command"><strong>S</strong></span>, the type <span class="command"><strong>T1</strong></span> and
+ the definability of depending record projections.</p><p>If the type of a field is declared with <span class="command"><strong>:></strong></span>,
+ the corresponding record projection becomes an implicit coercion.
+ This is just syntactic sugar and it has the same effect of declaring the
+ record projection as a coercion later on.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_terms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_terms.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="proofs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. Syntax </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Proofs</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>interpretation</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_usernotation.html" title="Chapter 5. Extending the syntax" /><link rel="prev" href="sec_usernotation.html" title="Chapter 5. Extending the syntax" /><link rel="next" href="sec_tacticals.html" title="Chapter 6. Tacticals" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">interpretation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_usernotation.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Extending the syntax</th><td width="20%" align="right"> <a accesskey="n" href="sec_tacticals.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp70369200"></a>interpretation</h2></div></div></div><p><strong class="userinput"><code>interpretation "description" 'symbol p<sub>1</sub> … p<sub>n</sub> =
+ rhs</code></strong></p><p><a id="interpretation"></a>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>interpretation</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.csymbol">csymbol</a></em></span> [<span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_argument">interpretation_argument</a></em></span>]…
+ <span class="bold"><strong>=</strong></span>
+ <span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_rhs">interpretation_rhs</a></em></span>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It declares a bi-directional mapping <span class="command"><strong>{…}</strong></span> between the content-level AST <span class="command"><strong>'symbol t<sub>1</sub> … t<sub>n</sub></strong></span> and the semantic term <span class="command"><strong>rhs[{t<sub>1</sub>}/p<sub>1</sub>;…;{t<sub>n</sub>}/p<sub>n</sub>]</strong></span>
+ (the simultaneous substitution in <span class="command"><strong>rhs</strong></span> of the
+ interpretation <span class="command"><strong>{…}</strong></span> of every content-level
+ actual argument <span class="command"><strong>t<sub>i</sub></strong></span> for its
+ corresponding formal parameter
+ <span class="command"><strong>p<sub>i</sub></strong></span>). The
+ <span class="command"><strong>description</strong></span> must be a textual description of the
+ meaning associated to <span class="command"><strong>'symbol</strong></span> by this
+ interpretation, and is used by the user interface of Matita to
+ provide feedback on the interpretation of ambiguous terms.
+ </p></dd><dt><span class="term">Interpretation arguments:</span></dt><dd><div class="table"><a id="idp70392768"></a><p class="title"><strong>Table 5.11. interpretation_argument</strong></p><div class="table-contents"><table summary="interpretation_argument" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.interpretation_argument"></a><span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_argument">interpretation_argument</a></em></span></td><td style="">::=</td><td style="">[<span class="bold"><strong>η</strong></span><span class="bold"><strong>.</strong></span>]… <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">A formal parameter. If the name of the formal parameter is
+ prefixed by n symbols "η", then the mapping performs
+ (multiple) η-expansions to grant that the semantic actual
+ parameter begins with at least n λ-abstractions.</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70401072"></a><p class="title"><strong>Table 5.12. interpretation_rhs</strong></p><div class="table-contents"><table summary="interpretation_rhs" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.interpretation_rhs"></a><span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_rhs">interpretation_rhs</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span></td><td style="">A constant, specified by its URI</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">A constant, specified by its name, or a bound variable. If
+ the constant name is ambiguous, the one corresponding to the
+ last implicitly or explicitly specified alias is used.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>?</strong></span></td><td style="">An implicit parameter</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span>
+ <span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_rhs">interpretation_rhs</a></em></span>
+ [<span class="emphasis"><em><a class="link" href="ch05s02.html#grammar.interpretation_rhs">interpretation_rhs</a></em></span>]…
+ <span class="bold"><strong>)</strong></span></td><td style="">An application</td></tr></tbody></table></div></div><br class="table-break" /></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_usernotation.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_usernotation.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_tacticals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. Extending the syntax </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. Tacticals</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Browsing and searching</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_gettingstarted.html" title="Chapter 3. Getting started" /><link rel="prev" href="sec_gettingstarted.html" title="Chapter 3. Getting started" /><link rel="next" href="authoring.html" title="Authoring" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Browsing and searching</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_gettingstarted.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Getting started</th><td width="20%" align="right"> <a accesskey="n" href="authoring.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="cicbrowser"></a>Browsing and searching</h2></div></div></div><p>The CIC browser is used to browse and search the library.
+ You can open a new CIC browser selecting "New Cic Browser"
+ from the "View" menu of Matita, or by pressing "F3".
+ The CIC browser is similar to a traditional Web browser.</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="browsinglib"></a>Browsing the library</h3></div></div></div><p>To browse the library, type in the location bar the absolute URI of
+ the theorem, definition or library fragment you are interested in.
+ "cic:/" is the root of the library. Contributions developed
+ in Matita are under "cic:/matita"; all the others are
+ part of the library of Coq.</p><p>Following the hyperlinks it is possible to navigate in the Web
+ of mathematical notions. Proof are rendered in pseudo-natural language
+ and mathematical notation is used for formulae. For now, mathematical
+ notation must be included in the current script to be activated, but we
+ plan to remove this limitation.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="aboutproof"></a>Looking at a proof under development</h3></div></div></div><p>A proof under development is not yet part of the library.
+ The special URI "about:proof" can be used to browse the
+ proof currently under development, if there is one.
+ The "home" button of the CIC browser sets the location bar to
+ "about:proof".
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="whelp"></a>Searching the library</h3></div></div></div><p>The query bar of the CIC browser can be used to search the library
+ of Matita for theorems or definitions that match certain criteria.
+ The criteria is given by typing a term in the query bar and selecting
+ an action in the drop down menu right of it.</p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="locate"></a>Searching by name</h4></div></div></div><p> <span class="emphasis"><em>TODO</em></span></p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="hint"></a>List of lemmas that can be applied</h4></div></div></div><p> <span class="emphasis"><em>TODO</em></span></p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="match"></a>Searching by exact match</h4></div></div></div><p> <span class="emphasis"><em>TODO</em></span></p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="elim"></a>List of elimination principles for a given type</h4></div></div></div><p> <span class="emphasis"><em>TODO</em></span></p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="instance"></a>Searching by instantiation</h4></div></div></div><p> <span class="emphasis"><em>TODO</em></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_gettingstarted.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_gettingstarted.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="authoring.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Getting started </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Authoring</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>check</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="next" href="command_eval.html" title="eval" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">check</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_commands.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_eval.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_check"></a>check</h2></div></div></div><p><strong class="userinput"><code>check t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>check</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></p></dd><dt><span class="term">Action:</span></dt><dd><p>Opens a CIC browser window that shows <span class="command"><strong>t</strong></span>
+ together with its type. The command is immediately removed from
+ the script.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_commands.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_eval.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. Other commands </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> eval</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>coercion</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_prefer_coercion.html" title="prefer coercion" /><link rel="next" href="command_default.html" title="default" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">coercion</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_prefer_coercion.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_default.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_coercion"></a>coercion</h2></div></div></div><p><strong class="userinput"><code>coercion u with ariety saturation nocomposites</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>coercion</strong></span>
+ (<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span> | <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>with</strong></span>)
+ [ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]]
+ [ <span class="bold"><strong>nocomposites</strong></span> ]
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Declares <span class="command"><strong>u</strong></span> as an implicit coercion.
+ If the type of <span class="command"><strong>u</strong></span> is
+ <span class="command"><strong>∀x1:T1. … ∀x(n-1):T(n-1).Tn</strong></span> the coercion target is
+ <span class="command"><strong>T(n - ariety)</strong></span> while its source is
+ <span class="command"><strong>T(n - ariety - saturation - 1)</strong></span>.
+ Every time a term <span class="command"><strong>x</strong></span>
+ of type source is used with expected type target, Matita
+ automatically replaces <span class="command"><strong>x</strong></span> with
+ <span class="command"><strong>(u ? … ? x ? … ?)</strong></span> to avoid a typing error.</p>
+ Note that the number of <span class="command"><strong>?</strong></span> added after
+ <span class="command"><strong>x</strong></span> is saturation.
+ <p>Implicit coercions are not displayed to the user:
+ <span class="command"><strong>(u ? … ? x)</strong></span> is rendered simply
+ as <span class="command"><strong>x</strong></span>.</p><p>When a coercion <span class="command"><strong>u</strong></span> is declared
+ from source <span class="command"><strong>s</strong></span> to target <span class="command"><strong>t</strong></span>
+ and there is already a coercion <span class="command"><strong>u'</strong></span> of
+ target <span class="command"><strong>s</strong></span> or source <span class="command"><strong>t</strong></span>,
+ a composite implicit coercion is automatically computed
+ by Matita unless <span class="bold"><strong>nocomposites</strong></span>
+ is specified.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_prefer_coercion.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_default.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">prefer coercion </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> default</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>default</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_coercion.html" title="coercion" /><link rel="next" href="command_hint.html" title="hint" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">default</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_coercion.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_hint.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_default"></a>default</h2></div></div></div><p><strong class="userinput"><code>default "s" u<sub>1</sub> … u<sub>n</sub></code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>default</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span>]…
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It registers a cluster of related definitions and
+ theorems to be used by tactics and the rendering engine.
+ Some functionalities of Matita are not available when some
+ clusters have not been registered. Overloading a cluster
+ registration is possible: the last registration will be the
+ default one, but the previous ones are still in effect.</p><p>
+ <span class="command"><strong>s</strong></span> is an identifier of the cluster and
+ <span class="command"><strong>u<sub>1</sub> … u<sub>n</sub></strong></span>
+ are the URIs of the definitions and theorems of the cluster.
+ The number <span class="command"><strong>n</strong></span> of required URIs depends on the
+ cluster. The following clusters are supported.
+ </p><div class="table"><a id="idp73808912"></a><p class="title"><strong>Table 9.1. clusters</strong></p><div class="table-contents"><table summary="clusters" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; border-left: 0.5pt solid ; border-right: 0.5pt solid ; "><colgroup><col /><col /><col /><col /><col /><col /></colgroup><thead><tr><th style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">name</th><th style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">expected object for 1st URI</th><th style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">expected object for 2nd URI</th><th style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">expected object for 3rd URI</th><th style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">expected object for 4th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 5th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 6th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 7th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 8th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 9th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 10th URI</th><th style="border-bottom: 0.5pt solid ; ">expected object for 11th URI</th></tr></thead><tbody><tr><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">equality</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">an inductive type (say, of type <span class="command"><strong>eq</strong></span>) of type ∀A:Type.A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Prop</strong></span> with one family parameter and one constructor of type ∀x:A.eq A x</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">a theorem of type <span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>x,y:A.eq A x y <span class="bold"><strong>→</strong></span> eq A y x</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">a theorem of type <span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>x,y,z:A.eq A x y <span class="bold"><strong>→</strong></span> eq A y z <span class="bold"><strong>→</strong></span> eq A x z</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Prop</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A x y <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Prop</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A y x <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Set</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A x y <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Set</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A y x <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Type</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A x y <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>a.<span class="bold"><strong>∀</strong></span> P:A <span class="bold"><strong>→</strong></span> <span class="bold"><strong>Type</strong></span>.P x <span class="bold"><strong>→</strong></span> <span class="bold"><strong>∀</strong></span>y.eq A y x <span class="bold"><strong>→</strong></span> P y</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>B.<span class="bold"><strong>∀</strong></span> f:A <span class="bold"><strong>→</strong></span> B.<span class="bold"><strong>∀</strong></span>x,y:A.eq A x y <span class="bold"><strong>→</strong></span> eq B (f x) (f y)</td><td style="border-bottom: 0.5pt solid ; "><span class="bold"><strong>∀</strong></span>A.<span class="bold"><strong>∀</strong></span>B.<span class="bold"><strong>∀</strong></span> f:A <span class="bold"><strong>→</strong></span> B.<span class="bold"><strong>∀</strong></span>x,y:A.eq A x y <span class="bold"><strong>→</strong></span> eq B (f y) (f x)</td></tr><tr><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">true</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">an inductive type of type <span class="bold"><strong>Prop</strong></span> with only one constructor that has no arguments</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-bottom: 0.5pt solid ; "> </td></tr><tr><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">false</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; ">an inductive type of type <span class="bold"><strong>Prop</strong></span> without constructors</td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; border-bottom: 0.5pt solid ; "> </td><td style="border-bottom: 0.5pt solid ; "> </td></tr><tr><td style="border-right: 0.5pt solid ; ">absurd</td><td style="border-right: 0.5pt solid ; ">a theorem of type <span class="bold"><strong>∀</strong></span>A:Prop.<span class="bold"><strong>∀</strong></span>B:Prop.A <span class="bold"><strong>→</strong></span> Not A <span class="bold"><strong>→</strong></span> B</td><td style="border-right: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; "> </td><td style="border-right: 0.5pt solid ; "> </td><td style=""> </td></tr></tbody></table></div></div><br class="table-break" /></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_coercion.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_hint.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">coercion </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> hint</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>eval</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_check.html" title="check" /><link rel="next" href="command_prefer_coercion.html" title="prefer coercion" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">eval</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_check.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_prefer_coercion.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_eval"></a>eval</h2></div></div></div><p><strong class="userinput"><code>eval red on t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>eval</strong></span>
+ <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.reduction-kind">reduction-kind</a></em></span>
+ <span class="bold"><strong>on</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></p></dd><dt><span class="term">Action:</span></dt><dd><p>Opens a CIC browser window that shows
+ the reduct of
+ <span class="command"><strong>t</strong></span>
+ together with its type.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_check.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_prefer_coercion.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">check </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> prefer coercion</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>hint</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_default.html" title="default" /><link rel="next" href="command_include.html" title="include" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">hint</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_default.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_include.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_hint"></a>hint</h2></div></div></div><p><strong class="userinput"><code>hint</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>hint</strong></span>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Displays a list of theorems that can be successfully
+ applied to the current selected sequent. The command is
+ removed from the script, but the window that displays the
+ theorems allow to add to the script the application of the
+ selected theorem.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_default.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_include.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">default </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> include</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>include</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_hint.html" title="hint" /><link rel="next" href="command_include_first.html" title="include' "s"" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">include</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_hint.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_include_first.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_include"></a>include</h2></div></div></div><p><strong class="userinput"><code>include "s"</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>include</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span></p></dd><dt><span class="term">Action:</span></dt><dd><p>Every <a class="link" href="command_coercion.html" title="coercion">coercion</a>,
+ <a class="link" href="sec_usernotation.html#notation">notation</a> and
+ <a class="link" href="ch05s02.html#interpretation">interpretation</a> that was active
+ when the file <span class="command"><strong>s</strong></span> was compiled last time
+ is made active. The same happens for declarations of
+ <a class="link" href="command_default.html" title="default">default definitions and
+ theorems</a> and disambiguation
+ hints (<a class="link" href="sec_commands.html#command_alias" title="alias">aliases</a>).
+ On the contrary, theorem and definitions declared in a file can be
+ immediately used without including it.</p><p>The file <span class="command"><strong>s</strong></span> is automatically compiled
+ if it is not compiled yet.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_hint.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_include_first.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">hint </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> include' "s"</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>include' "s"</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_include.html" title="include" /><link rel="next" href="command_whelp.html" title="whelp" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">include' "s"</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_include.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_whelp.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_include_first"></a>include' "s"</h2></div></div></div><p><strong class="userinput"><code></code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>include'</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span></p></dd><dt><span class="term">Action:</span></dt><dd><p>Not documented (<span class="emphasis"><em>TODO</em></span>), do not use it.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_include.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_whelp.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">include </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> whelp</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>inline</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_qed.html" title="qed" /><link rel="next" href="sec_license.html" title="Chapter 10. License" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">inline</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_qed.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="sec_license.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_inline"></a>inline</h2></div></div></div><p><strong class="userinput"><code>inline "s" params</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>inline</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span> <span class="emphasis"><em><a class="link" href="command_inline.html#grammar.inlineparams">inline_params</a></em></span>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Inlines a representation of the item <span class="command"><strong>s</strong></span>,
+which can be the URI of a HELM object. If an entire HELM directory (i.e. a base
+URI) or the path of a *.ma source file is provided, all the contained objects
+are represented in a row.
+If the inlined object has a proof, this proof is represented in several ways
+depending on the provided parameters.</p></dd></dl></div><p>
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="inline-params"></a>inline-params</h3></div></div></div><div class="table"><a id="idp73947536"></a><p class="title"><strong>Table 9.2. inline-params</strong></p><div class="table-contents"><table summary="inline-params" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.inlineparams"></a><span class="emphasis"><em><a class="link" href="command_inline.html#grammar.inlineparams">inline_params</a></em></span></td><td style="">::=</td><td style="">[<span class="emphasis"><em><a class="link" href="command_inline.html#grammar.inlineparam">inline_param</a></em></span> [<span class="emphasis"><em><a class="link" href="command_inline.html#grammar.inlineparam">inline_param</a></em></span>] … ]</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp73955728"></a><p class="title"><strong>Table 9.3. inline-param</strong></p><div class="table-contents"><table summary="inline-param" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.inlineparam"></a><span class="emphasis"><em><a class="link" href="command_inline.html#grammar.inlineparam">inline_param</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>axiom</strong></span></td><td style="">Try to give an <a class="link" href="axiom_definition_declaration.html#axiom" title="axiom id: term">axiom</a> flavour
+ (bodies are omitted even if present)
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>definition</strong></span></td><td style="">Try give a <a class="link" href="axiom_definition_declaration.html#definition" title="definition id[: term] [≝ term]">definition</a> flavour
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>theorem</strong></span></td><td style="">Try give a <a class="link" href="proofs.html#theorem" title="theorem id[: term] [≝ term]">theorem</a> flavour
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>lemma</strong></span></td><td style="">Try give a <a class="link" href="proofs.html#lemma" title="lemma id[: term] [≝ term]">lemma</a> flavour
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>remark</strong></span></td><td style="">Try give a <a class="link" href="proofs.html#remark" title="remark id[: term] [≝ term]">remark</a> flavour
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>fact</strong></span></td><td style="">Try give a <a class="link" href="proofs.html#fact" title="fact id[: term] [≝ term]">fact</a> flavour
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>variant</strong></span></td><td style="">Try give a <a class="link" href="proofs.html#variant" title="variant id: term ≝ term">variant</a> flavour
+ (implies <span class="bold"><strong>plain</strong></span>)
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>declarative</strong></span></td><td style="">Represent proofs using
+ <a class="link" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics">declarative tactics</a>
+ (this is the dafault and can be omitted)
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>procedural</strong></span></td><td style="">Represent proofs using
+ <a class="link" href="sec_tactics.html" title="Chapter 7. Tactics">procedural tactics</a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>plain</strong></span></td><td style="">Represent proofs using plain
+ <a class="link" href="sec_terms.html#tbl_terms" title="Table 4.9. Terms">proof terms</a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>nodefaults</strong></span></td><td style="">
+ Do not use the tactics depending on the
+ <a class="link" href="command_default.html" title="default">default</a> command
+ (<a class="link" href="tac_rewrite.html" title="rewrite">rewrite</a>
+ in the <span class="bold"><strong>procedural</strong></span> mode)
+ </td></tr><tr valign="top"><td style="" valign="top"> </td><td style="" valign="top">|</td><td style="" valign="top"><span class="bold"><strong>level=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style="" valign="top">
+ Set the level of the procedural proof representation
+ (the default is the highest level)
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Tactics used at level 1:
+ <a class="link" href="tac_exact.html" title="exact">exact</a></li><li class="listitem">
+ Additional tactics used at level 2:
+ <a class="link" href="tac_letin.html" title="letin">letin</a>,
+ <a class="link" href="tac_cut.html" title="cut">cut</a>,
+ <a class="link" href="tac_change.html" title="change">change</a>,
+ <a class="link" href="tac_intros.html" title="intros">intros</a>,
+ <a class="link" href="tac_apply.html" title="apply">apply</a>,
+ <a class="link" href="tac_elim.html" title="elim">elim</a>,
+ <a class="link" href="tac_cases.html" title="cases">cases</a>,
+ <a class="link" href="tac_rewrite.html" title="rewrite">rewrite</a></li></ul></div>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>depth=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_qed.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_license.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">qed </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. License</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>prefer coercion</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_eval.html" title="eval" /><link rel="next" href="command_coercion.html" title="coercion" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">prefer coercion</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_eval.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_coercion.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_prefer_coercion"></a>prefer coercion</h2></div></div></div><p><strong class="userinput"><code>prefer coercion u</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>prefer coercion</strong></span>
+ (<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span> | <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>)
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>The already declared coercion <span class="command"><strong>u</strong></span>
+ is preferred to other coercions with the same source and target.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_eval.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_coercion.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">eval </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> coercion</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>qed</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_whelp.html" title="whelp" /><link rel="next" href="command_inline.html" title="inline" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">qed</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_whelp.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_inline.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_qed"></a>qed</h2></div></div></div><p><strong class="userinput"><code>qed</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>qed</strong></span>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Saves and indexes the current interactive theorem or
+ definition.
+ In order to do this, the set of sequents still to be proved
+ must be empty.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_whelp.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_inline.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">whelp </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> inline</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>whelp</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_commands.html" title="Chapter 9. Other commands" /><link rel="prev" href="command_include_first.html" title="include' "s"" /><link rel="next" href="command_qed.html" title="qed" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">whelp</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_include_first.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Other commands</th><td width="20%" align="right"> <a accesskey="n" href="command_qed.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_whelp"></a>whelp</h2></div></div></div><p><strong class="userinput"><code>whelp locate "s"</code></strong></p><p><strong class="userinput"><code>whelp hint t</code></strong></p><p><strong class="userinput"><code>whelp elim t</code></strong></p><p><strong class="userinput"><code>whelp match t</code></strong></p><p><strong class="userinput"><code>whelp instance t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>whelp</strong></span>
+ [<span class="bold"><strong>locate</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span>
+ | <span class="bold"><strong>hint</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ | <span class="bold"><strong>elim</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ | <span class="bold"><strong>match</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ | <span class="bold"><strong>instance</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ ]
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Performs the corresponding <a class="link" href="cicbrowser.html#whelp" title="Searching the library">query</a>,
+ showing the result in the CIC browser. The command is removed
+ from the script.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_include_first.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="command_qed.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">include' "s" </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> qed</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>tactics</title>
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry id="grammar.declarative_tactic">&tactic;</entry>
+ <entry>::=</entry>
+ <entry><link linkend="tac_assume"><emphasis role="bold">assume</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis> <emphasis role="bold"> : </emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_by induction hypothesis we know"><emphasis role="bold">by induction hypothesis we know</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold"> (</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis> <emphasis role="bold">)</emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_case"><emphasis role="bold">case</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis> [<emphasis role="bold">(</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis> <emphasis role="bold">:</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold">)</emphasis>] … </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis><link linkend="grammar.justification">justification</link></emphasis> <link linkend="tac_done"><emphasis role="bold">done</emphasis></link></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis><link linkend="grammar.justification">justification</link></emphasis> <emphasis role="bold">let</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>
+ <emphasis role="bold">:</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold">such that</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis>
+ <emphasis role="bold">(</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis> <emphasis role="bold">)</emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>[<link linkend="tac_obtain"><emphasis role="bold">obtain</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis> | <emphasis role="bold">conclude</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis>] <emphasis role="bold">=</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> [<emphasis><link linkend="grammar.autoparams">auto_params</link></emphasis> | <emphasis role="bold">using</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> | <emphasis role="bold">using once</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> | <emphasis role="bold">proof</emphasis>] [<emphasis role="bold">done</emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_suppose"><emphasis role="bold">suppose</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold"> (</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>
+ <emphasis role="bold">) </emphasis> [ <emphasis role="bold">that is equivalent to</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> ]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_the thesis becomes"><emphasis role="bold">the thesis becomes</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis> </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_we need to prove"><emphasis role="bold">we need to prove</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis>
+ [<emphasis role="bold">(</emphasis><emphasis><link linkend="grammar.id">id</link></emphasis>
+ <emphasis role="bold">)</emphasis>]
+ [ <emphasis role="bold">or equivalently</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_we proceed by cases on"><emphasis role="bold">we proceed by cases on</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold">to prove</emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_we proceed by induction on"><emphasis role="bold">we proceed by induction on</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis role="bold"> to prove </emphasis> <emphasis><link linkend="grammar.term">term</link></emphasis> </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis><link linkend="grammar.justification">justification</link></emphasis> <link linkend="tac_we proved"><emphasis role="bold">we proved</emphasis></link> <emphasis><link linkend="grammar.term">term</link></emphasis>
+ <emphasis role="bold">(</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>
+ <emphasis role="bold">)</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
--- /dev/null
+
+body {
+ background: url(../../images/sheetbg.png);
+}
+
+ul.authorgroup {
+ list-style-type: none;
+ padding-left: 1em;
+}
+
+div.titlepage {
+ background: #eaeaea;
+}
+
+div.titlepage hr {
+ display: none;
+}
+
+div.navheader hr {
+ display: none;
+}
+
+div.navfooter hr {
+ display: none;
+}
+
+div.navheader {
+ padding-left: 150px;
+ background: #eaeaea;
+}
+
+div.navfooter {
+ background: #eaeaea;
+}
+
+div.matita_logo {
+ position: absolute;
+ top: 3px;
+ left: 5px;
+}
+
+div.matita_logo img {
+ border-style: none;
+}
+
+div.matita_logo span {
+ position: absolute;
+ top: 13px;
+ left: 65px;
+ text-decoration: underline;
+}
+
+div.figure {
+ text-align: center;
+}
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Matita V0.5.9 User Manual (rev. 0.5.9 )</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="next" href="sec_intro.html" title="Chapter 1. Introduction" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="application">Matita</span> V0.5.9
+ User Manual (rev. 0.5.9
+)</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="sec_intro.html">Next</a></td></tr></table><hr /></div><div xml:lang="en" class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="matita_manual"></a><span class="application">Matita</span> V0.5.9
+ User Manual (rev. 0.5.9
+)</h1></div><div><ul xmlns="" class="authorgroup"><li class="author">Andrea Asperti <<a href="mailto:asperti@cs.unibo.it">asperti@cs.unibo.it</a>></li><li class="author">Claudio Sacerdoti Coen <<a href="mailto:sacerdot@cs.unibo.it">sacerdot@cs.unibo.it</a>></li><li class="author">Ferruccio Guidi <<a href="mailto:fguidi@cs.unibo.it">fguidi@cs.unibo.it</a>></li><li class="author">Enrico Tassi <<a href="mailto:tassi@cs.unibo.it">tassi@cs.unibo.it</a>></li><li class="author">Stefano Zacchiroli <<a href="mailto:zacchiro@cs.unibo.it">zacchiro@cs.unibo.it</a>></li></ul></div><div><p class="copyright">Copyright © 2006 The HELM team.</p></div><div><div class="legalnotice"><a id="idp64061872"></a><p> Both Matita and this document are free software, you can
+ redistribute them and/or modify them under the terms of the GNU General
+ Public License as published by the Free Software Foundation. See <a class="xref" href="sec_license.html" title="Chapter 10. License">Chapter 10, <em>License</em></a> for more information. </p></div></div><div><div xmlns="" class="revhistory"><span class="revision">Revision: <span class="revnumber">0.5.9
+</span>, <span class="date">12/07/2006</span></span></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="sec_intro.html">1. Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_intro.html#Features">Features</a></span></dt><dt><span class="sect1"><a href="WrtCoq.html">Matita vs Coq</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_install.html">2. Installation</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_install.html#inst_livecd">Using the LiveCD</a></span></dt><dd><dl><dt><span class="sect2"><a href="sec_install.html#make_vmachine">Creating the virtual machine</a></span></dt><dt><span class="sect2"><a href="sec_install.html#idp68645040">Sharing files with the real PC</a></span></dt></dl></dd><dt><span class="sect1"><a href="inst_from_src.html">Installing from sources</a></span></dt><dd><dl><dt><span class="sect2"><a href="inst_from_src.html#get_source_code">Getting the source code</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#build_requirements">Requirements</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#database_setup">(optional) MySQL setup</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#build_instructions">Compiling and installing</a></span></dt></dl></dd><dt><span class="sect1"><a href="matita.conf.xml.html">Configuring Matita</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_gettingstarted.html">3. Getting started</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_gettingstarted.html#unicode">How to type Unicode symbols</a></span></dt><dt><span class="sect1"><a href="cicbrowser.html">Browsing and searching</a></span></dt><dd><dl><dt><span class="sect2"><a href="cicbrowser.html#browsinglib">Browsing the library</a></span></dt><dt><span class="sect2"><a href="cicbrowser.html#aboutproof">Looking at a proof under development</a></span></dt><dt><span class="sect2"><a href="cicbrowser.html#whelp">Searching the library</a></span></dt></dl></dd><dt><span class="sect1"><a href="authoring.html">Authoring</a></span></dt><dd><dl><dt><span class="sect2"><a href="authoring.html#compilation">How to compile a script</a></span></dt><dt><span class="sect2"><a href="authoring.html#authoringinterface">The authoring interface</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="sec_terms.html">4. Syntax</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_terms.html#terms_and_co">Terms & co.</a></span></dt><dd><dl><dt><span class="sect2"><a href="sec_terms.html#lexical">Lexical conventions</a></span></dt><dt><span class="sect2"><a href="sec_terms.html#terms">Terms</a></span></dt></dl></dd><dt><span class="sect1"><a href="axiom_definition_declaration.html">Definitions and declarations</a></span></dt><dd><dl><dt><span class="sect2"><a href="axiom_definition_declaration.html#axiom">axiom</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#definition">definition</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#letrec"><span class="emphasis"><em>TODO</em></span></a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#inductive">(co)inductive types declaration</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#record">record</a></span></dt></dl></dd><dt><span class="sect1"><a href="proofs.html">Proofs</a></span></dt><dd><dl><dt><span class="sect2"><a href="proofs.html#theorem">theorem</a></span></dt><dt><span class="sect2"><a href="proofs.html#variant">variant</a></span></dt><dt><span class="sect2"><a href="proofs.html#lemma">lemma</a></span></dt><dt><span class="sect2"><a href="proofs.html#fact">fact</a></span></dt><dt><span class="sect2"><a href="proofs.html#remark">remark</a></span></dt></dl></dd><dt><span class="sect1"><a href="tacticargs.html">Tactic arguments</a></span></dt><dd><dl><dt><span class="sect2"><a href="tacticargs.html#introsspec">intros-spec</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#pattern">pattern</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#reduction-kind">reduction-kind</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#auto-params">auto-params</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#justification">justification</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="sec_usernotation.html">5. Extending the syntax</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_usernotation.html#idp70046384">notation</a></span></dt><dt><span class="sect1"><a href="ch05s02.html">interpretation</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_tacticals.html">6. Tacticals</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_tacticals.html#idp70716848">Interactive proofs and definitions</a></span></dt><dt><span class="sect1"><a href="proofstatus.html">The proof status</a></span></dt><dt><span class="sect1"><a href="tacticals.html">Tacticals</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_tactics.html">7. Tactics</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_tactics.html#tactics_quickref">Quick reference card</a></span></dt><dt><span class="sect1"><a href="tac_absurd.html">absurd</a></span></dt><dt><span class="sect1"><a href="tac_apply.html">apply</a></span></dt><dt><span class="sect1"><a href="tac_applyS.html">applyS</a></span></dt><dt><span class="sect1"><a href="tac_assumption.html">assumption</a></span></dt><dt><span class="sect1"><a href="tac_auto.html">auto</a></span></dt><dt><span class="sect1"><a href="tac_cases.html">cases</a></span></dt><dt><span class="sect1"><a href="tac_clear.html">clear</a></span></dt><dt><span class="sect1"><a href="tac_clearbody.html">clearbody</a></span></dt><dt><span class="sect1"><a href="tac_compose.html">compose</a></span></dt><dt><span class="sect1"><a href="tac_change.html">change</a></span></dt><dt><span class="sect1"><a href="tac_constructor.html">constructor</a></span></dt><dt><span class="sect1"><a href="tac_contradiction.html">contradiction</a></span></dt><dt><span class="sect1"><a href="tac_cut.html">cut</a></span></dt><dt><span class="sect1"><a href="tac_decompose.html">decompose</a></span></dt><dt><span class="sect1"><a href="tac_demodulate.html">demodulate</a></span></dt><dt><span class="sect1"><a href="tac_destruct.html">destruct</a></span></dt><dt><span class="sect1"><a href="tac_elim.html">elim</a></span></dt><dt><span class="sect1"><a href="tac_elimType.html">elimType</a></span></dt><dt><span class="sect1"><a href="tac_exact.html">exact</a></span></dt><dt><span class="sect1"><a href="tac_exists.html">exists</a></span></dt><dt><span class="sect1"><a href="tac_fail.html">fail</a></span></dt><dt><span class="sect1"><a href="tac_fold.html">fold</a></span></dt><dt><span class="sect1"><a href="tac_fourier.html">fourier</a></span></dt><dt><span class="sect1"><a href="tac_fwd.html">fwd</a></span></dt><dt><span class="sect1"><a href="tac_generalize.html">generalize</a></span></dt><dt><span class="sect1"><a href="tac_id.html">id</a></span></dt><dt><span class="sect1"><a href="tac_intro.html">intro</a></span></dt><dt><span class="sect1"><a href="tac_intros.html">intros</a></span></dt><dt><span class="sect1"><a href="tac_inversion.html">inversion</a></span></dt><dt><span class="sect1"><a href="tac_lapply.html">lapply</a></span></dt><dt><span class="sect1"><a href="tac_left.html">left</a></span></dt><dt><span class="sect1"><a href="tac_letin.html">letin</a></span></dt><dt><span class="sect1"><a href="tac_normalize.html">normalize</a></span></dt><dt><span class="sect1"><a href="tac_reflexivity.html">reflexivity</a></span></dt><dt><span class="sect1"><a href="tac_replace.html">change</a></span></dt><dt><span class="sect1"><a href="tac_rewrite.html">rewrite</a></span></dt><dt><span class="sect1"><a href="tac_right.html">right</a></span></dt><dt><span class="sect1"><a href="tac_ring.html">ring</a></span></dt><dt><span class="sect1"><a href="tac_simplify.html">simplify</a></span></dt><dt><span class="sect1"><a href="tac_split.html">split</a></span></dt><dt><span class="sect1"><a href="tac_subst.html">subst</a></span></dt><dt><span class="sect1"><a href="tac_symmetry.html">symmetry</a></span></dt><dt><span class="sect1"><a href="tac_transitivity.html">transitivity</a></span></dt><dt><span class="sect1"><a href="tac_unfold.html">unfold</a></span></dt><dt><span class="sect1"><a href="tac_whd.html">whd</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_declarative_tactics.html">8. Declarative Tactics</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_declarative_tactics.html#declarative_tactics_quickref">Quick reference card</a></span></dt><dt><span class="sect1"><a href="tac_assume.html">assume</a></span></dt><dt><span class="sect1"><a href="tac_byinduction.html">by induction hypothesis we know</a></span></dt><dt><span class="sect1"><a href="tac_case.html">case</a></span></dt><dt><span class="sect1"><a href="tac_bydone.html">done</a></span></dt><dt><span class="sect1"><a href="tac_exitselim.html">let such that</a></span></dt><dt><span class="sect1"><a href="tac_obtain.html">obtain</a></span></dt><dt><span class="sect1"><a href="tac_suppose.html">suppose</a></span></dt><dt><span class="sect1"><a href="tac_thesisbecomes.html">the thesis becomes</a></span></dt><dt><span class="sect1"><a href="tac_weneedtoprove.html">we need to prove</a></span></dt><dt><span class="sect1"><a href="tac_andelim.html">we have</a></span></dt><dt><span class="sect1"><a href="tac_weproceedbycases.html">we proceed by cases on</a></span></dt><dt><span class="sect1"><a href="tac_weproceedbyinduction.html">we proceed by induction on</a></span></dt><dt><span class="sect1"><a href="tac_bytermweproved.html">we proved</a></span></dt></dl></dd><dt><span class="chapter"><a href="sec_commands.html">9. Other commands</a></span></dt><dd><dl><dt><span class="sect1"><a href="sec_commands.html#command_alias">alias</a></span></dt><dt><span class="sect1"><a href="command_check.html">check</a></span></dt><dt><span class="sect1"><a href="command_eval.html">eval</a></span></dt><dt><span class="sect1"><a href="command_prefer_coercion.html">prefer coercion</a></span></dt><dt><span class="sect1"><a href="command_coercion.html">coercion</a></span></dt><dt><span class="sect1"><a href="command_default.html">default</a></span></dt><dt><span class="sect1"><a href="command_hint.html">hint</a></span></dt><dt><span class="sect1"><a href="command_include.html">include</a></span></dt><dt><span class="sect1"><a href="command_include_first.html">include' "s"</a></span></dt><dt><span class="sect1"><a href="command_whelp.html">whelp</a></span></dt><dt><span class="sect1"><a href="command_qed.html">qed</a></span></dt><dt><span class="sect1"><a href="command_inline.html">inline</a></span></dt><dd><dl><dt><span class="sect2"><a href="command_inline.html#inline-params">inline-params</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="sec_license.html">10. License</a></span></dt></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>2.1. <a href="sec_install.html#idp68630080">The brand new virtual machine</a></dt><dt>2.2. <a href="sec_install.html#idp68633472">Mounting an ISO image</a></dt><dt>2.3. <a href="sec_install.html#idp68637552">Choosing the ISO image</a></dt><dt>2.4. <a href="sec_install.html#idp68641216">Choosing the ISO image</a></dt><dt>2.5. <a href="sec_install.html#idp68647616">Set up a shared folder</a></dt><dt>2.6. <a href="sec_install.html#idp68651136">Choosing the folder to share</a></dt><dt>2.7. <a href="sec_install.html#idp68654928">Naming the shared folder</a></dt><dt>2.8. <a href="sec_install.html#idp68658672">Using it from the virtual machine</a></dt><dt>2.9. <a href="matita.conf.xml.html#idp68778624">Configuring the Databases</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>4.1. <a href="sec_terms.html#idp69058128">qstring</a></dt><dt>4.2. <a href="sec_terms.html#idp69064992">id</a></dt><dt>4.3. <a href="sec_terms.html#idp69071584">nat</a></dt><dt>4.4. <a href="sec_terms.html#idp69079568">char</a></dt><dt>4.5. <a href="sec_terms.html#idp69086976">uri-step</a></dt><dt>4.6. <a href="sec_terms.html#idp69095648">uri</a></dt><dt>4.7. <a href="sec_terms.html#idp69112080">csymbol</a></dt><dt>4.8. <a href="sec_terms.html#idp69118752">symbol</a></dt><dt>4.9. <a href="sec_terms.html#tbl_terms">Terms</a></dt><dt>4.10. <a href="sec_terms.html#idp69190544">Simple terms</a></dt><dt>4.11. <a href="sec_terms.html#idp69241744">Arguments</a></dt><dt>4.12. <a href="sec_terms.html#idp69274944">Pattern matching</a></dt><dt>4.13. <a href="tacticargs.html#idp69423248">intros-spec</a></dt><dt>4.14. <a href="tacticargs.html#idp69433952">pattern</a></dt><dt>4.15. <a href="tacticargs.html#idp69453472">path</a></dt><dt>4.16. <a href="tacticargs.html#idp69506592">reduction-kind</a></dt><dt>4.17. <a href="tacticargs.html#idp69522400">auto-params</a></dt><dt>4.18. <a href="tacticargs.html#idp69531952">simple-auto-param</a></dt><dt>4.19. <a href="tacticargs.html#idp69555152">justification</a></dt><dt>5.1. <a href="sec_usernotation.html#idp70117712">usage</a></dt><dt>5.2. <a href="sec_usernotation.html#idp70126480">associativity</a></dt><dt>5.3. <a href="sec_usernotation.html#idp70139344">notation_rhs</a></dt><dt>5.4. <a href="sec_usernotation.html#idp70148064">unparsed_ast</a></dt><dt>5.5. <a href="sec_usernotation.html#idp70166064">enriched_term</a></dt><dt>5.6. <a href="sec_usernotation.html#idp70173616">unparsed_meta</a></dt><dt>5.7. <a href="sec_usernotation.html#idp70190032">level2_meta</a></dt><dt>5.8. <a href="sec_usernotation.html#idp70234960">notation_lhs</a></dt><dt>5.9. <a href="sec_usernotation.html#idp70242480">layout</a></dt><dt>5.10. <a href="sec_usernotation.html#idp70356272">literal</a></dt><dt>5.11. <a href="ch05s02.html#idp70392768">interpretation_argument</a></dt><dt>5.12. <a href="ch05s02.html#idp70401072">interpretation_rhs</a></dt><dt>6.1. <a href="tacticals.html#idp70790512">proof script</a></dt><dt>6.2. <a href="tacticals.html#idp70799712">proof steps</a></dt><dt>6.3. <a href="tacticals.html#idp70846288">tactics and LCF tacticals</a></dt><dt>7.1. <a href="sec_tactics.html#idp71070096">tactics</a></dt><dt>8.1. <a href="sec_declarative_tactics.html#idp73048816">tactics</a></dt><dt>9.1. <a href="command_default.html#idp73808912">clusters</a></dt><dt>9.2. <a href="command_inline.html#idp73947536">inline-params</a></dt><dt>9.3. <a href="command_inline.html#idp73955728">inline-param</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="sec_intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Chapter 1. Introduction</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Installing from sources</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_install.html" title="Chapter 2. Installation" /><link rel="prev" href="sec_install.html" title="Chapter 2. Installation" /><link rel="next" href="matita.conf.xml.html" title="Configuring Matita" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Installing from sources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_install.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Installation</th><td width="20%" align="right"> <a accesskey="n" href="matita.conf.xml.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="inst_from_src"></a>Installing from sources</h2></div></div></div><p>Install Matita from the sources is hard, you have been warned!
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="get_source_code"></a>Getting the source code</h3></div></div></div><p>You can get the Matita source code in two ways:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> go to the <a class="ulink" href="http://matita.cs.unibo.it/download.shtml" target="_top">download
+ page</a> and get the <a class="ulink" href="http://matita.cs.unibo.it/sources/matita-latest.tar.gz" target="_top">latest released source tarball</a>;</p></li><li class="listitem"><p> get the development sources from <a class="ulink" href="http://helm.cs.unibo.it/websvn/listing.php?repname=helm&path=%2F&sc=0" target="_top">our
+ SVN repository</a>. You will need the
+ <span class="application">components/</span> and
+ <span class="application">matita/</span> directories from the
+ <code class="filename">trunk/helm/software/</code> directory, plus the
+ <code class="filename">configure</code> and <code class="filename">Makefile*</code>
+ stuff from the same directory. </p><p>In this case you will need to run
+ <span class="command"><strong>autoconf</strong></span> before proceding with the building
+ instructions below.</p></li></ol></div><p>
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="build_requirements"></a>Requirements</h3></div></div></div><p>In order to build Matita from sources you will need some
+ tools and libraries. They are listed below.
+
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note for Debian (and derivatives) users</h3><p>If you are running a
+ <a class="ulink" href="http://www.debian.org" target="_top">Debian GNU/Linux</a>
+ distribution,
+ or any of its derivative like <a class="ulink" href="http://ubuntu.com" target="_top">Ubuntu</a>,
+ you can use APT to install all the required tools and
+ libraries since they are all part of the Debian archive.
+ </p><p>
+ apt-get install ocaml ocaml-findlib libgdome2-ocaml-dev liblablgtk2-ocaml-dev liblablgtkmathview-ocaml-dev liblablgtksourceview-ocaml-dev libsqlite3-ocaml-dev libocamlnet-ocaml-dev libzip-ocaml-dev libhttp-ocaml-dev ocaml-ulex08 libexpat-ocaml-dev libmysql-ocaml-dev camlp5
+ </p><p>
+ An official debian package is going to be added to the
+ archive too.
+ </p></div><p>
+
+ </p><div class="variablelist"><p class="title"><strong>Required tools and libraries</strong></p><dl class="variablelist"><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://caml.inria.fr" target="_top">OCaml</a> </span>
+ </span></dt><dd><p> the Objective Caml compiler, version 3.09 or above </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://www.ocaml-programming.de/packages/" target="_top">Findlib</a>
+ </span>
+ </span></dt><dd><p> OCaml package manager, version 1.1.1 or above</p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://www.xs4all.nl/~mmzeeman/ocaml/" target="_top">OCaml
+ Expat</a> </span>
+ </span></dt><dd><p>OCaml bindings for the <span class="application"><a class="ulink" href="http://expat.sourceforge.net/" target="_top">expat</a>
+ library</span> </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://gmetadom.sourceforge.net/" target="_top">GMetaDOM</a>
+ </span>
+ </span></dt><dd><p>OCaml bindings for the <span class="application"><a class="ulink" href="http://gdome2.cs.unibo.it/" target="_top">Gdome 2</a>
+ library</span></p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://www.bononia.it/~zack/ocaml-http.en.html" target="_top">OCaml
+ HTTP</a> </span>
+ </span></dt><dd><p> OCaml library to write HTTP daemons (and clients) </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk.html" target="_top">LablGTK</a>
+ </span>
+ </span></dt><dd><p> OCaml bindings for the <span class="application"> <a class="ulink" href="http://www.gtk.org" target="_top"> GTK+</a> library
+ </span>, version 2.6.0 or above </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://helm.cs.unibo.it/mml-widget/" target="_top">GtkMathView</a>
+ </span>
+ , </span><span class="term">
+ <span class="application"> <a class="ulink" href="http://helm.cs.unibo.it/mml-widget/" target="_top">LablGtkMathView</a>
+ </span>
+ </span></dt><dd><p> GTK+ widget to render <a class="ulink" href="http://www.w3.org/Math/" target="_top">MathML</a> documents and its
+ OCaml bindings </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://gtksourceview.sourceforge.net/" target="_top">GtkSourceView</a>
+ </span>
+ , </span><span class="term">
+ <span class="application"> <a class="ulink" href="http://helm.cs.unibo.it/software/lablgtksourceview/" target="_top">LablGtkSourceView</a>
+ </span>
+ </span></dt><dd><p> extension for the GTK+ text widget (adding the typical
+ features of source code editors) and its OCaml bindings </p></dd><dt><span class="term"> <span class="application"> <a class="ulink" href="http://www.mysql.com" target="_top">MySQL</a> </span> , </span><span class="term">
+ <span class="application"> <a class="ulink" href="http://raevnos.pennmush.org/code/ocaml-mysql/" target="_top">OCaml
+ MySQL</a> </span>
+ </span></dt><dd><p> SQL database and OCaml bindings for its client-side library
+ </p><p> The SQL database itself is not strictly needed to run
+ Matita, but the client libraries are.</p></dd><dt><span class="term"> <span class="application"> <a class="ulink" href="http://www.sqlite.org" target="_top">Sqlite</a> </span> , </span><span class="term">
+ <span class="application">
+ <a class="ulink" href="http://ocaml.info/home/ocaml_sources.html" target="_top">
+ OCaml Sqlite3
+ </a> </span>
+ </span></dt><dd><p> Sqlite database and OCaml bindings
+ </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://ocamlnet.sourceforge.net/" target="_top">Ocamlnet</a>
+ </span>
+ </span></dt><dd><p> collection of OCaml libraries to deal with
+ application-level Internet protocols and conventions </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://www.cduce.org/download.html" target="_top">ulex</a>
+ </span>
+ </span></dt><dd><p> Unicode lexer generator for OCaml </p></dd><dt><span class="term">
+ <span class="application"> <a class="ulink" href="http://cristal.inria.fr/~xleroy/software.html" target="_top">CamlZip</a>
+ </span>
+ </span></dt><dd><p> OCaml library to access <code class="filename">.gz</code> files
+ </p></dd></dl></div><p> </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="database_setup"></a>(optional) <span class="application"> <a class="ulink" href="http://www.mysql.com" target="_top">MySQL</a> </span> setup</h3></div></div></div><p> To fully exploit Matita indexing and search capabilities
+ on a huge metadata set you may
+ need a working <span class="application"> <a class="ulink" href="http://www.mysql.com" target="_top">MySQL</a> </span> database. Detalied instructions on how to do
+ it can be found in the <a class="ulink" href="http://dev.mysql.com/doc/" target="_top">MySQL documentation</a>. Here you
+ can find a quick howto. </p><p> In order to create a database you need administrator permissions on
+ your MySQL installation, usually the root account has them. Once you
+ have the permissions, a new database can be created executing
+ <strong class="userinput"><code>mysqladmin create matita</code></strong>
+ (<span class="emphasis"><em>matita</em></span> is the default database name, you can
+ change it using the <em class="parameter"><code>db.user</code></em> key of the
+ configuration file). </p><p> Then you need to grant the necessary access permissions to the
+ database user of Matita, typing <strong class="userinput"><code>echo "grant all privileges
+ on matita.* to helm;" | mysql matita</code></strong> should do the trick
+ (<span class="emphasis"><em>helm</em></span> is the default user name used by Matita to
+ access the database, you can change it using the
+ <em class="parameter"><code>db.user</code></em> key of the configuration file).
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> This way you create a database named <span class="emphasis"><em>matita</em></span>
+ on which anyone claiming to be the <span class="emphasis"><em>helm</em></span> user can
+ do everything (like adding dummy data or destroying the contained
+ one). It is strongly suggested to apply more fine grained permissions,
+ how to do it is out of the scope of this manual.</p></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="build_instructions"></a>Compiling and installing</h3></div></div></div><p> Once you get the source code the installations steps should be
+ quite familiar.</p><p> First of all you need to configure the build process executing
+ <strong class="userinput"><code>./configure</code></strong>. This will check that all needed
+ tools and library are installed and prepare the sources for compilation
+ and installation. </p><p> Quite a few (optional) arguments may be passed to the
+ <span class="application">configure</span> command line to change build time
+ parameters. They are listed below, together with their
+ default values: </p><div class="variablelist"><p class="title"><strong> <span class="application">configure</span> command line
+ arguments</strong></p><dl class="variablelist"><dt><span class="term">
+ <strong class="userinput"><code>--with-runtime-dir=<em class="replaceable"><code>dir</code></em></code></strong>
+ </span></dt><dd><p>
+ (<span class="emphasis"><em>Default:</em></span>
+ <code class="filename">/usr/local/matita</code>) Runtime base directory
+ where all Matita stuff (executables, configuration files,
+ standard library, ...) will be installed
+ </p></dd><dt><span class="term">
+ <strong class="userinput"><code>--with-dbhost=<em class="replaceable"><code>host</code></em></code></strong>
+ </span></dt><dd><p>
+ (<span class="emphasis"><em>Default:</em></span> localhost) Default SQL server
+ hostname. Will be used while building the standard library
+ during the installation and to create the default Matita
+ configuration. May be changed later in configuration file.
+ </p></dd><dt><span class="term">
+ <strong class="userinput"><code>--enable-debug</code></strong>
+ </span></dt><dd><p>
+ (<span class="emphasis"><em>Default:</em></span> disabled) Enable debugging code.
+ Not for the casual user.
+ </p></dd></dl></div><p> Then you will manage the build and install process using
+ <span class="application"><a class="ulink" href="http://www.gnu.org/software/make/" target="_top">make</a></span>
+ as usual. Below are reported the targets you have to invoke in sequence
+ to build and install:
+ </p><div class="variablelist"><p class="title"><strong><span class="application">make</span> targets</strong></p><dl class="variablelist"><dt><span class="term"><strong class="userinput"><code>world</code></strong></span></dt><dd><p>builds components needed by Matita and Matita itself
+ (in bytecode or native code depending
+ on the availability of the OCaml native code compiler) </p></dd><dt><span class="term"><strong class="userinput"><code>install</code></strong></span></dt><dd><p>installs Matita related tools, standard library and the
+ needed runtime stuff in the proper places on the filesystem.
+ </p><p>As a part of the installation process the Matita
+ standard library will be compiled, thus testing that the just
+ built <span class="application">matitac</span> compiler works
+ properly.</p><p>For this step you will need a working SQL database (for
+ indexing the standard library while you are compiling it). See
+ <a class="ulink" href="#database_setup" target="_top">Database setup</a>
+ for instructions on how to set it up.
+ </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_install.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_install.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="matita.conf.xml.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Installation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Configuring Matita</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<para> Both &appname; and this document are part of HELM, an Hypertextual,
+ Electronic Library of Mathematics, developed at the Computer Science
+ Department, University of Bologna, Italy. </para>
+
+<para> HELM is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option) any later
+ version. </para>
+
+<para> HELM is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+</para>
+
+<para> You should have received a copy of the GNU General Public License along
+ with HELM; if not, write to the Free Software Foundation, Inc., 51 Franklin
+ St, Fifth Floor, Boston, MA 02110-1301 USA. A copy of the GNU General
+ Public License is available at <ulink
+ url="http://www.gnu.org/copyleft/gpl.html">this link</ulink>. </para>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configuring Matita</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_install.html" title="Chapter 2. Installation" /><link rel="prev" href="inst_from_src.html" title="Installing from sources" /><link rel="next" href="sec_gettingstarted.html" title="Chapter 3. Getting started" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configuring Matita</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="inst_from_src.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Installation</th><td width="20%" align="right"> <a accesskey="n" href="sec_gettingstarted.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="matita.conf.xml"></a>Configuring Matita</h2></div></div></div><p>
+ The configuration file is divided in four sections. The user and
+ matita ones are self explicative and does not need user
+ intervention. Here we report a sample snippet for these two
+ sections. The remaining db and getter sections will be explained in
+ details later.
+ </p><pre class="programlisting">
+
+ <section name="user">
+ <key name="home">$(HOME)</key>
+ <key name="name">$(USER)</key>
+ </section>
+ <section name="matita">
+ <key name="basedir">$(user.home)/.matita</key>
+ <key name="rt_base_dir">/usr/share/matita/</key>
+ <key name="owner">$(user.name)</key>
+ </section>
+</pre><p>
+ </p><p>
+ Matita needs to store/fetch data and metadata. Data is essentially
+ composed of XML files, metadata is a set of tuples for a relational
+ model. Data and metadata can produced by the user or be already
+ available. Both kind of data/metadata can be local and/or remote.
+ </p><p>
+ The db section tells Matita where to store and retrieve metadata,
+ while the getter section describes where XML files have to be
+ found. The following picture describes the suggested configuration.
+ Dashed arrows are determined by the configuration file.
+ </p><div class="figure"><a id="idp68778624"></a><p class="title"><strong>Figure 2.9. Configuring the Databases</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/database.png" alt="How to configure the databases." /></div></div></div><br class="figure-break" /><p>The getter</p><p>
+ Consider the following snippet and the URI
+ <strong class="userinput"><code>cic:/matita/foo/bar.con</code></strong>. If Matita
+ is asked to read that object it will resolve the object trough
+ the getter. Since the first two entries are equally specific
+ (longest match rule applies) first the path
+ <strong class="userinput"><code>file://$(matita.rt_base_dir)/xml/standard-library/foo/bar.con</code></strong>
+ and then <strong class="userinput"><code>file://$(user.home)/.matita/xml/matita/foo/bar.con</code></strong>
+ are inspected.
+ </p><pre class="programlisting">
+
+ <section name="getter">
+ <key name="cache_dir">$(user.home)/.matita/getter/cache</key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(matita.rt_base_dir)/xml/standard-library/
+ ro
+ </key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(user.home)/.matita/xml/matita/
+ </key>
+ <key name="prefix">
+ cic:/Coq/
+ http://mowgli.cs.unibo.it/xml/
+ legacy
+ </key>
+ </section>
+
+ </pre><p>
+ if the same URI has to be written, the former prefix is skipped
+ since it is marked as readonly (<strong class="userinput"><code>ro</code></strong>).
+ Objects resolved using the third prefix are readonly too, and are
+ retrieved using the network. There is no limit to the number of
+ prefixes the user can define. The distinction between prefixes marked
+ as readonly and legacy is that, legacy ones are really read only, while
+ the ones marked with <strong class="userinput"><code>ro</code></strong> are considered for
+ writing when Matita is started in system mode (used to publish user
+ developments in the library space).
+ </p><p>The db</p><p>
+ The database subsystem has three fron ends: library, user and
+ legacy. The latter is the only optional one. Every query is done on
+ every frontend, making the duplicate free union of the results.
+ The user front end kepps metadata produced by the user, and is thus
+ heavily accessed in read/write mode, while the library and legacy
+ fron ends are read only. Every front end can be connected to
+ backend, the storage actually.
+ Consider the following snippet.
+ </p><pre class="programlisting">
+
+ <section name="db">
+ <key name="metadata">mysql://mowgli.cs.unibo.it matita helm none legacy</key>
+ <key name="metadata">file://$(matita.rt_base_dir) metadata.db helm helm library</key>
+ <key name="metadata">file://$(matita.basedir) user.db helm helm user</key>
+ </section>
+
+ </pre><p>
+ Here the usr database is a file (thus locally accessed trough the
+ Sqlite library) placed in the user's home directory. The library one is
+ placed in the Matita runtime directory. The legacy fron end is
+ connected to a remote <span class="application"> <a class="ulink" href="http://www.mysql.com" target="_top">MySQL</a> </span> based storage. Every metadata key
+ takes a path to the storage, the name of the database, the user name,
+ a password (or <strong class="userinput"><code>none</code></strong>) and the name of the front
+ end to which it is attached.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="inst_from_src.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_install.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_gettingstarted.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Installing from sources </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Getting started</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+Matita V0.1.0 User Manual (rev. 1α)
+
+Andrea Asperti
+
+ <asperti@cs.unibo.it>
+
+Claudio Sacerdoti Coen
+
+ <sacerdot@cs.unibo.it>
+
+Ferruccio Guidi
+
+ <fguidi@cs.unibo.it>
+
+Enrico Tassi
+
+ <tassi@cs.unibo.it>
+
+Stefano Zacchiroli
+
+ <zacchiro@cs.unibo.it>
+
+ Copyright © 2006 The HELM team.
+
+ Both Matita and this document are free software, you can
+ redistribute them and/or modify them under the terms of the
+ GNU General Public License as published by the Free Software
+ Foundation. See Chapter 9 for more information.
+ _________________________________________________________
+
+ Table of Contents
+ 1. Introduction
+
+ 1.1. Features
+ 1.2. Matita vs Coq
+
+ 2. Installation
+
+ 2.1. Installing from sources
+
+ 2.1.1. Getting the source code
+ 2.1.2. Requirements
+ 2.1.3. Database setup
+ 2.1.4. Compiling and installing
+
+ 2.2. Configuring Matita
+
+ 3. Getting started
+
+ 3.1. How to type Unicode symbols
+ 3.2. Browsing and searching
+
+ 3.2.1. Browsing the library
+ 3.2.2. Looking at a proof under development
+ 3.2.3. Searching the library
+
+ 3.3. Authoring
+
+ 3.3.1. How to use developments
+ 3.3.2. The authoring interface
+
+ 4. Syntax
+
+ 4.1. Terms & co.
+
+ 4.1.1. Lexical conventions
+ 4.1.2. Terms
+
+ 4.2. Definitions and declarations
+
+ 4.2.1. axiom id: term
+ 4.2.2. definition id[: term] [â term]
+ 4.2.3. [inductive|coinductive] id [args2]⦠: term
+ â [|] [id:term] [| id:term]⦠[with id :
+ term â [|] [id:term] [| id:term]â¦]â¦
+
+ 4.2.4. record id [args2]⦠: term â{[id [:|:>]
+ term] [;id [:|:>] term]â¦}
+
+ 4.3. Proofs
+
+ 4.3.1. theorem id[: term] [â term]
+ 4.3.2. variant id: term â term
+ 4.3.3. lemma id[: term] [â term]
+ 4.3.4. fact id[: term] [â term]
+ 4.3.5. remark id[: term] [â term]
+
+ 4.4. Tactic arguments
+
+ 4.4.1. intros-spec
+ 4.4.2. pattern
+ 4.4.3. reduction-kind
+ 4.4.4. auto-params
+
+ 5. Extending the syntax
+
+ 5.1. Introduction
+
+ 6. Tacticals
+
+ 6.1. Interactive proofs and definitions
+ 6.2. The proof status
+ 6.3. Tacticals
+
+ 7. Tactics
+
+ 7.1. Quick reference card
+ 7.2. absurd
+ 7.3. apply
+ 7.4. applyS
+ 7.5. assumption
+ 7.6. auto
+ 7.7. clear
+ 7.8. clearbody
+ 7.9. change
+ 7.10. constructor
+ 7.11. contradiction
+ 7.12. cut
+ 7.13. decompose
+ 7.14. demodulate
+ 7.15. destruct
+ 7.16. elim
+ 7.17. elimType
+ 7.18. exact
+ 7.19. exists
+ 7.20. fail
+ 7.21. fold
+ 7.22. fourier
+ 7.23. fwd
+ 7.24. generalize
+ 7.25. id
+ 7.26. intro
+ 7.27. intros
+ 7.28. inversion
+ 7.29. lapply
+ 7.30. left
+ 7.31. letin
+ 7.32. normalize
+ 7.33. reduce
+ 7.34. reflexivity
+ 7.35. replace
+ 7.36. rewrite
+ 7.37. right
+ 7.38. ring
+ 7.39. simplify
+ 7.40. split
+ 7.41. subst
+ 7.42. symmetry
+ 7.43. transitivity
+ 7.44. unfold
+ 7.45. whd
+
+ 8. Other commands
+
+ 8.1. alias
+ 8.2. check
+ 8.3. coercion
+ 8.4. default
+ 8.5. hint
+ 8.6. include
+ 8.7. include' "s"
+ 8.8. set
+ 8.9. whelp
+ 8.10. qed
+
+ 9. License
+
+ List of Tables
+ 4-1. qstring
+ 4-2. id
+ 4-3. nat
+ 4-4. char
+ 4-5. uri-step
+ 4-6. uri
+ 4-7. Terms
+ 4-8. Simple terms
+ 4-9. Arguments
+ 4-10. Pattern matching
+ 4-11. intros-spec
+ 4-12. pattern
+ 4-13. path
+ 4-14. reduction-kind
+ 4-15. reduction-kind
+ 6-1. proof script
+ 6-2. proof steps
+ 6-3. tactics and LCF tacticals
+ 7-1. tactics
+ 8-1. clusters
+
+ List of Figures
+ 3-1. The Developments window
+ _________________________________________________________
+
+Chapter 1. Introduction
+
+1.1. Features
+
+ Matita is an interactive theorem prover (or proof assistant)
+ with the following characteristics:
+
+ * It is based on a variant of the Calculus of (Co)Inductive
+ Constructions (CIC). CIC is also the logic of the Coq
+ proof assistant.
+ * It adopts a procedural proof language, but it has a new
+ set of small step tacticals that improve proof structuring
+ and debugging.
+ * It has a stand-alone graphical user interface (GUI)
+ inspired by CtCoq/Proof General. The GUI is implemented
+ according to the state of the art. In particular:
+ + It is based and fully integrated with Gtk/Gnome.
+ + An on-line help can be browsed via the Gnome
+ documentation browser.
+ + Mathematical formulae are rendered in two dimensional
+ notation via MathML and Unicode.
+ * It integrates advanced browsing and searching procedures.
+ * It allows the use of the typical ambiguous mathematical
+ notation by means of a disambiguating parser.
+ * It is compatible with the library of Coq (definitions and
+ proof objects).
+ _________________________________________________________
+
+1.2. Matita vs Coq
+
+ The system shares a common look&feel with the Coq proof
+ assistant and its graphical user interface. The two systems
+ have the same logic, very close proof languages and similar
+ sets of tactics. Moreover, Matita is compatible with the
+ library of Coq. From the user point of view the main lacking
+ features with respect to Coq are:
+
+ * proof extraction;
+ * an extensible language of tactics;
+ * automatic implicit arguments;
+ * several ad-hoc decision procedures;
+ * several rarely used variants for most of the tactics;
+ * sections and local variables. To maintain compatibility
+ with the library of Coq, theorems defined inside sections
+ are abstracted by name over the section variables; their
+ instances are explicitly applied to actual arguments by
+ means of explicit named substitutions.
+
+ Still from the user point of view, the main differences with
+ respect to Coq are:
+
+ * the language of tacticals that allows execution of partial
+ tactical application;
+ * the unification of the concept of metavariable and
+ existential variable;
+ * terms with subterms that cannot be inferred are always
+ allowed as arguments of tactics or other commands;
+ * ambiguous terms are disambiguated by direct interaction
+ with the user;
+ * theorems and definitions in the library are always
+ accessible without needing to require/include them; right
+ now, only notation needs to be included to become active,
+ but we plan to remove this limitation.
+ _________________________________________________________
+
+Chapter 2. Installation
+
+2.1. Installing from sources
+
+ Currently, the only intended way to install Matita is starting
+ from its source code.
+ _________________________________________________________
+
+2.1.1. Getting the source code
+
+ You can get the Matita source code in two ways:
+
+ 1. go to the download page and get the latest released source
+ tarball;
+ 2. get the development sources from our SVN repository. You
+ will need the components/ and matita/ directories from the
+ trunk/helm/software/ directory, plus the configure and
+ Makefile* stuff from the same directory.
+ In this case you will need to run autoconf before
+ proceding with the building instructions below.
+ _________________________________________________________
+
+2.1.2. Requirements
+
+ In order to build Matita from sources you will need some tools
+ and libraries. They are listed below.
+
+ Note Note for Debian users
+
+
+ If you are running a Debian GNU/Linux distribution you can
+ have APT install all the required tools and libraries by
+ adding the following repository to your /etc/apt/sources.list:
+ deb http://people.debian.org/~zack unstable helm
+
+
+ and installing the helm-matita-deps package.
+
+ Required tools and libraries
+
+ OCaml
+ the Objective Caml compiler, version 3.09 or above
+
+ Findlib
+ OCaml package manager, version 1.1.1 or above
+
+ OCaml Expat
+ OCaml bindings for the expat library
+
+ GMetaDOM
+ OCaml bindings for the Gdome 2 library
+
+ OCaml HTTP
+ OCaml library to write HTTP daemons (and clients)
+
+ LablGTK
+ OCaml bindings for the GTK+ library , version 2.6.0 or
+ above
+
+ GtkMathView , LablGtkMathView
+ GTK+ widget to render MathML documents and its OCaml
+ bindings
+
+ GtkSourceView , LablGtkSourceView
+ extension for the GTK+ text widget (adding the typical
+ features of source code editors) and its OCaml bindings
+
+ MySQL , OCaml MySQL
+ SQL database and OCaml bindings for its client-side
+ library
+
+ The SQL database itself is not strictly needed to run
+ Matita, but we stronly encourage its use since a lot of
+ features are disabled without it. Still, the OCaml
+ bindings of the library are needed at compile time.
+
+ Ocamlnet
+ collection of OCaml libraries to deal with
+ application-level Internet protocols and conventions
+
+ ulex
+ Unicode lexer generator for OCaml
+
+ CamlZip
+ OCaml library to access .gz files
+ _________________________________________________________
+
+2.1.3. Database setup
+
+ To fully exploit Matita indexing and search capabilities you
+ will need a working MySQL database. Detalied instructions on
+ how to do it can be found in the MySQL documentation. Here you
+ can find a quick howto.
+
+ In order to create a database you need administrator
+ permissions on your MySQL installation, usually the root
+ account has them. Once you have the permissions, a new
+ database can be created executing mysqladmin create matita
+ (matita is the default database name, you can change it using
+ the db.user key of the configuration file).
+
+ Then you need to grant the necessary access permissions to the
+ database user of Matita, typing echo "grant all privileges on
+ matita.* to helm;" | mysql matita should do the trick (helm is
+ the default user name used by Matita to access the database,
+ you can change it using the db.user key of the configuration
+ file).
+
+ Note
+
+ This way you create a database named matita on which anyone
+ claiming to be the helm user can do everything (like adding
+ dummy data or destroying the contained one). It is strongly
+ suggested to apply more fine grained permissions, how to do it
+ is out of the scope of this manual.
+ _________________________________________________________
+
+2.1.4. Compiling and installing
+
+ Once you get the source code the installations steps should be
+ quite familiar.
+
+ First of all you need to configure the build process executing
+ ./configure. This will check that all needed tools and library
+ are installed and prepare the sources for compilation and
+ installation.
+
+ Quite a few (optional) arguments may be passed to the
+ configure command line to change build time parameters. They
+ are listed below, together with their default values:
+
+ configure command line arguments
+
+ --with-runtime-dir=dir
+ (Default: /usr/local/matita) Runtime base directory
+ where all Matita stuff (executables, configuration
+ files, standard library, ...) will be installed
+
+ --with-dbhost=host
+ (Default: localhost) Default SQL server hostname. Will
+ be used while building the standard library during the
+ installation and to create the default Matita
+ configuration. May be changed later in configuration
+ file.
+
+ --enable-debug
+ (Default: disabled) Enable debugging code. Not for the
+ casual user.
+
+ Then you will manage the build and install process using make
+ as usual. Below are reported the targets you have to invoke in
+ sequence to build and install:
+
+ make targets
+
+ world
+ builds components needed by Matita and Matita itself
+ (in bytecode or native code depending on the
+ availability of the OCaml native code compiler)
+
+ install
+ installs Matita related tools, standard library and the
+ needed runtime stuff in the proper places on the
+ filesystem.
+
+ As a part of the installation process the Matita
+ standard library will be compiled, thus testing that
+ the just built matitac compiler works properly.
+
+ For this step you will need a working SQL database (for
+ indexing the standard library while you are compiling
+ it). See Database setup for instructions on how to set
+ it up.
+ _________________________________________________________
+
+2.2. Configuring Matita
+
+ The file matita.conf.xml... TODO
+ _________________________________________________________
+
+Chapter 3. Getting started
+
+ If you are already familiar with the Calculus of (Co)Inductive
+ Constructions (CIC) and with interactive theorem provers with
+ procedural proof languages (expecially Coq), getting started
+ with Matita is relatively easy. You just need to learn how to
+ type Unicode symbols, how to browse and search the library and
+ how to author a proof script.
+ _________________________________________________________
+
+3.1. How to type Unicode symbols
+
+ Unicode characters can be typed in several ways:
+
+ * Using the "Ctrl+Shift+Unicode code" standard Gnome
+ shortcut. E.g. Ctrl+Shift+3a9 generates "Ω".
+ * Typing the ligature "\name" where "name" is a standard
+ Unicode or LaTeX name for the character. Pressing "Alt+L"
+ just after the last character of the name converts the
+ ligature to the Unicode symbol. This operation is not
+ required since Matita understands also the "\name"
+ sequences. E.g. "\Omega" followed by Alt+L generates "Ω".
+ * Typing one of the following ligatures (and optionally
+ converting the ligature to the Unicode character has
+ described before): ":=" (which stands for â); "->" (which
+ stands for "â"); "=>" (which stands for "â").
+ _________________________________________________________
+
+3.2. Browsing and searching
+
+ The CIC browser is used to browse and search the library. You
+ can open a new CIC browser selecting "New Cic Browser" from
+ the "View" menu of Matita, or by pressing "F3". The CIC
+ browser is similar to a traditional Web browser.
+ _________________________________________________________
+
+3.2.1. Browsing the library
+
+ To browse the library, type in the location bar the absolute
+ URI of the theorem, definition or library fragment you are
+ interested in. "cic:/" is the root of the library.
+ Contributions developed in Matita are under "cic:/matita"; all
+ the others are part of the library of Coq.
+
+ Following the hyperlinks it is possible to navigate in the Web
+ of mathematical notions. Proof are rendered in pseudo-natural
+ language and mathematical notation is used for formulae. For
+ now, mathematical notation must be included in the current
+ script to be activated, but we plan to remove this limitation.
+ _________________________________________________________
+
+3.2.2. Looking at a proof under development
+
+ A proof under development is not yet part of the library. The
+ special URI "about:proof" can be used to browse the proof
+ currently under development, if there is one. The "home"
+ button of the CIC browser sets the location bar to
+ "about:proof".
+ _________________________________________________________
+
+3.2.3. Searching the library
+
+ The query bar of the CIC browser can be used to search the
+ library of Matita for theorems or definitions that match
+ certain criteria. The criteria is given by typing a term in
+ the query bar and selecting an action in the drop down menu
+ right of it.
+ _________________________________________________________
+
+3.2.3.1. Searching by name
+
+ TODO
+ _________________________________________________________
+
+3.2.3.2. List of lemmas that can be applied
+
+ TODO
+ _________________________________________________________
+
+3.2.3.3. Searching by exact match
+
+ TODO
+ _________________________________________________________
+
+3.2.3.4. List of elimination principles for a given type
+
+ TODO
+ _________________________________________________________
+
+3.2.3.5. Searching by instantiation
+
+ TODO
+ _________________________________________________________
+
+3.3. Authoring
+
+3.3.1. How to use developments
+
+ A development is a set of scripts files that are strictly
+ related (i.e. they depend on each other). Matita is able to
+ automatically manage dependencies among the scripts in a
+ development, compiling them in the correct order.
+
+ The include statement can be performed by Matita only if the
+ mentioned script is compiled. If both scripts (the one that
+ includes and the included) are part of the same development,
+ the included script (and recursively all its dependencies) can
+ be compiled automatically. Dependencies among scripts
+ belonging to different developments is not implemented yet.
+
+ The "Developments..." item the File menu (or pressing Ctrl+D)
+ opens the Developments window.
+
+ Figure 3-1. The Developments window
+
+ [developments.png]
+
+ Developments window buttons
+
+ New
+ To create a new Development the user needs to specify a
+ name[1] and the root directory in which all scripts
+ will be placed, eventually organized in subdirectories.
+ The Development should be named as the directory in
+ which it lives. A "makefile" file is placed in the
+ specified root directory. That makefile supports the
+ following targets:
+
+ all
+ Build the whole development.
+
+ clean
+ Cleans the whole development.
+
+ cleanall
+ Resets the user environment (i.e. deleting all
+ the results of compilation of every development,
+ including the contents of the database). This
+ target should be used only in case something goes
+ wrong and Matita behaves incorrectly.
+
+ scriptname.mo
+ Compiles "scriptname.ma"
+
+ Delete
+ Decompiles the whole development and removes it.
+
+ Build
+ Compiles all the scripts in the development.
+
+ Clean
+ Decompiles the whole development.
+
+ Publish
+ All the user developments live in the "user" space.
+ That is, the result of the compilation of scripts is
+ placed in his home directory and the tuples are placed
+ in personal tables inside the database. Publishing a
+ development means putting it in the "library" space.
+ This means putting the result of compilation in the
+ same place where the standard library lives. This
+ feature will be improved in the future to support
+ publishing the development in the "distributed library"
+ space (making your development public).
+
+ Close
+ Closes the Developments window
+ _________________________________________________________
+
+3.3.2. The authoring interface
+
+ TODO
+ _________________________________________________________
+
+Chapter 4. Syntax
+
+ To describe syntax in this manual we use the following
+ conventions:
+
+ 1. Non terminal symbols are emphasized and have a link to
+ their definition. E.g.: term
+ 2. Terminal symbols are in bold. E.g.: theorem
+ 3. Optional sequences of elements are put in square brackets.
+ E.g.: [in term]
+ 4. Alternatives are put in square brakets and they are
+ separated by vertical bars. E.g.: [<|>]
+ 5. Repetitions of a sequence of elements are given by putting
+ the sequence in square brackets, that are followed by
+ three dots. The empty sequence is a valid repetition.
+ E.g.: [and term]â¦
+ 6. Characters belonging to a set of characters are given by
+ listing the set elements in square brackets. Hyphens are
+ used to specify ranges of characters in the set. E.g.:
+ [a-zA-Z0-9_-]
+ _________________________________________________________
+
+4.1. Terms & co.
+
+4.1.1. Lexical conventions
+
+ Table 4-1. qstring
+ qstring ::= "â©â©any sequence of characters excluded "âªâª"
+
+ Table 4-2. id
+ id ::= â©â©any sequence of letters, underscores or valid XML
+ digits prefixed by a latin letter ([a-zA-Z]) and post-fixed by
+ a possible empty sequence of decorators ([?'`])âªâª
+
+ Table 4-3. nat
+ nat ::= â©â©any sequence of valid XML digitsâªâª
+
+ Table 4-4. char
+ char ::= [a-zA-Z0-9_-]
+
+ Table 4-5. uri-step
+ uri-step ::= char[char]â¦
+
+ Table 4-6. uri
+ uri ::=
+ [cic:/|theory:/]uri-step[/uri-step]â¦.id[.id]â¦[#xpointer(nat/
+ nat[/nat]â¦)]
+ _________________________________________________________
+
+4.1.2. Terms
+
+ Table 4-7. Terms
+ term ::= sterm simple or delimited term
+ | term term application
+ | λargs.term λ-abstraction
+ | Î args.term dependent product meant to define a datatype
+ | âargs.term dependent product meant to define a proposition
+ | term â term non-dependent product (logical implication or
+ function space)
+ | let [id|(id: term)] â term in term local definition
+ | let [co]rec rec_def (co)recursive definitions
+ [and rec_def]â¦
+ in term
+ | ⦠user provided notation
+ rec_def ::= id [id|(id[,term]⦠:term)]â¦
+ [on id] [: term] â term]
+
+ Table 4-8. Simple terms
+ sterm ::= (term)
+ | id[\subst[ idâterm [;idâterm]⦠]] identifier with
+ optional explicit named substitution
+ | uri a qualified reference
+ | Prop the impredicative sort of propositions
+ | Set the impredicate sort of datatypes
+ | CProp one fixed predicative sort of constructive
+ propositions
+ | Type one predicative sort of datatypes
+ | ? implicit argument
+ | ?n [[ [_|term]⦠]] metavariable
+ | match term [ in term ] [ return term ] with case analysis
+ [ match_branch[|match_branch]⦠]
+ | (term:term) cast
+ | ⦠user provided notation at precedence 90
+
+ Table 4-9. Arguments
+ args ::= _[: term] ignored argument
+ | (_[: term]) ignored argument
+ | id[,id]â¦[: term]
+ | (id[,id]â¦[: term])
+ args2 ::= id
+ | (id[,id]â¦: term)
+
+ Table 4-10. Pattern matching
+ match_branch ::= match_pattern â term
+ match_pattern ::= id 0-ary constructor
+ | (id id [id]â¦) n-ary constructor (binds the n arguments)
+ _________________________________________________________
+
+4.2. Definitions and declarations
+
+4.2.1. axiom id: term
+
+ axiom H: P
+
+ H is declared as an axiom that states P
+ _________________________________________________________
+
+4.2.2. definition id[: term] [â term]
+
+ definition f: T â t
+
+ f is defined as t; T is its type. An error is raised if the
+ type of t is not convertible to T.
+
+ T is inferred from t if omitted.
+
+ t can be omitted only if T is given. In this case Matita
+ enters in interactive mode and f must be defined by means of
+ tactics.
+
+ Notice that the command is equivalent to theorem f: T â t.
+ _________________________________________________________
+
+4.2.3. [inductive|coinductive] id [args2]⦠: term â [|] [id:term]
+[| id:term]⦠[with id : term â [|] [id:term] [| id:term]â¦]â¦
+
+ inductive i x y z: S â k1:T1 | ⦠| kn:Tn with i' : S' â
+ k1':T1' | ⦠| km':Tm'
+
+ Declares a family of two mutually inductive types i and i'
+ whose types are S and S', which must be convertible to sorts.
+
+ The constructors ki of type Ti and ki' of type Ti' are also
+ simultaneously declared. The declared types i and i' may occur
+ in the types of the constructors, but only in strongly
+ positive positions according to the rules of the calculus.
+
+ The whole family is parameterized over the arguments x,y,z.
+
+ If the keyword coinductive is used, the declared types are
+ considered mutually coinductive.
+
+ Elimination principles for the record are automatically
+ generated by Matita, if allowed by the typing rules of the
+ calculus according to the sort S. If generated, they are named
+ i_ind, i_rec and i_rect according to the sort of their
+ induction predicate.
+ _________________________________________________________
+
+4.2.4. record id [args2]⦠: term â{[id [:|:>] term] [;id [:|:>]
+term]â¦}
+
+ record id x y z: S â { f1: T1; â¦; fn:Tn }
+
+ Declares a new record family id parameterized over x,y,z.
+
+ S is the type of the record and it must be convertible to a
+ sort.
+
+ Each field fi is declared by giving its type Ti. A record
+ without any field is admitted.
+
+ Elimination principles for the record are automatically
+ generated by Matita, if allowed by the typing rules of the
+ calculus according to the sort S. If generated, they are named
+ i_ind, i_rec and i_rect according to the sort of their
+ induction predicate.
+
+ For each field fi a record projection fi is also automatically
+ generated if projection is allowed by the typing rules of the
+ calculus according to the sort S, the type T1 and the
+ definability of depending record projections.
+
+ If the type of a field is declared with :>, the corresponding
+ record projection becomes an implicit coercion. This is just
+ syntactic sugar and it has the same effect of declaring the
+ record projection as a coercion later on.
+ _________________________________________________________
+
+4.3. Proofs
+
+4.3.1. theorem id[: term] [â term]
+
+ theorem f: P â p
+
+ Proves a new theorem f whose thesis is P.
+
+ If p is provided, it must be a proof term for P. Otherwise an
+ interactive proof is started.
+
+ P can be omitted only if the proof is not interactive.
+
+ Proving a theorem already proved in the library is an error.
+ To provide an alternative name and proof for the same theorem,
+ use variant f: P â p.
+
+ A warning is raised if the name of the theorem cannot be
+ obtained by mangling the name of the constants in its thesis.
+
+ Notice that the command is equivalent to definition f: T â t.
+ _________________________________________________________
+
+4.3.2. variant id: term â term
+
+ variant f: T â t
+
+ Same as theorem f: T â t, but it does not complain if the
+ theorem has already been proved. To be used to give an
+ alternative name or proof to a theorem.
+ _________________________________________________________
+
+4.3.3. lemma id[: term] [â term]
+
+ lemma f: T â t
+
+ Same as theorem f: T â t
+ _________________________________________________________
+
+4.3.4. fact id[: term] [â term]
+
+ fact f: T â t
+
+ Same as theorem f: T â t
+ _________________________________________________________
+
+4.3.5. remark id[: term] [â term]
+
+ remark f: T â t
+
+ Same as theorem f: T â t
+ _________________________________________________________
+
+4.4. Tactic arguments
+
+ This section documents the syntax of some recurring arguments
+ for tactics.
+ _________________________________________________________
+
+4.4.1. intros-spec
+
+ Table 4-11. intros-spec
+ intros-spec ::= [nat] [([id]â¦)]
+
+ The natural number is the number of new hypotheses to be
+ introduced. The list of identifiers gives the name for the
+ first hypotheses.
+ _________________________________________________________
+
+4.4.2. pattern
+
+ Table 4-12. pattern
+ pattern ::= in [id[: path]]⦠[⢠path]] simple pattern
+ | in match term [in [id[: path]]⦠[⢠path]] full pattern
+
+ Table 4-13. path
+ path ::= â©â©any sterm whithout occurrences of Set, Prop,
+ CProp, Type, id, uri and user provided notation; however, % is
+ now an additional production for stermâªâª
+
+ A path locates zero or more subterms of a given term by
+ mimicking the term structure up to:
+
+ 1. Occurrences of the subterms to locate that are represented
+ by %.
+ 2. Subterms without any occurrence of subterms to locate that
+ can be represented by ?.
+
+ For instance, the path â_,_:?.(? ? % ?)â(? ? ? %) locates at
+ once the subterms x+y and x*y in the term âx,y:nat.x+y=1â0=x*y
+ (where the notation A=B hides the term (eq T A B) for some
+ type T).
+
+ A simple pattern extends paths to locate subterms in a whole
+ sequent. In particular, the pattern in H: p K: q ⢠r locates
+ at once all the subterms located by the pattern r in the
+ conclusion of the sequent and by the patterns p and q in the
+ hypotheses H and K of the sequent.
+
+ If no list of hypotheses is provided in a simple pattern, no
+ subterm is selected in the hypothesis. If the ⢠p part of the
+ pattern is not provided, no subterm will be matched in the
+ conclusion if at least one hypothesis is provided; otherwise
+ the whole conclusion is selected.
+
+ Finally, a full pattern is interpreted in three steps. In the
+ first step the match T in part is ignored and a set S of
+ subterms is located as for the case of simple patterns. In the
+ second step the term T is parsed and interpreted in the
+ context of each subterm s â S. In the last term for each s â S
+ the interpreted term T computed in the previous step is looked
+ for. The final set of subterms located by the full pattern is
+ the set of occurrences of the interpreted T in the subterms s.
+
+ A full pattern can always be replaced by a simple pattern,
+ often at the cost of increased verbosity or decreased
+ readability.
+
+ Example: the pattern ⢠in match x+y in â_,_:?.(? ? % ?)
+ locates only the first occurrence of x+y in the sequent x,y:
+ nat ⢠âz,w:nat. (x+y) * (z+w) = z * (x+y) + w * (x+y). The
+ corresponding simple pattern is ⢠â_,_:?.(? ? (? % ?) ?).
+
+ Every tactic that acts on subterms of the selected sequents
+ have a pattern argument for uniformity. To automatically
+ generate a simple pattern:
+
+ 1. Select in the current goal the subterms to pass to the
+ tactic by using the mouse. In order to perform a multiple
+ selection of subterms, hold the Ctrl key while selecting
+ every subterm after the first one.
+ 2. From the contextual menu select "Copy".
+ 3. From the "Edit" or the contextual menu select "Paste as
+ pattern"
+ _________________________________________________________
+
+4.4.3. reduction-kind
+
+ Reduction kinds are normalization functions that transform a
+ term to a convertible but simpler one. Each reduction kind can
+ be used both as a tactic argument and as a stand-alone tactic.
+
+ Table 4-14. reduction-kind
+ reduction-kind ::= normalize Computes the βδιζ-normal form
+ | reduce Computes the βδιζ-normal form
+ | simplify Computes a form supposed to be simpler
+ | unfold [sterm] δ-reduces the constant or variable if
+ specified, or that in head position
+ | whd Computes the βδιζ-weak-head normal form
+ _________________________________________________________
+
+4.4.4. auto-params
+
+ TODO
+
+ Table 4-15. reduction-kind
+ auto_params ::= depth=â« TODO
+ | width=â« TODO
+ | TODO TODO
+ _________________________________________________________
+
+Chapter 5. Extending the syntax
+
+5.1. Introduction
+
+ TODO
+
+ notation: TODO
+
+ interpretation: TODO
+ _________________________________________________________
+
+Chapter 6. Tacticals
+
+6.1. Interactive proofs and definitions
+
+ An interactive definition is started by giving a definition
+ command omitting the definiens. An interactive proof is
+ started by using one of the proof commands omitting an
+ explicit proof term.
+
+ An interactive proof or definition can and must be terminated
+ by a qed command when no more sequents are left to prove.
+ Between the command that starts the interactive session and
+ the qed command the user must provide a procedural proof
+ script made of tactics structured by means of tacticals.
+
+ In the tradition of the LCF system, tacticals can be
+ considered higher order tactics. Their syntax is structured
+ and they are executed atomically. On the contrary, in Matita
+ the syntax of several tacticals is destructured into a
+ sequence of tokens and tactics in such a way that is is
+ possible to stop execution after every single token or tactic.
+ The original semantics is preserved: the execution of the
+ whole sequence yields the result expected by the original
+ LCF-like tactical.
+ _________________________________________________________
+
+6.2. The proof status
+
+ During an interactive proof, the proof status is made of the
+ set of sequents to prove and the partial proof built so far.
+
+ The partial proof can be inspected on demand in the CIC
+ browser. It will be shown in pseudo-natural language produced
+ on the fly from the proof term.
+
+ The set of sequents to prove is shown in the notebook of the
+ authoring interface, in the top-right corner of the main
+ window of Matita. Each tab shows a different sequent, named
+ with a question mark followed by a number. The current role of
+ the sequent, according to the following description, is also
+ shown in the tab tag.
+
+ 1. Selected sequents (name in boldface, e.g. ?3). The next
+ tactic will be applied to every selected sequent,
+ producing new selected sequents. Tacticals such as
+ branching ("[") or "focus" can be used to change the set
+ of selected sequents.
+ 2. Sibling sequents (name prefixed by a vertical bar and
+ their position, e.g. |[3]?2). When the set of selected
+ sequents has more than one element, the user can decide to
+ focus in turn on each of them. The branching tactical
+ ("[") selects the first sequent only, marking every
+ previously selected sequent as a sibling sequent. Each
+ sibling sequent is given a different position. The
+ tactical "2,3:" can be used to select one or more sibling
+ sequents, different from the one proposed, according to
+ their position. Once the user starts to work on the
+ selected sibling sequents it becomes impossible to select
+ a new set of siblings until the ("|") tactical is used to
+ end work on the current one.
+ 3. Automatically solved sibling sequents (name strokethrough,
+ e.g. |[3]?2). Sometimes a tactic can close by side effects
+ a sibling sequent the user has not selected yet. The
+ sequent is left in the automatically solved status in
+ order for the user to explicitly accept (using the "skip"
+ tactical) the automatic instantiation in the proof script.
+ This way the correspondence between the number of branches
+ in the proof script and the number of sequents generated
+ in the proof is preserved.
+ _________________________________________________________
+
+6.3. Tacticals
+
+ Table 6-1. proof script
+ proof-script ::= proof-step [proof-step]â¦
+
+ Every proof step can be immediately executed.
+
+ Table 6-2. proof steps
+ proof-step ::= LCF-tactical The tactical is applied to each
+ selected sequent. Each new sequent becomes a selected sequent.
+ | . The first selected sequent becomes the only one
+ selected. All the remaining previously selected sequents are
+ proposed to the user one at a time when the next "." is used.
+ | ; Nothing changes. Use this proof step as a separator in
+ concrete syntax.
+ | [ Every selected sequent becomes a sibling sequent that
+ constitute a branch in the proof. Moreover, the first sequent
+ is also selected.
+ | | Stop working on the current branch of the innermost
+ branching proof. The sibling branches become the sibling
+ sequents and the first one is also selected.
+ | nat[,nat]â¦: The sibling sequents specified by the user
+ become the next selected sequents.
+ | *: Every sibling branch not considered yet in the
+ innermost branching proof becomes a selected sequent.
+ | skip Accept the automatically provided instantiation (not
+ shown to the user) for the currently selected automatically
+ closed sibling sequent.
+ | ] Stop analyzing branches for the innermost branching
+ proof. Every sequent opened during the branching proof and not
+ closed yet becomes a selected sequent.
+ | focus nat [nat]⦠Selects the sequents specified by the
+ user. The selected sequents must be completely closed (no new
+ sequents left open) before doing an "unfocus that restores the
+ current set of sibling branches.
+ | unfocus Used to match the innermost "focus" tactical when
+ all the sequents selected by it have been closed. Until
+ "unfocus" is performed, it is not possible to progress in the
+ rest of the proof.
+
+ Table 6-3. tactics and LCF tacticals
+ LCF-tactical ::= tactic Applies the specified tactic.
+ | LCF-tactical ; LCF-tactical Applies the first tactical
+ first and the second tactical to each sequent opened by the
+ first one.
+ | LCF-tactical [ [LCF-tactical] [| LCF-tactical]⦠] Applies
+ the first tactical first and each tactical in the list of
+ tacticals to the corresponding sequent opened by the first
+ one. The number of tacticals provided in the list must be
+ equal to the number of sequents opened by the first tactical.
+ | do nat LCF-tactical end TODO
+ | repeat LCF-tactical end TODO
+ | first [ [LCF-tactical] [| LCF-tactical]⦠] TODO
+ | try LCF-tactical TODO
+ | solve [ [LCF-tactical] [| LCF-tactical]⦠] TODO
+ | (LCF-tactical) Used for grouping during parsing.
+ _________________________________________________________
+
+Chapter 7. Tactics
+
+7.1. Quick reference card
+
+ Table 7-1. tactics
+ tactic ::= absurd sterm
+ | apply sterm
+ | applyS sterm
+ | assumption
+ | auto [depth=nat] [width=nat] [paramodulation] [full]
+ | change pattern with sterm
+ | clear id [idâ¦]
+ | clearbody id
+ | constructor nat
+ | contradiction
+ | cut sterm [as id]
+ | decompose [( id⦠)] [id] [as idâ¦]
+ | demodulate
+ | destruct sterm
+ | elim sterm [using sterm] intros-spec
+ | elimType sterm [using sterm] intros-spec
+ | exact sterm
+ | exists
+ | fail
+ | fold reduction-kind sterm pattern
+ | fourier
+ | fwd id [as id [id]â¦]
+ | generalize pattern [as id]
+ | id
+ | intro [id]
+ | intros intros-spec
+ | inversion sterm
+ | lapply [linear] [depth=nat] sterm [to sterm [,stermâ¦] ]
+ [as id]
+ | left
+ | letin id â sterm
+ | normalize pattern
+ | reduce pattern
+ | reflexivity
+ | replace pattern with sterm
+ | rewrite [<|>] sterm pattern
+ | right
+ | ring
+ | simplify pattern
+ | split
+ | subst
+ | symmetry
+ | transitivity sterm
+ | unfold [sterm] pattern
+ | whd pattern
+ _________________________________________________________
+
+7.2. absurd
+
+ absurd P
+
+ Synopsis:
+ absurd sterm
+
+ Pre-conditions:
+ P must have type Prop.
+
+ Action:
+ It closes the current sequent by eliminating an absurd
+ term.
+
+ New sequents to prove:
+ It opens two new sequents of conclusion P and ¬P.
+ _________________________________________________________
+
+7.3. apply
+
+ apply t
+
+ Synopsis:
+ apply sterm
+
+ Pre-conditions:
+ t must have type T[1] â ... â T[n] â G where G can be
+ unified with the conclusion of the current sequent.
+
+ Action:
+ It closes the current sequent by applying t to n
+ implicit arguments (that become new sequents).
+
+ New sequents to prove:
+ It opens a new sequent for each premise T[i] that is
+ not instantiated by unification. T[i] is the conclusion
+ of the i-th new sequent to prove.
+ _________________________________________________________
+
+7.4. applyS
+
+ applyS t auto_params
+
+ Synopsis:
+ applyS sterm auto_params
+
+ Pre-conditions:
+ t must have type T[1] â ... â T[n] â G.
+
+ Action:
+ applyS is useful when apply fails because the current
+ goal and the conclusion of the applied theorems are
+ extensionally equivalent up to instantiation of
+ metavariables, but cannot be unified. E.g. the goal is
+ P(n*O+m) and the theorem to be applied proves
+ âm.P(m+O).
+
+ It tries to automatically rewrite the current goal
+ using auto paramodulation to make it unifiable with G.
+ Then it closes the current sequent by applying t to n
+ implicit arguments (that become new sequents). The
+ auto_params parameters are passed directly to auto
+ paramodulation.
+
+ New sequents to prove:
+ It opens a new sequent for each premise T[i] that is
+ not instantiated by unification. T[i] is the conclusion
+ of the i-th new sequent to prove.
+ _________________________________________________________
+
+7.5. assumption
+
+ assumption
+
+ Synopsis:
+ assumption
+
+ Pre-conditions:
+ There must exist an hypothesis whose type can be
+ unified with the conclusion of the current sequent.
+
+ Action:
+ It closes the current sequent exploiting an hypothesis.
+
+ New sequents to prove:
+ None
+ _________________________________________________________
+
+7.6. auto
+
+ auto depth=d width=w paramodulation full
+
+ Synopsis:
+ auto [depth=nat] [width=nat] [paramodulation] [full]
+
+ Pre-conditions:
+ None, but the tactic may fail finding a proof if every
+ proof is in the search space that is pruned away.
+ Pruning is controlled by d and w. Moreover, only lemmas
+ whose type signature is a subset of the signature of
+ the current sequent are considered. The signature of a
+ sequent is ...TODO
+
+ Action:
+ It closes the current sequent by repeated application
+ of rewriting steps (unless paramodulation is omitted),
+ hypothesis and lemmas in the library.
+
+ New sequents to prove:
+ None
+ _________________________________________________________
+
+7.7. clear
+
+ clear H[1] ... H[m]
+
+ Synopsis:
+ clear id [idâ¦]
+
+ Pre-conditions:
+ H[1] ... H[m] must be hypotheses of the current sequent
+ to prove.
+
+ Action:
+ It hides the hypotheses H[1] ... H[m] from the current
+ sequent.
+
+ New sequents to prove:
+ None
+ _________________________________________________________
+
+7.8. clearbody
+
+ clearbody H
+
+ Synopsis:
+ clearbody id
+
+ Pre-conditions:
+ H must be an hypothesis of the current sequent to
+ prove.
+
+ Action:
+ It hides the definiens of a definition in the current
+ sequent context. Thus the definition becomes an
+ hypothesis.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.9. change
+
+ change patt with t
+
+ Synopsis:
+ change pattern with sterm
+
+ Pre-conditions:
+ Each subterm matched by the pattern must be convertible
+ with the term t disambiguated in the context of the
+ matched subterm.
+
+ Action:
+ It replaces the subterms of the current sequent matched
+ by patt with the new term t. For each subterm matched
+ by the pattern, t is disambiguated in the context of
+ the subterm.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.10. constructor
+
+ constructor n
+
+ Synopsis:
+ constructor nat
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ inductive type or the application of an inductive type
+ with at least n constructors.
+
+ Action:
+ It applies the n-th constructor of the inductive type
+ of the conclusion of the current sequent.
+
+ New sequents to prove:
+ It opens a new sequent for each premise of the
+ constructor that can not be inferred by unification.
+ For more details, see the apply tactic.
+ _________________________________________________________
+
+7.11. contradiction
+
+ contradiction
+
+ Synopsis:
+ contradiction
+
+ Pre-conditions:
+ There must be in the current context an hypothesis of
+ type False.
+
+ Action:
+ It closes the current sequent by applying an hypothesis
+ of type False.
+
+ New sequents to prove:
+ None
+ _________________________________________________________
+
+7.12. cut
+
+ cut P as H
+
+ Synopsis:
+ cut sterm [as id]
+
+ Pre-conditions:
+ P must have type Prop.
+
+ Action:
+ It closes the current sequent.
+
+ New sequents to prove:
+ It opens two new sequents. The first one has an extra
+ hypothesis H:P. If H is omitted, the name of the
+ hypothesis is automatically generated. The second
+ sequent has conclusion P and hypotheses the hypotheses
+ of the current sequent to prove.
+ _________________________________________________________
+
+7.13. decompose
+
+ decompose (T[1] ... T[n]) H as H[1] ... H[m]
+
+ Synopsis:
+ decompose [( id⦠)] [id] [as idâ¦]
+
+ Pre-conditions:
+ H must inhabit one inductive type among T[1] ... T[n]
+ and the types of a predefined list.
+
+ Action:
+ Runs elim H H[1] ... H[m] , clears H and tries to run
+ itself recursively on each new identifier introduced by
+ elim in the opened sequents. If H is not provided tries
+ this operation on each premise in the current context.
+
+ New sequents to prove:
+ The ones generated by all the elim tactics run.
+ _________________________________________________________
+
+7.14. demodulate
+
+ demodulate
+
+ Synopsis:
+ demodulate
+
+ Pre-conditions:
+ None.
+
+ Action:
+ TODO
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.15. destruct
+
+ destruct p
+
+ Synopsis:
+ destruct sterm
+
+ Pre-conditions:
+ p must have type E[1] = E[2] where the two sides of the
+ equality are possibly applied constructors of an
+ inductive type.
+
+ Action:
+ The tactic recursively compare the two sides of the
+ equality looking for different constructors in
+ corresponding position. If two of them are found, the
+ tactic closes the current sequent by proving the
+ absurdity of p. Otherwise it adds a new hypothesis for
+ each leaf of the formula that states the equality of
+ the subformulae in the corresponding positions on the
+ two sides of the equality.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.16. elim
+
+ elim t using th hyps
+
+ Synopsis:
+ elim sterm [using sterm] intros-spec
+
+ Pre-conditions:
+ t must inhabit an inductive type and th must be an
+ elimination principle for that inductive type. If th is
+ omitted the appropriate standard elimination principle
+ is chosen.
+
+ Action:
+ It proceeds by cases on the values of t, according to
+ the elimination principle th.
+
+ New sequents to prove:
+ It opens one new sequent for each case. The names of
+ the new hypotheses are picked by hyps, if provided. If
+ hyps specifies also a number of hypotheses that is less
+ than the number of new hypotheses for a new sequent,
+ then the exceeding hypothesis will be kept as
+ implications in the conclusion of the sequent.
+ _________________________________________________________
+
+7.17. elimType
+
+ elimType T using th hyps
+
+ Synopsis:
+ elimType sterm [using sterm] intros-spec
+
+ Pre-conditions:
+ T must be an inductive type.
+
+ Action:
+ TODO (severely bugged now).
+
+ New sequents to prove:
+ TODO
+ _________________________________________________________
+
+7.18. exact
+
+ exact p
+
+ Synopsis:
+ exact sterm
+
+ Pre-conditions:
+ The type of p must be convertible with the conclusion
+ of the current sequent.
+
+ Action:
+ It closes the current sequent using p.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.19. exists
+
+ exists
+
+ Synopsis:
+ exists
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ inductive type or the application of an inductive type
+ with at least one constructor.
+
+ Action:
+ Equivalent to constructor 1.
+
+ New sequents to prove:
+ It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the
+ conclusion of the current sequent. For more details,
+ see the constructor tactic.
+ _________________________________________________________
+
+7.20. fail
+
+ fail
+
+ Synopsis:
+ fail
+
+ Pre-conditions:
+ None.
+
+ Action:
+ This tactic always fail.
+
+ New sequents to prove:
+ N.A.
+ _________________________________________________________
+
+7.21. fold
+
+ fold red t patt
+
+ Synopsis:
+ fold reduction-kind sterm pattern
+
+ Pre-conditions:
+ The pattern must not specify the wanted term.
+
+ Action:
+ First of all it locates all the subterms matched by
+ patt. In the context of each matched subterm it
+ disambiguates the term t and reduces it to its red
+ normal form; then it replaces with t every occurrence
+ of the normal form in the matched subterm.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.22. fourier
+
+ fourier
+
+ Synopsis:
+ fourier
+
+ Pre-conditions:
+ The conclusion of the current sequent must be a linear
+ inequation over real numbers taken from standard
+ library of Coq. Moreover the inequations in the
+ hypotheses must imply the inequation in the conclusion
+ of the current sequent.
+
+ Action:
+ It closes the current sequent by applying the Fourier
+ method.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.23. fwd
+
+ fwd H as H[0] ... H[n]
+
+ Synopsis:
+ fwd id [as id [id]â¦]
+
+ Pre-conditions:
+ The type of H must be the premise of a forward
+ simplification theorem.
+
+ Action:
+ This tactic is under development. It simplifies the
+ current context by removing H using the following
+ methods: forward application (by lapply) of a suitable
+ simplification theorem, chosen automatically, of which
+ the type of H is a premise, decomposition (by
+ decompose), rewriting (by rewrite). H[0] ... H[n] are
+ passed to the tactics fwd invokes, as names for the
+ premise they introduce.
+
+ New sequents to prove:
+ The ones opened by the tactics fwd invokes.
+ _________________________________________________________
+
+7.24. generalize
+
+ generalize patt as H
+
+ Synopsis:
+ generalize pattern [as id]
+
+ Pre-conditions:
+ All the terms matched by patt must be convertible and
+ close in the context of the current sequent.
+
+ Action:
+ It closes the current sequent by applying a stronger
+ lemma that is proved using the new generated sequent.
+
+ New sequents to prove:
+ It opens a new sequent where the current sequent
+ conclusion G is generalized to âx.G{x/t} where {x/t} is
+ a notation for the replacement with x of all the
+ occurrences of the term t matched by patt. If patt
+ matches no subterm then t is defined as the wanted part
+ of the pattern.
+ _________________________________________________________
+
+7.25. id
+
+ id
+
+ Synopsis:
+ id
+
+ Pre-conditions:
+ None.
+
+ Action:
+ This identity tactic does nothing without failing.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.26. intro
+
+ intro H
+
+ Synopsis:
+ intro [id]
+
+ Pre-conditions:
+ The conclusion of the sequent to prove must be an
+ implication or a universal quantification.
+
+ Action:
+ It applies the right introduction rule for implication,
+ closing the current sequent.
+
+ New sequents to prove:
+ It opens a new sequent to prove adding to the
+ hypothesis the antecedent of the implication and
+ setting the conclusion to the consequent of the
+ implicaiton. The name of the new hypothesis is H if
+ provided; otherwise it is automatically generated.
+ _________________________________________________________
+
+7.27. intros
+
+ intros hyps
+
+ Synopsis:
+ intros intros-spec
+
+ Pre-conditions:
+ If hyps specifies a number of hypotheses to introduce,
+ then the conclusion of the current sequent must be
+ formed by at least that number of imbricated
+ implications or universal quantifications.
+
+ Action:
+ It applies several times the right introduction rule
+ for implication, closing the current sequent.
+
+ New sequents to prove:
+ It opens a new sequent to prove adding a number of new
+ hypotheses equal to the number of new hypotheses
+ requested. If the user does not request a precise
+ number of new hypotheses, it adds as many hypotheses as
+ possible. The name of each new hypothesis is either
+ popped from the user provided list of names, or it is
+ automatically generated when the list is (or becomes)
+ empty.
+ _________________________________________________________
+
+7.28. inversion
+
+ inversion t
+
+ Synopsis:
+ inversion sterm
+
+ Pre-conditions:
+ The type of the term t must be an inductive type or the
+ application of an inductive type.
+
+ Action:
+ It proceeds by cases on t paying attention to the
+ constraints imposed by the actual "right arguments" of
+ the inductive type.
+
+ New sequents to prove:
+ It opens one new sequent to prove for each case in the
+ definition of the type of t. With respect to a simple
+ elimination, each new sequent has additional hypotheses
+ that states the equalities of the "right parameters" of
+ the inductive type with terms originally present in the
+ sequent to prove.
+ _________________________________________________________
+
+7.29. lapply
+
+ lapply linear depth=d t to t[1], ..., t[n] as H
+
+ Synopsis:
+ lapply [linear] [depth=nat] sterm [to sterm [,stermâ¦]
+ ] [as id]
+
+ Pre-conditions:
+ t must have at least d independent premises and n must
+ not be greater than d.
+
+ Action:
+ Invokes letin H â (t ? ... ?) with enough ?'s to reach
+ the d-th independent premise of t (d is maximum if
+ unspecified). Then istantiates (by apply) with t[1],
+ ..., t[n] the ?'s corresponding to the first n
+ independent premises of t. Usually the other ?'s
+ preceding the n-th independent premise of t are
+ istantiated as a consequence. If the linear flag is
+ specified and if t, t[1], ..., t[n] are (applications
+ of) premises in the current context, they are cleared.
+
+ New sequents to prove:
+ The ones opened by the tactics lapply invokes.
+ _________________________________________________________
+
+7.30. left
+
+ left
+
+ Synopsis:
+ left
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ inductive type or the application of an inductive type
+ with at least one constructor.
+
+ Action:
+ Equivalent to constructor 1.
+
+ New sequents to prove:
+ It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the
+ conclusion of the current sequent. For more details,
+ see the constructor tactic.
+ _________________________________________________________
+
+7.31. letin
+
+ letin x â t
+
+ Synopsis:
+ letin id â sterm
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It adds to the context of the current sequent to prove
+ a new definition x â t.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.32. normalize
+
+ normalize patt
+
+ Synopsis:
+ normalize pattern
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It replaces all the terms matched by patt with their
+ βδιζ-normal form.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.33. reduce
+
+ reduce patt
+
+ Synopsis:
+ reduce pattern
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It replaces all the terms matched by patt with their
+ βδιζ-normal form.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.34. reflexivity
+
+ reflexivity
+
+ Synopsis:
+ reflexivity
+
+ Pre-conditions:
+ The conclusion of the current sequent must be t=t for
+ some term t
+
+ Action:
+ It closes the current sequent by reflexivity of
+ equality.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.35. replace
+
+ change patt with t
+
+ Synopsis:
+ replace pattern with sterm
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It replaces the subterms of the current sequent matched
+ by patt with the new term t. For each subterm matched
+ by the pattern, t is disambiguated in the context of
+ the subterm.
+
+ New sequents to prove:
+ For each matched term t' it opens a new sequent to
+ prove whose conclusion is t'=t.
+ _________________________________________________________
+
+7.36. rewrite
+
+ rewrite dir p patt
+
+ Synopsis:
+ rewrite [<|>] sterm pattern
+
+ Pre-conditions:
+ p must be the proof of an equality, possibly under some
+ hypotheses.
+
+ Action:
+ It looks in every term matched by patt for all the
+ occurrences of the left hand side of the equality that
+ p proves (resp. the right hand side if dir is <). Every
+ occurence found is replaced with the opposite side of
+ the equality.
+
+ New sequents to prove:
+ It opens one new sequent for each hypothesis of the
+ equality proved by p that is not closed by unification.
+ _________________________________________________________
+
+7.37. right
+
+ right
+
+ Synopsis:
+ right
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ inductive type or the application of an inductive type
+ with at least two constructors.
+
+ Action:
+ Equivalent to constructor 2.
+
+ New sequents to prove:
+ It opens a new sequent for each premise of the second
+ constructor of the inductive type that is the
+ conclusion of the current sequent. For more details,
+ see the constructor tactic.
+ _________________________________________________________
+
+7.38. ring
+
+ ring
+
+ Synopsis:
+ ring
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ equality over Coq's real numbers that can be proved
+ using the ring properties of the real numbers only.
+
+ Action:
+ It closes the current sequent veryfying the equality by
+ means of computation (i.e. this is a reflexive tactic,
+ implemented exploiting the "two level reasoning"
+ technique).
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.39. simplify
+
+ simplify patt
+
+ Synopsis:
+ simplify pattern
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It replaces all the terms matched by patt with other
+ convertible terms that are supposed to be simpler.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.40. split
+
+ split
+
+ Synopsis:
+ split
+
+ Pre-conditions:
+ The conclusion of the current sequent must be an
+ inductive type or the application of an inductive type
+ with at least one constructor.
+
+ Action:
+ Equivalent to constructor 1.
+
+ New sequents to prove:
+ It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the
+ conclusion of the current sequent. For more details,
+ see the constructor tactic.
+ _________________________________________________________
+
+7.41. subst
+
+ subst
+
+ Synopsis:
+ subst
+
+ Pre-conditions:
+ None.
+
+ Action:
+ For each premise of the form H: x = t or H: t = x where
+ x is a local variable and t does not depend on x, the
+ tactic rewrites H wherever x appears clearing H and x
+ afterwards.
+
+ New sequents to prove:
+ The one opened by the applied tactics.
+ _________________________________________________________
+
+7.42. symmetry
+
+ The tactic symmetry
+
+ symmetry
+
+ Synopsis:
+ symmetry
+
+ Pre-conditions:
+ The conclusion of the current proof must be an
+ equality.
+
+ Action:
+ It swaps the two sides of the equalityusing the
+ symmetric property.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.43. transitivity
+
+ transitivity t
+
+ Synopsis:
+ transitivity sterm
+
+ Pre-conditions:
+ The conclusion of the current proof must be an
+ equality.
+
+ Action:
+ It closes the current sequent by transitivity of the
+ equality.
+
+ New sequents to prove:
+ It opens two new sequents l=t and t=r where l and r are
+ the left and right hand side of the equality in the
+ conclusion of the current sequent to prove.
+ _________________________________________________________
+
+7.44. unfold
+
+ unfold t patt
+
+ Synopsis:
+ unfold [sterm] pattern
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It finds all the occurrences of t (possibly applied to
+ arguments) in the subterms matched by patt. Then it
+ δ-expands each occurrence, also performing
+ β-reduction of the obtained term. If t is omitted it
+ defaults to each subterm matched by patt.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+7.45. whd
+
+ whd patt
+
+ Synopsis:
+ whd pattern
+
+ Pre-conditions:
+ None.
+
+ Action:
+ It replaces all the terms matched by patt with their
+ βδιζ-weak-head normal form.
+
+ New sequents to prove:
+ None.
+ _________________________________________________________
+
+Chapter 8. Other commands
+
+8.1. alias
+
+ alias id "s" = "def"
+
+ alias symbol "s" (instance n) = "def"
+
+ alias num (instance n) = "def"
+
+ Synopsis:
+ alias [id qstring = qstring | symbol qstring [(instance
+ nat)] = qstring | num [(instance nat)] = qstring ]
+
+ Action:
+ Used to give an hint to the disambiguating parser. When
+ the parser is faced to the identifier (or symbol) s or
+ to any number, it will prefer interpretations that "map
+ s (or the number) to def". For identifiers, "def" is
+ the URI of the interpretation. E.g.:
+ cic:/matita/nat/nat.ind#xpointer(1/1/1) for the first
+ constructor of the first inductive type defined in the
+ block of inductive type(s) cic:/matita/nat/nat.ind. For
+ symbols and numbers, "def" is the label used to mark
+ the wanted interpretation.
+
+ When a symbol or a number occurs several times in the
+ term to be parsed, it is possible to give an hint only
+ for the instance n. When the instance is omitted, the
+ hint is valid for every occurrence.
+
+ Hints are automatically inserted in the script by
+ Matita every time the user is interactively asked a
+ question to disambiguate a term. This way the user
+ won't be posed the same question twice when the script
+ will be executed again.
+ _________________________________________________________
+
+8.2. check
+
+ check t
+
+ Synopsis:
+ check term
+
+ Action:
+ Opens a CIC browser window that shows t together with
+ its type. The command is immediately removed from the
+ script.
+ _________________________________________________________
+
+8.3. coercion
+
+ coercion u
+
+ Synopsis:
+ coercion uri
+
+ Action:
+ Declares u as an implicit coercion from the type of its
+ last argument (source) to its codomain (target). Every
+ time a term x of type source is used with expected type
+ target, Matita automatically replaces x with (u ? ⦠?
+ x) to avoid a typing error.
+
+ Implicit coercions are not displayed to the user: (u ?
+ ⦠? x) is rendered simply as x.
+
+ When a coercion u is declared from source s to target t
+ and there is already a coercion u' of target s or
+ source t, a composite implicit coercion is
+ automatically computed by Matita.
+ _________________________________________________________
+
+8.4. default
+
+ default "s" u[1] ⦠u[n]
+
+ Synopsis:
+ default qstring uri [uri]â¦
+
+ Action:
+ It registers a cluster of related definitions and
+ theorems to be used by tactics and the rendering
+ engine. Some functionalities of Matita are not
+ available when some clusters have not been registered.
+ Overloading a cluster registration is possible: the
+ last registration will be the default one, but the
+ previous ones are still in effect.
+
+ s is an identifier of the cluster and u[1] ⦠u[n] are
+ the URIs of the definitions and theorems of the
+ cluster. The number n of required URIs depends on the
+ cluster. The following clusters are supported.
+
+ Table 8-1. clusters
+
+ name expected object for 1st URI expected object for 2nd URI
+ expected object for 3rd URI expected object for 4th URI
+ expected object for 5th URI
+ equality an inductive type (say, of type eq) of type âA:Type.A
+ â Prop with one family parameter and one constructor of type
+ âx:A.eq A x a theorem of type âA.âx,y:A.eq A x y â eq A y x a
+ theorem of type âA.âx,y,z:A.eq A x y â eq A y z â eq A x z
+ âA.âa.â P:A â Prop.P x â ây.eq A x y â P y âA.âa.â P:A â
+ Prop.P x â ây.eq A y x â P y
+ true an inductive type of type Prop with only one constructor
+ that has no arguments
+ false an inductive type of type Prop without constructors
+
+ absurd a theorem of type âA:Prop.âB:Prop.A â Not A â B
+ _________________________________________________________
+
+8.5. hint
+
+ hint
+
+ Synopsis:
+ hint
+
+ Action:
+ Displays a list of theorems that can be successfully
+ applied to the current selected sequent. The command is
+ removed from the script, but the window that displays
+ the theorems allow to add to the script the application
+ of the selected theorem.
+ _________________________________________________________
+
+8.6. include
+
+ include "s"
+
+ Synopsis:
+ include qstring
+
+ Action:
+ Every coercion, notation and interpretation that was
+ active when the file s was compiled last time is made
+ active. The same happens for declarations of default
+ definitions and theorems and disambiguation hints
+ (aliases). On the contrary, theorem and definitions
+ declared in a file can be immediately used without
+ including it.
+
+ The file s is automatically compiled if it is not
+ compiled yet and if it is handled by a development.
+ _________________________________________________________
+
+8.7. include' "s"
+
+ Synopsis:
+ include' qstring
+
+ Action:
+ Not documented (TODO), do not use it.
+ _________________________________________________________
+
+8.8. set
+
+ set "baseuri" "s"
+
+ Synopsis:
+ set qstring qstring
+
+ Action:
+ Sets to s the baseuri of all the theorems and
+ definitions stated in the current file. The baseuri
+ should be a/b/c/foo if the file is named foo and it is
+ in the subtree a/b/c of the current development. This
+ requirement is not enforced, but it could be in the
+ future.
+
+ Currently, baseuri is the only property that can be set
+ even if the parser accepts arbitrary property names.
+ _________________________________________________________
+
+8.9. whelp
+
+ whelp locate "s"
+
+ whelp hint t
+
+ whelp elim t
+
+ whelp match t
+
+ whelp instance t
+
+ Synopsis:
+ whelp [locate qstring | hint term | elim term | match
+ term | instance term ]
+
+ Action:
+ Performs the corresponding query, showing the result in
+ the CIC browser. The command is removed from the
+ script.
+ _________________________________________________________
+
+8.10. qed
+
+ Synopsis:
+ qed
+
+ Action:
+ Saves and indexes the current interactive theorem or
+ definition. In order to do this, the set of sequents
+ still to be proved must be empty.
+ _________________________________________________________
+
+Chapter 9. License
+
+ Both Matita and this document are part of HELM, an
+ Hypertextual, Electronic Library of Mathematics, developed at
+ the Computer Science Department, University of Bologna, Italy.
+
+ HELM is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ HELM is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with HELM; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA. A copy of the GNU General Public License is
+ available at this link.
+
+ Notes
+
+ [1]
+
+ The name of the Development should be the name of the
+ directory in which it lives. This is not a requirement, but
+ the makefile automatically generated by matita in the root
+ directory of the development will eventually generate a new
+ Development with a name that follows this convention. Having
+ more than one development for the same set of files is not an
+ issue.
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+
+ <!ENTITY legal SYSTEM "legal.xml">
+ <!ENTITY license SYSTEM "sec_license.xml">
+ <!ENTITY install SYSTEM "sec_install.xml">
+ <!ENTITY gettingstarted SYSTEM "sec_gettingstarted.xml">
+ <!ENTITY intro SYSTEM "sec_intro.xml">
+ <!ENTITY terms SYSTEM "sec_terms.xml">
+ <!ENTITY tacticals SYSTEM "sec_tacticals.xml">
+ <!ENTITY tactics SYSTEM "sec_tactics.xml">
+ <!ENTITY declarative_tactics SYSTEM "sec_declarative_tactics.xml">
+ <!ENTITY othercommands SYSTEM "sec_commands.xml">
+ <!ENTITY usernotation SYSTEM "sec_usernotation.xml">
+
+ <!ENTITY tacticref SYSTEM "tactics_quickref.xml">
+ <!ENTITY declarativetacticref SYSTEM "declarative_tactics_quickref.xml">
+
+ <!ENTITY manrevision SYSTEM "version.txt">
+ <!ENTITY date "12/07/2006">
+ <!ENTITY app "<application>Matita</application>">
+ <!ENTITY appname "Matita">
+ <!ENTITY appversion SYSTEM "version.txt">
+
+ <!ENTITY TODO "<emphasis>TODO</emphasis>">
+ <!ENTITY MYSQL "<application> <ulink type='http'
+ url='http://www.mysql.com'>MySQL</ulink> </application>">
+ <!ENTITY Sqlite "<application> <ulink type='http'
+ url='http://www.sqlite.org'>Sqlite</ulink> </application>">
+
+ <!-- Entities for BNF -->
+ <!ENTITY id "<emphasis><link linkend='grammar.id'>id</link></emphasis>">
+ <!ENTITY uri "<emphasis><link linkend='grammar.uri'>uri</link></emphasis>">
+ <!ENTITY char "<emphasis><link linkend='grammar.char'>char</link></emphasis>">
+ <!ENTITY uri-step "<emphasis><link linkend='grammar.uri-step'>uri-step</link></emphasis>">
+ <!ENTITY nat "<emphasis><link linkend='grammar.nat'>nat</link></emphasis>">
+ <!ENTITY term "<emphasis><link linkend='grammar.term'>term</link></emphasis>">
+ <!ENTITY rec_def "<emphasis><link linkend='grammar.rec_def'>rec_def</link></emphasis>">
+ <!ENTITY match_pattern "<emphasis><link linkend='grammar.match_pattern'>match_pattern</link></emphasis>">
+ <!ENTITY match_branch "<emphasis><link linkend='grammar.match_branch'>match_branch</link></emphasis>">
+ <!ENTITY args "<emphasis><link linkend='grammar.args'>args</link></emphasis>">
+ <!ENTITY args2 "<emphasis><link linkend='grammar.args2'>args2</link></emphasis>">
+ <!ENTITY sterm "<emphasis><link linkend='grammar.sterm'>sterm</link></emphasis>">
+ <!ENTITY intros-spec "<emphasis><link linkend='grammar.intros-spec'>intros-spec</link></emphasis>">
+ <!ENTITY pattern "<emphasis><link linkend='grammar.pattern'>pattern</link></emphasis>">
+ <!ENTITY reduction-kind "<emphasis><link linkend='grammar.reduction-kind'>reduction-kind</link></emphasis>">
+ <!ENTITY path "<emphasis><link linkend='grammar.path'>path</link></emphasis>">
+ <!ENTITY proofscript "<emphasis><link linkend='grammar.proofscript'>proof-script</link></emphasis>">
+ <!ENTITY proofstep "<emphasis><link linkend='grammar.proofstep'>proof-step</link></emphasis>">
+ <!ENTITY tactic "<emphasis><link linkend='grammar.tactic'>tactic</link></emphasis>">
+ <!ENTITY LCFtactical "<emphasis><link linkend='grammar.LCFtactical'>LCF-tactical</link></emphasis>">
+ <!ENTITY qstring "<emphasis><link linkend='grammar.qstring'>qstring</link></emphasis>">
+ <!ENTITY interpretation "<emphasis><link linkend='grammar.interpretation'>interpretation</link></emphasis>">
+ <!ENTITY autoparams "<emphasis><link linkend='grammar.autoparams'>auto_params</link></emphasis>">
+ <!ENTITY justification "<emphasis><link linkend='grammar.justification'>justification</link></emphasis>">
+ <!ENTITY simpleautoparam "<emphasis><link linkend='grammar.simpleautoparam'>simple_auto_param</link></emphasis>">
+ <!ENTITY inlineparams "<emphasis><link linkend='grammar.inlineparams'>inline_params</link></emphasis>">
+ <!ENTITY inlineparam "<emphasis><link linkend='grammar.inlineparam'>inline_param</link></emphasis>">
+ <!ENTITY interpretation_argument "<emphasis><link linkend='grammar.interpretation_argument'>interpretation_argument</link></emphasis>">
+ <!ENTITY interpretation_rhs "<emphasis><link linkend='grammar.interpretation_rhs'>interpretation_rhs</link></emphasis>">
+ <!ENTITY csymbol "<emphasis><link linkend='grammar.csymbol'>csymbol</link></emphasis>">
+ <!ENTITY usage "<emphasis><link linkend='grammar.usage'>usage</link></emphasis>">
+ <!ENTITY notation_lhs "<emphasis><link linkend='grammar.notation_lhs'>notation_lhs</link></emphasis>">
+ <!ENTITY layout "<emphasis><link linkend='grammar.layout'>layout</link></emphasis>">
+ <!ENTITY literal "<emphasis><link linkend='grammar.literal'>literal</link></emphasis>">
+ <!ENTITY notation_rhs "<emphasis><link linkend='grammar.notation_rhs'>notation_rhs</link></emphasis>">
+ <!ENTITY associativity "<emphasis><link linkend='grammar.associativity'>associativity</link></emphasis>">
+ <!ENTITY symbol "<emphasis><link linkend='grammar.symbol'>symbol</link></emphasis>">
+ <!ENTITY level2_meta "<emphasis><link linkend='grammar.level2_meta'>level2_meta</link></emphasis>">
+ <!ENTITY unparsed_ast "<emphasis><link linkend='grammar.unparsed_ast'>unparsed_ast</link></emphasis>">
+ <!ENTITY unparsed_meta "<emphasis><link linkend='grammar.unparsed_meta'>unparsed_meta</link></emphasis>">
+ <!ENTITY enriched_term "<emphasis><link linkend='grammar.enriched_term'>enriched_term</link></emphasis>">
+]>
+
+<?yelp:chunk-depth 3?>
+
+<book id="matita_manual" lang="en">
+
+ <title>&app; V&appversion; User Manual (rev. &manrevision;)</title>
+
+ <bookinfo>
+
+ <copyright>
+ <year>2006</year>
+ <holder>The HELM team.</holder>
+ </copyright>
+
+ <authorgroup>
+ <author>
+ <firstname>Andrea</firstname>
+ <surname>Asperti</surname>
+ <affiliation>
+ <address> <email>asperti@cs.unibo.it</email> </address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Claudio</firstname>
+ <surname>Sacerdoti Coen</surname>
+ <affiliation>
+ <address> <email>sacerdot@cs.unibo.it</email> </address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Ferruccio</firstname>
+ <surname>Guidi</surname>
+ <affiliation>
+ <address> <email>fguidi@cs.unibo.it</email> </address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Enrico</firstname>
+ <surname>Tassi</surname>
+ <affiliation>
+ <address> <email>tassi@cs.unibo.it</email> </address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Stefano</firstname>
+ <surname>Zacchiroli</surname>
+ <affiliation>
+ <address> <email>zacchiro@cs.unibo.it</email> </address>
+ </affiliation>
+ </author>
+ </authorgroup>
+
+ <legalnotice>
+ <para> Both &appname; and this document are free software, you can
+ redistribute them and/or modify them under the terms of the GNU General
+ Public License as published by the Free Software Foundation. See <xref
+ linkend="sec_license" /> for more information. </para>
+ </legalnotice>
+
+ <revhistory>
+ <revision>
+ <revnumber>&manrevision;</revnumber>
+ <date>&date;</date>
+ </revision>
+ </revhistory>
+
+ </bookinfo>
+
+<!-- ============= Document Body ============================= -->
+
+&intro;
+&install;
+&gettingstarted;
+&terms;
+&usernotation;
+&tacticals;
+&tactics;
+&declarative_tactics;
+&othercommands;
+&license;
+
+</book>
+
+<!-- CSC: valid element tags
+<sect1 id="intro"> <title>Introduction</title> ...
+<sect2 id="what"> <title>What is Matita?</title>
+<para>
+<note> <title>Note:</title> <para> ...
+<footnote> <para> ...
+<itemizedlist mark="opencircle">
+ <listitem>
+ <para>
+ The computer player for Iagno is easy to beat.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+<ulink type="http" url="http://www.gnome.org/gdp">
+<email>itp@gnu.org</email>
+<application>Matita</application>
+<command>iagno</command> on the command line
+<citetitle>Othello</citetitle>
+
+<guimenuitem>Iagno</guimenuitem>
+<guisubmenu>Games</guisubmenu>
+<guibutton>none</guibutton>
+<menuchoice> <guimenu>Settings</guimenu> <guisubmenu>Preferences </guisubmenu> </menuchoice>
+
+<xref linkend="start-shot"/>.
+<figure id="start-shot">
+ <title>Starting Position</title>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/START.png" format="PNG" srccredit="Eric Baudais"/>
+ </imageobject>
+ <textobject>
+ <phrase>Screenshot of the starting position.</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</figure>
+
+-->
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Proofs</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_terms.html" title="Chapter 4. Syntax" /><link rel="prev" href="axiom_definition_declaration.html" title="Definitions and declarations" /><link rel="next" href="tacticargs.html" title="Tactic arguments" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Proofs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="axiom_definition_declaration.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Syntax</th><td width="20%" align="right"> <a accesskey="n" href="tacticargs.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="proofs"></a>Proofs</h2></div></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="theorem"></a><span class="bold"><strong>theorem</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</h3></div></div></div><p><strong class="userinput"><code>theorem f: P ≝ p</code></strong></p><p>Proves a new theorem <span class="command"><strong>f</strong></span> whose thesis is
+ <span class="command"><strong>P</strong></span>.</p><p>If <span class="command"><strong>p</strong></span> is provided, it must be a proof term for
+ <span class="command"><strong>P</strong></span>. Otherwise an interactive proof is started.</p><p><span class="command"><strong>P</strong></span> can be omitted only if the proof is not
+ interactive.</p><p>Proving a theorem already proved in the library is an error.
+ To provide an alternative name and proof for the same theorem, use
+ <span class="command"><strong>variant f: P ≝ p</strong></span>.</p><p>A warning is raised if the name of the theorem cannot be obtained
+ by mangling the name of the constants in its thesis.</p><p>Notice that the command is equivalent to <span class="command"><strong>definition f: T ≝ t</strong></span>.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="variant"></a><span class="bold"><strong>variant</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></h3></div></div></div><p><strong class="userinput"><code>variant f: T ≝ t</code></strong></p><p>Same as <span class="command"><strong>theorem f: T ≝ t</strong></span>, but it does not
+ complain if the theorem has already been proved. To be used to give
+ an alternative name or proof to a theorem.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="lemma"></a><span class="bold"><strong>lemma</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</h3></div></div></div><p><strong class="userinput"><code>lemma f: T ≝ t</code></strong></p><p>Same as <span class="command"><strong>theorem f: T ≝ t</strong></span></p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="fact"></a><span class="bold"><strong>fact</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</h3></div></div></div><p><strong class="userinput"><code>fact f: T ≝ t</code></strong></p><p>Same as <span class="command"><strong>theorem f: T ≝ t</strong></span></p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="remark"></a><span class="bold"><strong>remark</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] [<span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</h3></div></div></div><p><strong class="userinput"><code>remark f: T ≝ t</code></strong></p><p>Same as <span class="command"><strong>theorem f: T ≝ t</strong></span></p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="axiom_definition_declaration.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_terms.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tacticargs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Definitions and declarations </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Tactic arguments</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The proof status</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tacticals.html" title="Chapter 6. Tacticals" /><link rel="prev" href="sec_tacticals.html" title="Chapter 6. Tacticals" /><link rel="next" href="tacticals.html" title="Tacticals" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The proof status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_tacticals.html">Prev</a> </td><th width="60%" align="center">Chapter 6. Tacticals</th><td width="20%" align="right"> <a accesskey="n" href="tacticals.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="proofstatus"></a>The proof status</h2></div></div></div><p>
+ During an interactive proof, the proof status is made of
+ the set of sequents to prove and the partial proof built so far.
+ </p><p>The partial proof can be <a class="link" href="cicbrowser.html#aboutproof" title="Looking at a proof under development">inspected</a>
+ on demand in the CIC browser. It will be shown in pseudo-natural language
+ produced on the fly from the proof term.</p><p>The set of sequents to prove is shown in the notebook of the
+ <a class="link" href="authoring.html#authoringinterface" title="The authoring interface">authoring interface</a>, in the
+ top-right corner of the main window of Matita. Each tab shows a different
+ sequent, named with a question mark followed by a number. The current
+ role of the sequent, according to the following description, is also
+ shown in the tab tag.
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><a id="selectedsequents"></a>
+ <span class="bold"><strong>Selected sequents</strong></span>
+ (name in boldface, e.g. <span class="bold"><strong>?3</strong></span>).
+ The next tactic will be applied to every selected sequent, producing
+ new selected sequents. <a class="link" href="tacticals.html" title="Tacticals">Tacticals</a>
+ such as branching ("<span class="bold"><strong>[</strong></span>")
+ or "<span class="bold"><strong>focus</strong></span>" can be used
+ to change the set of selected sequents.
+ </p></li><li class="listitem"><p><a id="siblingsequents"></a>
+ <span class="bold"><strong>Sibling sequents</strong></span>
+ (name prefixed by a vertical bar and their position, e.g.
+ |<sub>3</sub>?2). When the set of selected sequents
+ has more than one element, the user can decide to focus in turn on each
+ of them. The branching <a class="link" href="tacticals.html" title="Tacticals">tactical</a>
+ ("<span class="bold"><strong>[</strong></span>") selects the first
+ sequent only, marking every previously selected sequent as a sibling
+ sequent. Each sibling sequent is given a different position. The
+ tactical "<span class="bold"><strong>2,3:</strong></span>" can be used to
+ select one or more sibling sequents, different from the one proposed,
+ according to their position. Once the user starts to work on the
+ selected sibling sequents it becomes impossible to select a new
+ set of siblings until the ("<span class="bold"><strong>|</strong></span>")
+ tactical is used to end work on the current one.
+ </p></li><li class="listitem"><p><a id="solvedsequents"></a>
+ <span class="bold"><strong>Automatically solved sibling sequents</strong></span>
+ (name strokethrough, e.g. |<sub>3</sub><span class="strikethrough">?2</span>).
+ Sometimes a tactic can close by side effects a sibling sequent the
+ user has not selected yet. The sequent is left in the automatically
+ solved status in order for the user to explicitly accept
+ (using the "<span class="bold"><strong>skip</strong></span>"
+ <a class="link" href="tacticals.html" title="Tacticals">tactical</a>) the automatic
+ instantiation in the proof script. This way the correspondence between
+ the number of branches in the proof script and the number of sequents
+ generated in the proof is preserved.
+ </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_tacticals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tacticals.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tacticals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. Tacticals </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Tacticals</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+#!/bin/sh
+
+sed -i 's/\\&\\#x225d;/\\ensuremath{\\stackrel{def}{=}}/g' $1
+sed -i 's/\\&\\#x3a9;/\\ensuremath{\\Omega}/g' $1
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9. Other commands</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="tac_bytermweproved.html" title="we proved" /><link rel="next" href="command_check.html" title="check" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Other commands</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_bytermweproved.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="command_check.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_commands"></a>Chapter 9. Other commands</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_commands.html#command_alias">alias</a></span></dt><dt><span class="sect1"><a href="command_check.html">check</a></span></dt><dt><span class="sect1"><a href="command_eval.html">eval</a></span></dt><dt><span class="sect1"><a href="command_prefer_coercion.html">prefer coercion</a></span></dt><dt><span class="sect1"><a href="command_coercion.html">coercion</a></span></dt><dt><span class="sect1"><a href="command_default.html">default</a></span></dt><dt><span class="sect1"><a href="command_hint.html">hint</a></span></dt><dt><span class="sect1"><a href="command_include.html">include</a></span></dt><dt><span class="sect1"><a href="command_include_first.html">include' "s"</a></span></dt><dt><span class="sect1"><a href="command_whelp.html">whelp</a></span></dt><dt><span class="sect1"><a href="command_qed.html">qed</a></span></dt><dt><span class="sect1"><a href="command_inline.html">inline</a></span></dt><dd><dl><dt><span class="sect2"><a href="command_inline.html#inline-params">inline-params</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="command_alias"></a>alias</h2></div></div></div><p><strong class="userinput"><code>alias id "s" = "def"</code></strong></p><p><strong class="userinput"><code>alias symbol "s" (instance n) = "def"</code></strong></p><p><strong class="userinput"><code>alias num (instance n) = "def"</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>alias</strong></span>
+ [<span class="bold"><strong>id</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span> <span class="bold"><strong>=</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span>
+ | <span class="bold"><strong>symbol</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span> [<span class="bold"><strong>(instance</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span><span class="bold"><strong>)</strong></span>] <span class="bold"><strong>=</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span>
+ | <span class="bold"><strong>num</strong></span> [<span class="bold"><strong>(instance</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span><span class="bold"><strong>)</strong></span>] <span class="bold"><strong>=</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span>
+ ]
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Used to give an hint to the disambiguating parser.
+ When the parser is faced to the identifier (or symbol)
+ <span class="command"><strong>s</strong></span> or to any number, it will prefer
+ interpretations that "map <span class="command"><strong>s</strong></span> (or the
+ number) to <span class="command"><strong>def</strong></span>". For identifiers,
+ "def" is the URI of the interpretation.
+ E.g.: <span class="command"><strong>cic:/matita/nat/nat.ind#xpointer(1/1/1)</strong></span>
+ for the first constructor of the first inductive type defined
+ in the block of inductive type(s)
+ <span class="command"><strong>cic:/matita/nat/nat.ind</strong></span>.
+ For symbols and numbers, "def" is the label used to
+ mark the wanted
+ <a class="link" href="ch05s02.html#interpretation">interpretation</a>.
+ </p><p>When a symbol or a number occurs several times in the
+ term to be parsed, it is possible to give an hint only for the
+ instance <span class="command"><strong>n</strong></span>. When the instance is omitted,
+ the hint is valid for every occurrence.
+ </p><p>
+ Hints are automatically inserted in the script by Matita every
+ time the user is interactively asked a question to disambiguate
+ a term. This way the user won't be posed the same question twice
+ when the script will be executed again.</p></dd></dl></div><p>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_bytermweproved.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="command_check.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">we proved </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> check</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============ Commands ====================== -->
+<chapter id="sec_commands">
+ <title>Other commands</title>
+ <sect1 id="command_alias">
+ <title>alias</title>
+ <para><userinput>alias id "s" = "def"</userinput></para>
+ <para><userinput>alias symbol "s" (instance n) = "def"</userinput></para>
+ <para><userinput>alias num (instance n) = "def"</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">alias</emphasis>
+ [<emphasis role="bold">id</emphasis> &qstring; <emphasis role="bold">=</emphasis> &qstring;
+ | <emphasis role="bold">symbol</emphasis> &qstring; [<emphasis role="bold">(instance</emphasis> &nat;<emphasis role="bold">)</emphasis>] <emphasis role="bold">=</emphasis> &qstring;
+ | <emphasis role="bold">num</emphasis> [<emphasis role="bold">(instance</emphasis> &nat;<emphasis role="bold">)</emphasis>] <emphasis role="bold">=</emphasis> &qstring;
+ ]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Used to give an hint to the disambiguating parser.
+ When the parser is faced to the identifier (or symbol)
+ <command>s</command> or to any number, it will prefer
+ interpretations that "map <command>s</command> (or the
+ number) to <command>def</command>". For identifiers,
+ "def" is the URI of the interpretation.
+ E.g.: <command>cic:/matita/nat/nat.ind#xpointer(1/1/1)</command>
+ for the first constructor of the first inductive type defined
+ in the block of inductive type(s)
+ <command>cic:/matita/nat/nat.ind</command>.
+ For symbols and numbers, "def" is the label used to
+ mark the wanted
+ <link linkend="interpretation">interpretation</link>.
+ </para>
+ <para>When a symbol or a number occurs several times in the
+ term to be parsed, it is possible to give an hint only for the
+ instance <command>n</command>. When the instance is omitted,
+ the hint is valid for every occurrence.
+ </para>
+ <para>
+ Hints are automatically inserted in the script by Matita every
+ time the user is interactively asked a question to disambiguate
+ a term. This way the user won't be posed the same question twice
+ when the script will be executed again.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_check">
+ <title>check</title>
+ <para><userinput>check t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">check</emphasis> &term;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Opens a CIC browser window that shows <command>t</command>
+ together with its type. The command is immediately removed from
+ the script.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_eval">
+ <title>eval</title>
+ <para><userinput>eval red on t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">eval</emphasis>
+ &reduction-kind;
+ <emphasis role="bold">on</emphasis>
+ &term;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Opens a CIC browser window that shows
+ the reduct of
+ <command>t</command>
+ together with its type.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_prefer_coercion">
+ <title>prefer coercion</title>
+ <para><userinput>prefer coercion u</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">prefer coercion</emphasis>
+ (&uri; | &term;)
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>The already declared coercion <command>u</command>
+ is preferred to other coercions with the same source and target.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_coercion">
+ <title>coercion</title>
+ <para><userinput>coercion u with ariety saturation nocomposites</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">coercion</emphasis>
+ (&uri; | &term; <emphasis role="bold">with</emphasis>)
+ [ &nat; [&nat;]]
+ [ <emphasis role="bold">nocomposites</emphasis> ]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Declares <command>u</command> as an implicit coercion.
+ If the type of <command>u</command> is
+ <command>∀x1:T1. … ∀x(n-1):T(n-1).Tn</command> the coercion target is
+ <command>T(n - ariety)</command> while its source is
+ <command>T(n - ariety - saturation - 1)</command>.
+ Every time a term <command>x</command>
+ of type source is used with expected type target, Matita
+ automatically replaces <command>x</command> with
+ <command>(u ? … ? x ? … ?)</command> to avoid a typing error.</para>
+ Note that the number of <command>?</command> added after
+ <command>x</command> is saturation.
+ <para>Implicit coercions are not displayed to the user:
+ <command>(u ? … ? x)</command> is rendered simply
+ as <command>x</command>.</para>
+ <para>When a coercion <command>u</command> is declared
+ from source <command>s</command> to target <command>t</command>
+ and there is already a coercion <command>u'</command> of
+ target <command>s</command> or source <command>t</command>,
+ a composite implicit coercion is automatically computed
+ by Matita unless <emphasis role="bold">nocomposites</emphasis>
+ is specified.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_default">
+ <title>default</title>
+ <para><userinput>default "s" u<subscript>1</subscript> … u<subscript>n</subscript></userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">default</emphasis>
+ &qstring; &uri; [&uri;]…
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It registers a cluster of related definitions and
+ theorems to be used by tactics and the rendering engine.
+ Some functionalities of Matita are not available when some
+ clusters have not been registered. Overloading a cluster
+ registration is possible: the last registration will be the
+ default one, but the previous ones are still in effect.</para>
+ <para>
+ <command>s</command> is an identifier of the cluster and
+ <command>u<subscript>1</subscript> … u<subscript>n</subscript></command>
+ are the URIs of the definitions and theorems of the cluster.
+ The number <command>n</command> of required URIs depends on the
+ cluster. The following clusters are supported.
+ </para>
+ <table>
+ <title>clusters</title>
+ <tgroup cols="6">
+ <thead>
+ <row>
+ <entry>name</entry>
+ <entry>expected object for 1st URI</entry>
+ <entry>expected object for 2nd URI</entry>
+ <entry>expected object for 3rd URI</entry>
+ <entry>expected object for 4th URI</entry>
+ <entry>expected object for 5th URI</entry>
+ <entry>expected object for 6th URI</entry>
+ <entry>expected object for 7th URI</entry>
+ <entry>expected object for 8th URI</entry>
+ <entry>expected object for 9th URI</entry>
+ <entry>expected object for 10th URI</entry>
+ <entry>expected object for 11th URI</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>equality</entry>
+ <entry>an inductive type (say, of type <command>eq</command>) of type ∀A:Type.A <emphasis role="bold">→</emphasis> <emphasis role="bold">Prop</emphasis> with one family parameter and one constructor of type ∀x:A.eq A x</entry>
+ <entry>a theorem of type <emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>x,y:A.eq A x y <emphasis role="bold">→</emphasis> eq A y x</entry>
+ <entry>a theorem of type <emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>x,y,z:A.eq A x y <emphasis role="bold">→</emphasis> eq A y z <emphasis role="bold">→</emphasis> eq A x z</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Prop</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A x y <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Prop</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A y x <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Set</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A x y <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Set</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A y x <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Type</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A x y <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>a.<emphasis role="bold">∀</emphasis> P:A <emphasis role="bold">→</emphasis> <emphasis role="bold">Type</emphasis>.P x <emphasis role="bold">→</emphasis> <emphasis role="bold">∀</emphasis>y.eq A y x <emphasis role="bold">→</emphasis> P y</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>B.<emphasis role="bold">∀</emphasis> f:A <emphasis role="bold">→</emphasis> B.<emphasis role="bold">∀</emphasis>x,y:A.eq A x y <emphasis role="bold">→</emphasis> eq B (f x) (f y)</entry>
+ <entry><emphasis role="bold">∀</emphasis>A.<emphasis role="bold">∀</emphasis>B.<emphasis role="bold">∀</emphasis> f:A <emphasis role="bold">→</emphasis> B.<emphasis role="bold">∀</emphasis>x,y:A.eq A x y <emphasis role="bold">→</emphasis> eq B (f y) (f x)</entry>
+ </row>
+ <row>
+ <entry>true</entry>
+ <entry>an inductive type of type <emphasis role="bold">Prop</emphasis> with only one constructor that has no arguments</entry>
+ <entry/>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>false</entry>
+ <entry>an inductive type of type <emphasis role="bold">Prop</emphasis> without constructors</entry>
+ <entry/>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+ <row>
+ <entry>absurd</entry>
+ <entry>a theorem of type <emphasis role="bold">∀</emphasis>A:Prop.<emphasis role="bold">∀</emphasis>B:Prop.A <emphasis role="bold">→</emphasis> Not A <emphasis role="bold">→</emphasis> B</entry>
+ <entry/>
+ <entry/>
+ <entry/>
+ <entry/>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_hint">
+ <title>hint</title>
+ <para><userinput>hint</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">hint</emphasis>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Displays a list of theorems that can be successfully
+ applied to the current selected sequent. The command is
+ removed from the script, but the window that displays the
+ theorems allow to add to the script the application of the
+ selected theorem.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_include">
+ <title>include</title>
+ <para><userinput>include "s"</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">include</emphasis> &qstring;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Every <link linkend="command_coercion">coercion</link>,
+ <link linkend="notation">notation</link> and
+ <link linkend="interpretation">interpretation</link> that was active
+ when the file <command>s</command> was compiled last time
+ is made active. The same happens for declarations of
+ <link linkend="command_default">default definitions and
+ theorems</link> and disambiguation
+ hints (<link linkend="command_alias">aliases</link>).
+ On the contrary, theorem and definitions declared in a file can be
+ immediately used without including it.</para>
+ <para>The file <command>s</command> is automatically compiled
+ if it is not compiled yet.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_include_first">
+ <title>include' "s"</title>
+ <para><userinput></userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">include'</emphasis> &qstring;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Not documented (&TODO;), do not use it.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_whelp">
+ <title>whelp</title>
+ <para><userinput>whelp locate "s"</userinput></para>
+ <para><userinput>whelp hint t</userinput></para>
+ <para><userinput>whelp elim t</userinput></para>
+ <para><userinput>whelp match t</userinput></para>
+ <para><userinput>whelp instance t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">whelp</emphasis>
+ [<emphasis role="bold">locate</emphasis> &qstring;
+ | <emphasis role="bold">hint</emphasis> &term;
+ | <emphasis role="bold">elim</emphasis> &term;
+ | <emphasis role="bold">match</emphasis> &term;
+ | <emphasis role="bold">instance</emphasis> &term;
+ ]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Performs the corresponding <link linkend="whelp">query</link>,
+ showing the result in the CIC browser. The command is removed
+ from the script.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="command_qed">
+ <title>qed</title>
+ <para><userinput>qed</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">qed</emphasis>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Saves and indexes the current interactive theorem or
+ definition.
+ In order to do this, the set of sequents still to be proved
+ must be empty.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="command_inline">
+ <title>inline</title>
+ <para><userinput>inline "s" params</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">inline</emphasis> &qstring; &inlineparams;
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Inlines a representation of the item <command>s</command>,
+which can be the URI of a HELM object. If an entire HELM directory (i.e. a base
+URI) or the path of a *.ma source file is provided, all the contained objects
+are represented in a row.
+If the inlined object has a proof, this proof is represented in several ways
+depending on the provided parameters.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <sect2 id="inline-params">
+ <title>inline-params</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>inline-params</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.inlineparams">&inlineparams;</entry>
+ <entry>::=</entry>
+ <entry>[&inlineparam; [&inlineparam;] … ]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>inline-param</title>
+ <tgroup cols="4">
+ <tbody>
+
+ <row>
+ <entry id="grammar.inlineparam">&inlineparam;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">axiom</emphasis></entry>
+ <entry>Try to give an <link linkend="axiom">axiom</link> flavour
+ (bodies are omitted even if present)
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">definition</emphasis></entry>
+ <entry>Try give a <link linkend="definition">definition</link> flavour
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">theorem</emphasis></entry>
+ <entry>Try give a <link linkend="theorem">theorem</link> flavour
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">lemma</emphasis></entry>
+ <entry>Try give a <link linkend="lemma">lemma</link> flavour
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">remark</emphasis></entry>
+ <entry>Try give a <link linkend="remark">remark</link> flavour
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">fact</emphasis></entry>
+ <entry>Try give a <link linkend="fact">fact</link> flavour
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">variant</emphasis></entry>
+ <entry>Try give a <link linkend="variant">variant</link> flavour
+ (implies <emphasis role="bold">plain</emphasis>)
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">declarative</emphasis></entry>
+ <entry>Represent proofs using
+ <link linkend="sec_declarative_tactics">declarative tactics</link>
+ (this is the dafault and can be omitted)
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">procedural</emphasis></entry>
+ <entry>Represent proofs using
+ <link linkend="sec_tactics">procedural tactics</link>
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">plain</emphasis></entry>
+ <entry>Represent proofs using plain
+ <link linkend="tbl_terms">proof terms</link>
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">nodefaults</emphasis></entry>
+ <entry>
+ Do not use the tactics depending on the
+ <link linkend="command_default">default</link> command
+ (<link linkend="tac_rewrite">rewrite</link>
+ in the <emphasis role="bold">procedural</emphasis> mode)
+ </entry>
+ </row>
+
+ <row valign="top">
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">level=&nat;</emphasis></entry>
+ <entry>
+ Set the level of the procedural proof representation
+ (the default is the highest level)
+ <itemizedlist>
+ <listitem>
+ Tactics used at level 1:
+ <link linkend="tac_exact">exact</link>
+ </listitem>
+ <listitem>
+ Additional tactics used at level 2:
+ <link linkend="tac_letin">letin</link>,
+ <link linkend="tac_cut">cut</link>,
+ <link linkend="tac_change">change</link>,
+ <link linkend="tac_intros">intros</link>,
+ <link linkend="tac_apply">apply</link>,
+ <link linkend="tac_elim">elim</link>,
+ <link linkend="tac_cases">cases</link>,
+ <link linkend="tac_rewrite">rewrite</link>
+ </listitem>
+ </itemizedlist>
+ </entry>
+ </row>
+
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">depth=&nat;</emphasis></entry>
+ <entry>&TODO;</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+ </sect1>
+</chapter>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Declarative Tactics</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="tac_whd.html" title="whd" /><link rel="next" href="tac_assume.html" title="assume" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Declarative Tactics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_whd.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tac_assume.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_declarative_tactics"></a>Chapter 8. Declarative Tactics</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_declarative_tactics.html#declarative_tactics_quickref">Quick reference card</a></span></dt><dt><span class="sect1"><a href="tac_assume.html">assume</a></span></dt><dt><span class="sect1"><a href="tac_byinduction.html">by induction hypothesis we know</a></span></dt><dt><span class="sect1"><a href="tac_case.html">case</a></span></dt><dt><span class="sect1"><a href="tac_bydone.html">done</a></span></dt><dt><span class="sect1"><a href="tac_exitselim.html">let such that</a></span></dt><dt><span class="sect1"><a href="tac_obtain.html">obtain</a></span></dt><dt><span class="sect1"><a href="tac_suppose.html">suppose</a></span></dt><dt><span class="sect1"><a href="tac_thesisbecomes.html">the thesis becomes</a></span></dt><dt><span class="sect1"><a href="tac_weneedtoprove.html">we need to prove</a></span></dt><dt><span class="sect1"><a href="tac_andelim.html">we have</a></span></dt><dt><span class="sect1"><a href="tac_weproceedbycases.html">we proceed by cases on</a></span></dt><dt><span class="sect1"><a href="tac_weproceedbyinduction.html">we proceed by induction on</a></span></dt><dt><span class="sect1"><a href="tac_bytermweproved.html">we proved</a></span></dt></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="declarative_tactics_quickref"></a>Quick reference card</h2></div></div></div><p>
+ </p><div class="table"><a id="idp73048816"></a><p class="title"><strong>Table 8.1. tactics</strong></p><div class="table-contents"><table summary="tactics" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.declarative_tactic"></a><span class="emphasis"><em><a class="link" href="sec_tactics.html#grammar.tactic">tactic</a></em></span></td><td style="">::=</td><td style=""><a class="link" href="tac_assume.html" title="assume"><span class="bold"><strong>assume</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong> : </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href=""><span class="bold"><strong>by induction hypothesis we know</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> (</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>)</strong></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_case.html" title="case"><span class="bold"><strong>case</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>)</strong></span>] … </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <a class="link" href=""><span class="bold"><strong>done</strong></span></a></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <span class="bold"><strong>let</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>such that</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>)</strong></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">[<a class="link" href="tac_obtain.html" title="obtain"><span class="bold"><strong>obtain</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> | <span class="bold"><strong>conclude</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] <span class="bold"><strong>=</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> [<span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span> | <span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> | <span class="bold"><strong>using once</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> | <span class="bold"><strong>proof</strong></span>] [<span class="bold"><strong>done</strong></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_suppose.html" title="suppose"><span class="bold"><strong>suppose</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> (</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>) </strong></span> [ <span class="bold"><strong>that is equivalent to</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> ]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href=""><span class="bold"><strong>the thesis becomes</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href=""><span class="bold"><strong>we need to prove</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ [<span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>)</strong></span>]
+ [ <span class="bold"><strong>or equivalently</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href=""><span class="bold"><strong>we proceed by cases on</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>to prove</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href=""><span class="bold"><strong>we proceed by induction on</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> to prove </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <a class="link" href=""><span class="bold"><strong>we proved</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>)</strong></span></td></tr></tbody></table></div></div><p><br class="table-break" />
+
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_whd.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="tac_assume.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">whd </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> assume</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<!-- ================= Tactics ========================= -->
+<chapter id="sec_declarative_tactics">
+ <title>Declarative Tactics</title>
+
+ <sect1
+ id="declarative_tactics_quickref">
+ <title>Quick reference card</title>
+ <para>
+ &declarativetacticref;
+ </para>
+ </sect1>
+
+
+ <sect1 id="tac_assume">
+ <title>assume</title>
+ <titleabbrev>assume</titleabbrev>
+ <para><userinput>assume x : t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">assume</emphasis> &id; <emphasis role="bold"> : </emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current proof must be
+ <command>∀x:T.P</command> or
+ <command>T→P</command> where <command>T</command> is
+ a data type (i.e. <command>T</command> has type
+ <command>Set</command> or <command>Type</command>).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It adds to the context of the current sequent to prove a new
+ declaration <command>x : T </command>. The new conclusion becomes
+ <command>P</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_byinduction">
+ <title>by induction hypothesis we know</title>
+ <titleabbrev>by induction hypothesis we know</titleabbrev>
+ <para><userinput>by induction hypothesis we know t (id)</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem><para><emphasis role="bold">by induction hypothesis we know</emphasis> &term; <emphasis role="bold"> (</emphasis> &id; <emphasis role="bold">)</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para>To be used in a proof by induction to state the inductive
+ hypothesis.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para> Introduces the inductive hypothesis. </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_case">
+ <title>case</title>
+ <titleabbrev>case</titleabbrev>
+ <para><userinput>case id (id1:t1) … (idn:tn)</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">case</emphasis> &id; [<emphasis role="bold">(</emphasis> &id; <emphasis role="bold">:</emphasis> &term; <emphasis role="bold">)</emphasis>] … </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para>To be used in a proof by induction or by cases to start
+ a new case</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Starts the new case <command>id</command> declaring
+ the local parameters <command>(id1:t1) … (idn:tn)</command></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_bydone">
+ <title>done</title>
+ <titleabbrev>done</titleabbrev>
+ <para><userinput>justification done</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>&justification; <emphasis role="bold">done</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent given the justification.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+
+ <sect1 id="tac_exitselim">
+ <title>let such that</title>
+ <titleabbrev>let such that</titleabbrev>
+ <para><userinput>justification let x:t such that p (id)</userinput>
+ </para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>&justification; <emphasis role="bold">let</emphasis> &id;
+ <emphasis role="bold">:</emphasis> &term; <emphasis role="bold">such that</emphasis> &term;
+ <emphasis role="bold">(</emphasis> &id; <emphasis role="bold">)</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It derives <command>∃x:t.p</command> using the
+ <command>justification</command> and then it introduces in the context
+ <command>x</command> and the hypothesis
+ <command>p</command> labelled with
+ <command>id</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequent to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_obtain">
+ <title>obtain</title>
+ <titleabbrev>obtain</titleabbrev>
+ <para><userinput>obtain H t1 = t2 justification</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>[<emphasis role="bold">obtain</emphasis> &id; | <emphasis role="bold">conclude</emphasis> &term;] <emphasis role="bold">=</emphasis> &term; [&autoparams; | <emphasis role="bold">using</emphasis> &term; | <emphasis role="bold">using once</emphasis> &term; | <emphasis role="bold">proof</emphasis>] [<emphasis role="bold">done</emphasis>]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para><command>conclude</command> can be used only if the current
+ sequent is stating an equality. The left hand side must be omitted
+ in an equality chain.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Starts or continues an equality chain. If the chain starts
+ with <command>obtain H</command> a new subproof named
+ <command>H</command> is started.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequent to prove:</term>
+ <listitem>
+ <para>If the chain starts
+ with <command>obtain H</command> a nre sequent for
+ <command>t2 = ?</command> is opened.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_suppose">
+ <title>suppose</title>
+ <titleabbrev>suppose</titleabbrev>
+ <para><userinput>suppose t1 (x) that is equivalent to t2</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">suppose</emphasis> &term; <emphasis role="bold"> (</emphasis> &id;
+ <emphasis role="bold">) </emphasis> [ <emphasis role="bold">that is equivalent to</emphasis> &term; ]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para>The conclusion of the current proof must be
+ <command>∀x:T.P</command> or
+ <command>T→P</command> where <command>T</command> is
+ a proposition (i.e. <command>T</command> has type
+ <command>Prop</command> or <command>CProp</command>).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It adds to the context of the current sequent to prove a new
+ declaration <command>x : T </command>. The new conclusion becomes
+ <command>P</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_thesisbecomes">
+ <title>the thesis becomes</title>
+ <titleabbrev>the thesis becomes</titleabbrev>
+ <para><userinput>the thesis becomes t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role ="bold">the thesis becomes</emphasis> &term; </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para>The provided term <command>t</command> must be convertible with
+ current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It changes the current goal to the one provided.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequent to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_weneedtoprove">
+ <title>we need to prove</title>
+ <titleabbrev>we need to prove</titleabbrev>
+ <para><userinput>we need to prove t1 (id) or equivalently t2</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">we need to prove</emphasis> &term;
+ [<emphasis role="bold">(</emphasis>&id;
+ <emphasis role="bold">)</emphasis>]
+ [ <emphasis role="bold">or equivalently</emphasis> &term;]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>If <command>id</command> is provided, starts a subproof that once concluded
+ will be named <command>id</command>. Otherwise states what needs to be proved.
+ If <command>t2</command> is provided, the new goal is
+ immediately changed to <command>t2</command> wich must
+ be equivalent to <command>t1</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>The stated one if <command>id</command> is provided</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+
+ <sect1 id="tac_andelim">
+ <title>we have</title>
+ <titleabbrev>we have</titleabbrev>
+ <para><userinput>justification we have t1 (id1) and t2 (id2)</userinput>
+ </para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic_synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>&justification; <emphasis role="bold">we have</emphasis> &term;
+ <emphasis role="bold">( </emphasis> &id; <emphasis role="bold"> ) and </emphasis> &term;
+ <emphasis role="bold"> ( </emphasis> &id; <emphasis role="bold">)</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It derives <command>t1∧t2</command> using the
+ <command>justification</command> then it introduces in the context
+ <command>t1</command> labelled with <command>id1</command> and
+ <command>t2</command> labelled with <command>id2</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequent to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_weproceedbycases">
+ <title>we proceed by cases on</title>
+ <titleabbrev>we proceed by cases on</titleabbrev>
+ <para><userinput>we proceed by cases on t to prove th</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">we proceed by cases on</emphasis> &term; <emphasis role="bold">to prove</emphasis> &term; </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para><command>t</command> must inhabitant of an inductive type and
+ <command>th</command> must be the conclusion to be proved by
+ cases.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para> It proceeds by cases on <command>t</command> </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens one new sequent for each constructor of the
+ type of <command>t</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_weproceedbyinduction">
+ <title>we proceed by induction on</title>
+ <titleabbrev>we proceed by induction on</titleabbrev>
+ <para><userinput>we proceed by induction on t to prove th</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">we proceed by induction on</emphasis> &term; <emphasis role="bold"> to prove </emphasis> &term; </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para><command>t</command> must inhabitant of an inductive type and
+ <command>th</command> must be the conclusion to be proved by induction.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It proceed by induction on <command>t</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens one new sequent for each constructor of the
+ type of <command>t</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+
+ <sect1 id="tac_bytermweproved">
+ <title>we proved</title>
+ <titleabbrev>we proved</titleabbrev>
+ <para><userinput>justification we proved t (id)</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>&justification; <emphasis role="bold">we proved</emphasis> &term;
+ <emphasis role="bold">(</emphasis> &id;
+ <emphasis role="bold">)</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-condition:</term>
+ <listitem>
+ <para><command>t</command>must have type <command>Prop</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It derives <command>t</command>
+ using the justification and labels the conclusion with
+ <command>id</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequent to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+</chapter>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Getting started</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="matita.conf.xml.html" title="Configuring Matita" /><link rel="next" href="cicbrowser.html" title="Browsing and searching" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Getting started</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="matita.conf.xml.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="cicbrowser.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_gettingstarted"></a>Chapter 3. Getting started</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_gettingstarted.html#unicode">How to type Unicode symbols</a></span></dt><dt><span class="sect1"><a href="cicbrowser.html">Browsing and searching</a></span></dt><dd><dl><dt><span class="sect2"><a href="cicbrowser.html#browsinglib">Browsing the library</a></span></dt><dt><span class="sect2"><a href="cicbrowser.html#aboutproof">Looking at a proof under development</a></span></dt><dt><span class="sect2"><a href="cicbrowser.html#whelp">Searching the library</a></span></dt></dl></dd><dt><span class="sect1"><a href="authoring.html">Authoring</a></span></dt><dd><dl><dt><span class="sect2"><a href="authoring.html#compilation">How to compile a script</a></span></dt><dt><span class="sect2"><a href="authoring.html#authoringinterface">The authoring interface</a></span></dt></dl></dd></dl></div><p> If you are already familiar with the Calculus of (Co)Inductive
+ Constructions (CIC) and with interactive theorem provers with procedural
+ proof languages (expecially Coq), getting started with Matita is relatively
+ easy. You just need to learn how to type Unicode symbols, how to browse
+ and search the library and how to author a proof script.</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="unicode"></a>How to type Unicode symbols</h2></div></div></div><p>Unicode characters can be typed in several ways:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Using the "Ctrl+Shift+Unicode code" standard Gnome shortcut. E.g. Ctrl+Shift+3a9 generates "Ω".</p></li><li class="listitem"><p>Typing the ligature "\name" where "name"
+ is a standard Unicode or LaTeX name for the character or an
+ ASCII art resembling the shape of the character. Pressing
+ "Alt+L" or Space or Enter just after the last character
+ of the name converts
+ the ligature to the Unicode symbol.
+ E.g. "\Delta" followed by Alt+L generates
+ "Δ", while pressing Alt-L after "=>" generates
+ "⇒"</p></li><li class="listitem"><p>Typing a symbol and rotating trough its equivalence class
+ with Alt-L. E.g. pressing Alt-L after an "l"
+ generates a "λ", while pressing Alt-L after an
+ "→" once generates "⇉" and pressing
+ Alt-L again generates "⇒".
+ </p></li></ul></div><p>
+ The comprehensive list of symbols names or shortcuts and their equivalence
+ classes is available clicking on the "TeX/UTF-8 table" item
+ of the "View" menu.
+ </p><p>
+ There is a memory mechanism related to equivalence classes that
+ remembers your last choice, making it the default one. For example,
+ if you use "_" to generate "⎻"
+ (that is the third choice, after "⎽" and "⎼"),
+ the next time you type Alt-L
+ after "_" you immediately get "⎻".
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="matita.conf.xml.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="cicbrowser.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configuring Matita </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Browsing and searching</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============= Getting started ============================== -->
+
+<chapter id="sec_gettingstarted">
+ <title>Getting started</title>
+ <para> If you are already familiar with the Calculus of (Co)Inductive
+ Constructions (CIC) and with interactive theorem provers with procedural
+ proof languages (expecially Coq), getting started with Matita is relatively
+ easy. You just need to learn how to type Unicode symbols, how to browse
+ and search the library and how to author a proof script.</para>
+
+ <sect1 id="unicode">
+ <title>How to type Unicode symbols</title>
+ <para>Unicode characters can be typed in several ways:</para>
+ <itemizedlist>
+ <listitem><para>Using the "Ctrl+Shift+Unicode code" standard Gnome shortcut. E.g. Ctrl+Shift+3a9 generates "Ω".</para>
+ </listitem>
+ <listitem><para>Typing the ligature "\name" where "name"
+ is a standard Unicode or LaTeX name for the character or an
+ ASCII art resembling the shape of the character. Pressing
+ "Alt+L" or Space or Enter just after the last character
+ of the name converts
+ the ligature to the Unicode symbol.
+ E.g. "\Delta" followed by Alt+L generates
+ "Δ", while pressing Alt-L after "=>" generates
+ "⇒"</para>
+ </listitem>
+ <listitem>
+ <para>Typing a symbol and rotating trough its equivalence class
+ with Alt-L. E.g. pressing Alt-L after an "l"
+ generates a "λ", while pressing Alt-L after an
+ "→" once generates "⇉" and pressing
+ Alt-L again generates "⇒".
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ The comprehensive list of symbols names or shortcuts and their equivalence
+ classes is available clicking on the "TeX/UTF-8 table" item
+ of the "View" menu.
+ </para>
+ <para>
+ There is a memory mechanism related to equivalence classes that
+ remembers your last choice, making it the default one. For example,
+ if you use "_" to generate "⎻"
+ (that is the third choice, after "⎽" and "⎼"),
+ the next time you type Alt-L
+ after "_" you immediately get "⎻".
+ </para>
+ </sect1>
+ <sect1 id="cicbrowser">
+ <title>Browsing and searching</title>
+ <para>The CIC browser is used to browse and search the library.
+ You can open a new CIC browser selecting "New Cic Browser"
+ from the "View" menu of Matita, or by pressing "F3".
+ The CIC browser is similar to a traditional Web browser.</para>
+ <sect2 id="browsinglib">
+ <title>Browsing the library</title>
+ <para>To browse the library, type in the location bar the absolute URI of
+ the theorem, definition or library fragment you are interested in.
+ "cic:/" is the root of the library. Contributions developed
+ in Matita are under "cic:/matita"; all the others are
+ part of the library of Coq.</para>
+ <para>Following the hyperlinks it is possible to navigate in the Web
+ of mathematical notions. Proof are rendered in pseudo-natural language
+ and mathematical notation is used for formulae. For now, mathematical
+ notation must be included in the current script to be activated, but we
+ plan to remove this limitation.</para>
+ </sect2>
+ <sect2 id="aboutproof">
+ <title>Looking at a proof under development</title>
+ <para>A proof under development is not yet part of the library.
+ The special URI "about:proof" can be used to browse the
+ proof currently under development, if there is one.
+ The "home" button of the CIC browser sets the location bar to
+ "about:proof".
+ </para>
+ </sect2>
+ <sect2 id="whelp">
+ <title>Searching the library</title>
+ <para>The query bar of the CIC browser can be used to search the library
+ of Matita for theorems or definitions that match certain criteria.
+ The criteria is given by typing a term in the query bar and selecting
+ an action in the drop down menu right of it.</para>
+ <sect3 id="locate">
+ <title>Searching by name</title>
+ <para> &TODO;</para>
+ </sect3>
+ <sect3 id="hint">
+ <title>List of lemmas that can be applied</title>
+ <para> &TODO;</para>
+ </sect3>
+ <sect3 id="match">
+ <title>Searching by exact match</title>
+ <para> &TODO;</para>
+ </sect3>
+ <sect3 id="elim">
+ <title>List of elimination principles for a given type</title>
+ <para> &TODO;</para>
+ </sect3>
+ <sect3 id="instance">
+ <title>Searching by instantiation</title>
+ <para> &TODO;</para>
+ </sect3>
+ </sect2>
+ </sect1>
+ <sect1 id="authoring">
+ <title>Authoring</title>
+ <sect2 id="compilation">
+ <title>How to compile a script</title>
+ <para>
+ Scripts are compiled to base URIs. Base URIs are of the form
+ "cic:/matita/path" and are given once for all for a set
+ of scripts using the "root" file.
+ </para>
+ <para>
+ A "root" file has to be placed in the root of a script set,
+ for example, consider the following files and directories, and
+ assume you keep files in "list" separated from files
+ in "sort" (for example the former directory may contain
+ functions and proofs about lists, while latter sorting algorithms
+ for lists):
+<programlisting><![CDATA[
+ list/
+ list.ma (* depending just on the standard library *)
+ utils/
+ swap.ma (* including list.ma *)
+ sort/
+ qsort.ma (* including utils/swap.ma *)
+]]></programlisting>
+ To be able to compile properly the contents of "list"
+ a file called root has to be placed in it. The file should be like
+ the following snippet.
+<programlisting><![CDATA[
+ baseuri=cic:/matita/mydatastructures
+]]></programlisting>
+ This file tells &appname; that objects generated by
+ "list.ma" have to be placed in
+ "cic:/matita/mydatastructures/list" while
+ objects generated by
+ "swap.ma" have to be placed in
+ "cic:/matita/mydatastructures/utils/swap".
+ </para>
+ <para>
+ Once you created the root file, you must generate a depend file.
+ Enter the "list" directory (the root of yuor file set)
+ and type "matitadep". Remember to regenerate the depend file
+ every time you alter the dependencies of your files (for example
+ including other scripts).
+ You can now compile you files typing "matitac".
+ </para>
+ <para>
+ To compile the "sort" directory, create a root file
+ in "sort/" like the following one and then run
+ "matitadep".
+<programlisting><![CDATA[
+ baseuri=cic:/matita/myalgorithms
+ include_paths=../list
+]]></programlisting>
+ The include_paths field can declare a list of paths separated by space.
+ Please omit any "/" from the end of base URIs or paths.
+ </para>
+ </sect2>
+ <sect2 id="authoringinterface">
+ <title>The authoring interface</title>
+ <para>&TODO;</para>
+ </sect2>
+ </sect1>
+</chapter>
+
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Installation</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="WrtCoq.html" title="Matita vs Coq" /><link rel="next" href="inst_from_src.html" title="Installing from sources" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Installation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="WrtCoq.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="inst_from_src.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_install"></a>Chapter 2. Installation</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_install.html#inst_livecd">Using the LiveCD</a></span></dt><dd><dl><dt><span class="sect2"><a href="sec_install.html#make_vmachine">Creating the virtual machine</a></span></dt><dt><span class="sect2"><a href="sec_install.html#idp68645040">Sharing files with the real PC</a></span></dt></dl></dd><dt><span class="sect1"><a href="inst_from_src.html">Installing from sources</a></span></dt><dd><dl><dt><span class="sect2"><a href="inst_from_src.html#get_source_code">Getting the source code</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#build_requirements">Requirements</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#database_setup">(optional) MySQL setup</a></span></dt><dt><span class="sect2"><a href="inst_from_src.html#build_instructions">Compiling and installing</a></span></dt></dl></dd><dt><span class="sect1"><a href="matita.conf.xml.html">Configuring Matita</a></span></dt></dl></div><p>
+ Matita is a quite complex piece of software, we thus recommend
+ you to either install al precompiled version or use the LiveCD.
+ If you are running Debian GNU/Linux (or one of its derivatives
+ like Ubuntu), you can install matita typing
+ </p><pre class="programlisting"> aptitude install matita matita-standard-library </pre><p>
+ If you are running MacOSX or Windows, give the LiveCD a try before
+ trying to compile Matita from its sources.
+ </p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="inst_livecd"></a>Using the LiveCD</h2></div></div></div><p>
+ In the following, we will assume you have installed
+ <a class="ulink" href="http://www.virtualbox.org" target="_top">virtualbox</a>
+ for your platform and downloaded the .iso image of the LiveCD
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="make_vmachine"></a>Creating the virtual machine</h3></div></div></div><p>
+ Click on the New button, a wizard will popup, you should ask to
+ its questions as follows
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ The name should be something like Matita, but can
+ be any meaningful string.
+ </p></li><li class="listitem"><p>
+ The OS type should be Debian
+ </p></li><li class="listitem"><p>
+ The base memory size can be 256 mega bytes, but you may
+ want to increase it if you are going to work with huge
+ formalizations.
+ </p></li><li class="listitem"><p>
+ The boot hard disk should be no hard disk. It may complain
+ that this choice is not common, but it is right, since you
+ will run a LiveCD you do not need to emulate an hard drive.
+ </p></li></ol></div><p>
+ Now that you are done with the creation of the virtual machine,
+ you need to insert the LiveCD in the virtual cd reader unit.
+ </p><div class="figure"><a id="idp68630080"></a><p class="title"><strong>Figure 2.1. The brand new virtual machine</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox1.png" alt="The breand new virtual machine" /></div></div></div><br class="figure-break" /><p>
+ Click on CD/DVD-ROM (that should display something like: Not mouted).
+ Then click on mount CD/DVD drive and select the ISO image
+ option. The combo-box should display no available image, you need to
+ add the ISO image you downloaded from the Matita website clicking on
+ the button near the combo-box.
+ to start the virtual machine.
+ </p><div class="figure"><a id="idp68633472"></a><p class="title"><strong>Figure 2.2. Mounting an ISO image</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox2.png" alt="Mounting an ISO image" /></div></div></div><br class="figure-break" /><p>
+ In the newely opened window click
+ the Add button
+ </p><div class="figure"><a id="idp68637552"></a><p class="title"><strong>Figure 2.3. Choosing the ISO image</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox3.png" alt="Choosing the ISO image" /></div></div></div><br class="figure-break" /><p>
+ A new windows will pop-up: choose the file you downloaded
+ (usually matita-version.iso) and click open.
+ </p><div class="figure"><a id="idp68641216"></a><p class="title"><strong>Figure 2.4. Choosing the ISO image</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox35.png" alt="Choosing the ISO image" /></div></div></div><br class="figure-break" /><p>
+ Now select the new entry you just added as the CD image
+ you want to insert in the virtual CD drive.
+ You are now ready to start the virtual machine.
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp68645040"></a>Sharing files with the real PC</h3></div></div></div><p>
+ The virtual machine Matita will run on, has its own file
+ system, that is completely separated from the one of your
+ real PC (thus your files are not available in the
+ emulated environment) and moreover it is a non-presistent
+ file system (thus you data is lost every time you
+ turn off the virtual machine).
+ </p><p>
+ Virtualbox allows you to share a real folder (beloging
+ to your real PC) with the emulated computer. Since this
+ folder is persistent, you are encouraged to put
+ your work there, so that it is not lost when the virtual
+ machine is powered off.
+ </p><p>
+ The first step to set up a shared folder is to click
+ on the shared folder configuration entry
+ of the virtual machine.
+ </p><div class="figure"><a id="idp68647616"></a><p class="title"><strong>Figure 2.5. Set up a shared folder</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox4.png" alt="Shared folder" /></div></div></div><br class="figure-break" /><p>
+ Then you shuld add a shared folder clicking on the
+ plus icon on the right
+ </p><div class="figure"><a id="idp68651136"></a><p class="title"><strong>Figure 2.6. Choosing the folder to share</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox5.png" alt="Shared folder" /></div></div></div><br class="figure-break" /><p>
+ Then you have to specify the real PC folder you want to share
+ and name it. A reasonable folder to share is /home on
+ a standard Unix system, while /Users on MaxOSX.
+ The name you give to the share is important, you should
+ remember it.
+ </p><div class="figure"><a id="idp68654928"></a><p class="title"><strong>Figure 2.7. Naming the shared folder</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox6.png" alt="Shared folder" /></div></div></div><br class="figure-break" /><p>
+ Once your virtual machine is up and running, you can
+ mount (that meand have access to) the shared folder
+ by clicking on the Mount VirtualBox share icon, and typing
+ the name of the share.
+ </p><div class="figure"><a id="idp68658672"></a><p class="title"><strong>Figure 2.8. Using it from the virtual machine</strong></p><div class="figure-contents"><div class="mediaobject"><img src="figures/vbox7.png" alt="Shared folder at work" /></div></div></div><br class="figure-break" /><p>
+ A window will then pop-up, and its content will be the
+ the content of the real PC folder.
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="WrtCoq.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="inst_from_src.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Matita vs Coq </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Installing from sources</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============= Installation ============================== -->
+
+<chapter id="sec_install">
+ <title>Installation</title>
+
+ <para>
+ &appname; is a quite complex piece of software, we thus recommend
+ you to either install al precompiled version or use the LiveCD.
+ If you are running Debian GNU/Linux (or one of its derivatives
+ like Ubuntu), you can install matita typing
+ <programlisting><![CDATA[ aptitude install matita matita-standard-library ]]></programlisting>
+ If you are running MacOSX or Windows, give the LiveCD a try before
+ trying to compile &appname; from its sources.
+ </para>
+
+ <sect1 id="inst_livecd">
+ <title>Using the LiveCD</title>
+
+ <para>
+ In the following, we will assume you have installed
+ <ulink type="http" url="http://www.virtualbox.org">virtualbox</ulink>
+ for your platform and downloaded the .iso image of the LiveCD
+ </para>
+
+ <sect2 id="make_vmachine">
+ <title>Creating the virtual machine</title>
+ <para>
+ Click on the New button, a wizard will popup, you should ask to
+ its questions as follows
+ <orderedlist>
+ <listitem><para>
+ The name should be something like &appname;, but can
+ be any meaningful string.
+ </para></listitem>
+ <listitem><para>
+ The OS type should be Debian
+ </para></listitem>
+ <listitem><para>
+ The base memory size can be 256 mega bytes, but you may
+ want to increase it if you are going to work with huge
+ formalizations.
+ </para></listitem>
+ <listitem><para>
+ The boot hard disk should be no hard disk. It may complain
+ that this choice is not common, but it is right, since you
+ will run a LiveCD you do not need to emulate an hard drive.
+ </para></listitem>
+ </orderedlist>
+ Now that you are done with the creation of the virtual machine,
+ you need to insert the LiveCD in the virtual cd reader unit.
+ </para>
+ <figure><title>The brand new virtual machine</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox1.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>The breand new virtual machine</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Click on CD/DVD-ROM (that should display something like: Not mouted).
+ Then click on mount CD/DVD drive and select the ISO image
+ option. The combo-box should display no available image, you need to
+ add the ISO image you downloaded from the &appname; website clicking on
+ the button near the combo-box.
+ to start the virtual machine.
+ </para>
+ <figure><title>Mounting an ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox2.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Mounting an ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ In the newely opened window click
+ the Add button
+ </para>
+ <figure><title>Choosing the ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox3.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Choosing the ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ A new windows will pop-up: choose the file you downloaded
+ (usually matita-version.iso) and click open.
+ </para>
+ <figure><title>Choosing the ISO image</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox35.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Choosing the ISO image</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Now select the new entry you just added as the CD image
+ you want to insert in the virtual CD drive.
+ You are now ready to start the virtual machine.
+ </para>
+ </sect2>
+ <sect2>
+ <title>Sharing files with the real PC</title>
+ <para>
+ The virtual machine &appname; will run on, has its own file
+ system, that is completely separated from the one of your
+ real PC (thus your files are not available in the
+ emulated environment) and moreover it is a non-presistent
+ file system (thus you data is lost every time you
+ turn off the virtual machine).
+ </para>
+ <para>
+ Virtualbox allows you to share a real folder (beloging
+ to your real PC) with the emulated computer. Since this
+ folder is persistent, you are encouraged to put
+ your work there, so that it is not lost when the virtual
+ machine is powered off.
+ </para>
+ <para>
+ The first step to set up a shared folder is to click
+ on the shared folder configuration entry
+ of the virtual machine.
+ </para>
+ <figure><title>Set up a shared folder</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox4.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Then you shuld add a shared folder clicking on the
+ plus icon on the right
+ </para>
+ <figure><title>Choosing the folder to share</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox5.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Then you have to specify the real PC folder you want to share
+ and name it. A reasonable folder to share is /home on
+ a standard Unix system, while /Users on MaxOSX.
+ The name you give to the share is important, you should
+ remember it.
+ </para>
+ <figure><title>Naming the shared folder</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox6.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Once your virtual machine is up and running, you can
+ mount (that meand have access to) the shared folder
+ by clicking on the Mount VirtualBox share icon, and typing
+ the name of the share.
+ </para>
+ <figure><title>Using it from the virtual machine</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/vbox7.png"
+ format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>Shared folder at work</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>
+ A window will then pop-up, and its content will be the
+ the content of the real PC folder.
+ </para>
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="inst_from_src">
+ <title>Installing from sources</title>
+
+ <para>Install &appname; from the sources is hard, you have been warned!
+ </para>
+
+ <sect2 id="get_source_code">
+ <title>Getting the source code</title>
+
+ <para>You can get the &appname; source code in two ways:
+ <orderedlist>
+
+ <listitem> <para> go to the <ulink type="http"
+ url="http://matita.cs.unibo.it/download.shtml">download
+ page</ulink> and get the <ulink type="http"
+ url="http://matita.cs.unibo.it/sources/matita-latest.tar.gz"
+ >latest released source tarball</ulink>;</para> </listitem>
+
+ <listitem> <para> get the development sources from <ulink type="http"
+ url="http://helm.cs.unibo.it/websvn/listing.php?repname=helm&path=%2F&sc=0">our
+ SVN repository</ulink>. You will need the
+ <application>components/</application> and
+ <application>matita/</application> directories from the
+ <filename>trunk/helm/software/</filename> directory, plus the
+ <filename>configure</filename> and <filename>Makefile*</filename>
+ stuff from the same directory. </para>
+
+ <para>In this case you will need to run
+ <command>autoconf</command> before proceding with the building
+ instructions below.</para> </listitem>
+
+ </orderedlist>
+ </para>
+
+ </sect2>
+
+ <sect2 id="build_requirements">
+ <title>Requirements</title>
+
+ <para>In order to build &appname; from sources you will need some
+ tools and libraries. They are listed below.
+
+ <note>
+ <title>Note for Debian (and derivatives) users</title>
+
+ <para>If you are running a
+ <ulink type="http"
+ url="http://www.debian.org">Debian GNU/Linux</ulink>
+ distribution,
+ or any of its derivative like <ulink type="http"
+ url="http://ubuntu.com">Ubuntu</ulink>,
+ you can use APT to install all the required tools and
+ libraries since they are all part of the Debian archive.
+ </para>
+ <para>
+ apt-get install ocaml ocaml-findlib libgdome2-ocaml-dev liblablgtk2-ocaml-dev liblablgtkmathview-ocaml-dev liblablgtksourceview-ocaml-dev libsqlite3-ocaml-dev libocamlnet-ocaml-dev libzip-ocaml-dev libhttp-ocaml-dev ocaml-ulex08 libexpat-ocaml-dev libmysql-ocaml-dev camlp5
+ </para>
+ <para>
+ An official debian package is going to be added to the
+ archive too.
+ </para>
+
+ </note>
+
+ <variablelist>
+ <title>Required tools and libraries</title>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://caml.inria.fr">OCaml</ulink> </application>
+ </term>
+ <listitem>
+ <para> the Objective Caml compiler, version 3.09 or above </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://www.ocaml-programming.de/packages/">Findlib</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> OCaml package manager, version 1.1.1 or above</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://www.xs4all.nl/~mmzeeman/ocaml/">OCaml
+ Expat</ulink> </application>
+ </term>
+ <listitem>
+ <para>OCaml bindings for the <application><ulink type="http"
+ url="http://expat.sourceforge.net/">expat</ulink>
+ library</application> </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://gmetadom.sourceforge.net/">GMetaDOM</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para>OCaml bindings for the <application><ulink type="http"
+ url="http://gdome2.cs.unibo.it/">Gdome 2</ulink>
+ library</application></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://www.bononia.it/~zack/ocaml-http.en.html">OCaml
+ HTTP</ulink> </application>
+ </term>
+ <listitem>
+ <para> OCaml library to write HTTP daemons (and clients) </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk.html">LablGTK</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> OCaml bindings for the <application> <ulink type="http"
+ url="http://www.gtk.org"> GTK+</ulink> library
+ </application>, version 2.6.0 or above </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://helm.cs.unibo.it/mml-widget/">GtkMathView</ulink>
+ </application>
+ </term>
+ <term>
+ <application> <ulink type="http"
+ url="http://helm.cs.unibo.it/mml-widget/">LablGtkMathView</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> GTK+ widget to render <ulink type="http"
+ url="http://www.w3.org/Math/">MathML</ulink> documents and its
+ OCaml bindings </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://gtksourceview.sourceforge.net/">GtkSourceView</ulink>
+ </application>
+ </term>
+ <term>
+ <application> <ulink type="http"
+ url="http://helm.cs.unibo.it/software/lablgtksourceview/">LablGtkSourceView</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> extension for the GTK+ text widget (adding the typical
+ features of source code editors) and its OCaml bindings </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> &MYSQL; </term>
+ <term>
+ <application> <ulink type="http"
+ url="http://raevnos.pennmush.org/code/ocaml-mysql/">OCaml
+ MySQL</ulink> </application>
+ </term>
+ <listitem>
+ <para> SQL database and OCaml bindings for its client-side library
+ </para>
+ <para> The SQL database itself is not strictly needed to run
+ &appname;, but the client libraries are.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term> &Sqlite; </term>
+ <term>
+ <application>
+ <ulink type="http"
+ url="http://ocaml.info/home/ocaml_sources.html">
+ OCaml Sqlite3
+ </ulink> </application>
+ </term>
+ <listitem>
+ <para> Sqlite database and OCaml bindings
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://ocamlnet.sourceforge.net/">Ocamlnet</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> collection of OCaml libraries to deal with
+ application-level Internet protocols and conventions </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://www.cduce.org/download.html">ulex</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> Unicode lexer generator for OCaml </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <application> <ulink type="http"
+ url="http://cristal.inria.fr/~xleroy/software.html">CamlZip</ulink>
+ </application>
+ </term>
+ <listitem>
+ <para> OCaml library to access <filename>.gz</filename> files
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist> </para>
+
+ </sect2>
+
+ <sect2 id="database_setup">
+ <title>(optional) &MYSQL; setup</title>
+
+ <para> To fully exploit &appname; indexing and search capabilities
+ on a huge metadata set you may
+ need a working &MYSQL; database. Detalied instructions on how to do
+ it can be found in the <ulink type="http"
+ url="http://dev.mysql.com/doc/">MySQL documentation</ulink>. Here you
+ can find a quick howto. </para>
+
+ <para> In order to create a database you need administrator permissions on
+ your MySQL installation, usually the root account has them. Once you
+ have the permissions, a new database can be created executing
+ <userinput>mysqladmin create matita</userinput>
+ (<emphasis>matita</emphasis> is the default database name, you can
+ change it using the <parameter>db.user</parameter> key of the
+ configuration file). </para>
+
+ <para> Then you need to grant the necessary access permissions to the
+ database user of &appname;, typing <userinput>echo "grant all privileges
+ on matita.* to helm;" | mysql matita</userinput> should do the trick
+ (<emphasis>helm</emphasis> is the default user name used by &appname; to
+ access the database, you can change it using the
+ <parameter>db.user</parameter> key of the configuration file).
+ </para>
+
+ <note>
+ <para> This way you create a database named <emphasis>matita</emphasis>
+ on which anyone claiming to be the <emphasis>helm</emphasis> user can
+ do everything (like adding dummy data or destroying the contained
+ one). It is strongly suggested to apply more fine grained permissions,
+ how to do it is out of the scope of this manual.</para>
+ </note>
+
+ </sect2>
+
+ <sect2 id="build_instructions">
+ <title>Compiling and installing</title>
+
+ <para> Once you get the source code the installations steps should be
+ quite familiar.</para>
+
+ <para> First of all you need to configure the build process executing
+ <userinput>./configure</userinput>. This will check that all needed
+ tools and library are installed and prepare the sources for compilation
+ and installation. </para>
+
+ <para> Quite a few (optional) arguments may be passed to the
+ <application>configure</application> command line to change build time
+ parameters. They are listed below, together with their
+ default values: </para>
+
+ <variablelist>
+ <title> <application>configure</application> command line
+ arguments</title>
+
+ <varlistentry>
+ <term>
+ <userinput>--with-runtime-dir=<replaceable>dir</replaceable></userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis>
+ <filename>/usr/local/matita</filename>) Runtime base directory
+ where all &appname; stuff (executables, configuration files,
+ standard library, ...) will be installed
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <userinput>--with-dbhost=<replaceable>host</replaceable></userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis> localhost) Default SQL server
+ hostname. Will be used while building the standard library
+ during the installation and to create the default &appname;
+ configuration. May be changed later in configuration file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <userinput>--enable-debug</userinput>
+ </term>
+ <listitem>
+ <para>
+ (<emphasis>Default:</emphasis> disabled) Enable debugging code.
+ Not for the casual user.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para> Then you will manage the build and install process using
+ <application><ulink type="http"
+ url="http://www.gnu.org/software/make/">make</ulink></application>
+ as usual. Below are reported the targets you have to invoke in sequence
+ to build and install:
+ </para>
+
+ <variablelist>
+ <title><application>make</application> targets</title>
+
+ <varlistentry>
+ <term><userinput>world</userinput></term>
+ <listitem>
+ <para>builds components needed by &appname; and &appname; itself
+ (in bytecode or native code depending
+ on the availability of the OCaml native code compiler) </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><userinput>install</userinput></term>
+ <listitem>
+ <para>installs &appname; related tools, standard library and the
+ needed runtime stuff in the proper places on the filesystem.
+ </para>
+ <para>As a part of the installation process the &appname;
+ standard library will be compiled, thus testing that the just
+ built <application>matitac</application> compiler works
+ properly.</para>
+ <para>For this step you will need a working SQL database (for
+ indexing the standard library while you are compiling it). See
+ <ulink type="http" url="#database_setup">Database setup</ulink>
+ for instructions on how to set it up.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="matita.conf.xml">
+ <title>Configuring &appname;</title>
+ <para>
+ The configuration file is divided in four sections. The user and
+ matita ones are self explicative and does not need user
+ intervention. Here we report a sample snippet for these two
+ sections. The remaining db and getter sections will be explained in
+ details later.
+ <programlisting>
+<![CDATA[
+ <section name="user">
+ <key name="home">$(HOME)</key>
+ <key name="name">$(USER)</key>
+ </section>
+ <section name="matita">
+ <key name="basedir">$(user.home)/.matita</key>
+ <key name="rt_base_dir">/usr/share/matita/</key>
+ <key name="owner">$(user.name)</key>
+ </section>
+]]></programlisting>
+ </para>
+ <para>
+ &appname; needs to store/fetch data and metadata. Data is essentially
+ composed of XML files, metadata is a set of tuples for a relational
+ model. Data and metadata can produced by the user or be already
+ available. Both kind of data/metadata can be local and/or remote.
+ </para>
+ <para>
+ The db section tells &appname; where to store and retrieve metadata,
+ while the getter section describes where XML files have to be
+ found. The following picture describes the suggested configuration.
+ Dashed arrows are determined by the configuration file.
+ </para>
+ <figure><title>Configuring the Databases</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/database.png" format="PNG" srccredit="Enrico Tassi"/>
+ </imageobject>
+ <textobject><phrase>How to configure the databases.</phrase></textobject>
+ </mediaobject>
+ </figure>
+ <para>The getter</para>
+ <para>
+ Consider the following snippet and the URI
+ <userinput>cic:/matita/foo/bar.con</userinput>. If &appname;
+ is asked to read that object it will resolve the object trough
+ the getter. Since the first two entries are equally specific
+ (longest match rule applies) first the path
+ <userinput>file://$(matita.rt_base_dir)/xml/standard-library/foo/bar.con</userinput>
+ and then <userinput>file://$(user.home)/.matita/xml/matita/foo/bar.con</userinput>
+ are inspected.
+ <programlisting>
+<![CDATA[
+ <section name="getter">
+ <key name="cache_dir">$(user.home)/.matita/getter/cache</key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(matita.rt_base_dir)/xml/standard-library/
+ ro
+ </key>
+ <key name="prefix">
+ cic:/matita/
+ file://$(user.home)/.matita/xml/matita/
+ </key>
+ <key name="prefix">
+ cic:/Coq/
+ http://mowgli.cs.unibo.it/xml/
+ legacy
+ </key>
+ </section>
+]]>
+ </programlisting>
+ if the same URI has to be written, the former prefix is skipped
+ since it is marked as readonly (<userinput>ro</userinput>).
+ Objects resolved using the third prefix are readonly too, and are
+ retrieved using the network. There is no limit to the number of
+ prefixes the user can define. The distinction between prefixes marked
+ as readonly and legacy is that, legacy ones are really read only, while
+ the ones marked with <userinput>ro</userinput> are considered for
+ writing when &appname; is started in system mode (used to publish user
+ developments in the library space).
+ </para>
+ <para>The db</para>
+ <para>
+ The database subsystem has three fron ends: library, user and
+ legacy. The latter is the only optional one. Every query is done on
+ every frontend, making the duplicate free union of the results.
+ The user front end kepps metadata produced by the user, and is thus
+ heavily accessed in read/write mode, while the library and legacy
+ fron ends are read only. Every front end can be connected to
+ backend, the storage actually.
+ Consider the following snippet.
+ <programlisting>
+<![CDATA[
+ <section name="db">
+ <key name="metadata">mysql://mowgli.cs.unibo.it matita helm none legacy</key>
+ <key name="metadata">file://$(matita.rt_base_dir) metadata.db helm helm library</key>
+ <key name="metadata">file://$(matita.basedir) user.db helm helm user</key>
+ </section>
+]]>
+ </programlisting>
+ Here the usr database is a file (thus locally accessed trough the
+ Sqlite library) placed in the user's home directory. The library one is
+ placed in the &appname; runtime directory. The legacy fron end is
+ connected to a remote &MYSQL; based storage. Every metadata key
+ takes a path to the storage, the name of the database, the user name,
+ a password (or <userinput>none</userinput>) and the name of the front
+ end to which it is attached.
+ </para>
+ </sect1>
+
+</chapter>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Introduction</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="next" href="WrtCoq.html" title="Matita vs Coq" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Introduction</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="WrtCoq.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_intro"></a>Chapter 1. Introduction</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_intro.html#Features">Features</a></span></dt><dt><span class="sect1"><a href="WrtCoq.html">Matita vs Coq</a></span></dt></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Features"></a>Features</h2></div></div></div><p><span class="application">Matita</span> is an interactive theorem prover
+ (or proof assistant) with the following characteristics:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>It is based on a variant of the Calculus of (Co)Inductive Constructions (CIC). CIC is also the logic of the Coq proof assistant.</p></li><li class="listitem"><p>It adopts a procedural proof language, but it has a new set of small step tacticals that improve proof structuring and debugging.</p></li><li class="listitem"><p>It has a stand-alone graphical user interface (GUI) inspired by
+CtCoq/Proof General. The GUI is implemented according to the state
+of the art. In particular:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>It is based and fully integrated with Gtk/Gnome.</p></li><li class="listitem"><p>An on-line help can be browsed via the Gnome documentation browser.</p></li><li class="listitem"><p>Mathematical formulae are rendered in two dimensional notation via MathML and Unicode.</p></li></ul></div></li><li class="listitem"><p>It integrates advanced browsing and searching procedures.</p></li><li class="listitem"><p>It allows the use of the typical ambiguous mathematical notation by means of a disambiguating parser.</p></li><li class="listitem"><p>It is compatible with the library of Coq (definitions and proof objects).</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="WrtCoq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"><span class="application">Matita</span> V0.5.9
+ User Manual (rev. 0.5.9
+) </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Matita vs Coq</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============= Introduction ============================== -->
+
+<chapter id="sec_intro">
+ <title>Introduction</title>
+ <sect1 id="Features">
+ <title>Features</title>
+ <para><application>Matita</application> is an interactive theorem prover
+ (or proof assistant) with the following characteristics:</para>
+ <itemizedlist>
+ <listitem>
+ <para>It is based on a variant of the Calculus of (Co)Inductive Constructions (CIC). CIC is also the logic of the Coq proof assistant.</para>
+ </listitem>
+ <listitem>
+ <para>It adopts a procedural proof language, but it has a new set of small step tacticals that improve proof structuring and debugging.</para>
+ </listitem>
+ <listitem>
+ <para>It has a stand-alone graphical user interface (GUI) inspired by
+CtCoq/Proof General. The GUI is implemented according to the state
+of the art. In particular:</para>
+ <itemizedlist>
+ <listitem>
+ <para>It is based and fully integrated with Gtk/Gnome.</para>
+ </listitem>
+ <listitem>
+ <para>An on-line help can be browsed via the Gnome documentation browser.</para>
+ </listitem>
+ <listitem>
+ <para>Mathematical formulae are rendered in two dimensional notation via MathML and Unicode.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>It integrates advanced browsing and searching procedures.</para>
+ </listitem>
+ <listitem>
+ <para>It allows the use of the typical ambiguous mathematical notation by means of a disambiguating parser.</para>
+ </listitem>
+ <listitem>
+ <para>It is compatible with the library of Coq (definitions and proof objects).</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+ <sect1 id="WrtCoq">
+ <title>Matita vs Coq</title>
+ <para>
+ The system shares a common look&feel with the Coq proof assistant
+ and its graphical user interface. The two systems have the same logic,
+ very close proof languages and similar sets of tactics. Moreover,
+ Matita is compatible with the library of Coq.
+ From the user point of view the main lacking features
+ with respect to Coq are:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>proof extraction;</para>
+ </listitem>
+ <listitem>
+ <para>an extensible language of tactics;</para>
+ </listitem>
+ <listitem>
+ <para>automatic implicit arguments;</para>
+ </listitem>
+ <listitem>
+ <para>several ad-hoc decision procedures;</para>
+ </listitem>
+ <listitem>
+ <para>several rarely used variants for most of the tactics;</para>
+ </listitem>
+ <listitem>
+ <para>sections and local variables. To maintain compatibility with the library of Coq, theorems defined inside sections are abstracted by name over the section variables; their instances are explicitly applied to actual arguments by means of explicit named substitutions.</para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ Still from the user point of view, the main differences with respect
+ to Coq are:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>the language of tacticals that allows execution of partial tactical application;</para>
+ </listitem>
+ <listitem>
+ <para>the unification of the concept of metavariable and existential variable;</para>
+ </listitem>
+ <listitem>
+ <para>terms with subterms that cannot be inferred are always allowed as arguments of tactics or other commands;</para>
+ </listitem>
+ <listitem>
+ <para>ambiguous terms are disambiguated by direct interaction with the user;</para>
+ </listitem>
+ <listitem>
+ <para>theorems and definitions in the library are always accessible without needing to require/include them; right now, only notation needs to be included to become active, but we plan to remove this limitation.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+</chapter>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10. License</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="command_inline.html" title="inline" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="command_inline.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_license"></a>Chapter 10. License</h1></div></div></div><p> Both Matita and this document are part of HELM, an Hypertextual,
+ Electronic Library of Mathematics, developed at the Computer Science
+ Department, University of Bologna, Italy. </p><p> HELM is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option) any later
+ version. </p><p> HELM is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+</p><p> You should have received a copy of the GNU General Public License along
+ with HELM; if not, write to the Free Software Foundation, Inc., 51 Franklin
+ St, Fifth Floor, Boston, MA 02110-1301 USA. A copy of the GNU General
+ Public License is available at <a class="ulink" href="http://www.gnu.org/copyleft/gpl.html" target="_top">this link</a>. </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="command_inline.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">inline </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============= Application License ============================= -->
+
+<chapter id="sec_license">
+ <title>License</title>
+ &legal;
+</chapter>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6. Tacticals</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="ch05s02.html" title="interpretation" /><link rel="next" href="proofstatus.html" title="The proof status" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Tacticals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="proofstatus.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_tacticals"></a>Chapter 6. Tacticals</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_tacticals.html#idp70716848">Interactive proofs and definitions</a></span></dt><dt><span class="sect1"><a href="proofstatus.html">The proof status</a></span></dt><dt><span class="sect1"><a href="tacticals.html">Tacticals</a></span></dt></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp70716848"></a>Interactive proofs and definitions</h2></div></div></div><p>
+ An interactive definition is started by giving a
+ <a class="link" href="axiom_definition_declaration.html#definition" title="definition id[: term] [≝ term]">definition</a> command omitting
+ the definiens.
+ An interactive proof is started by using one of the
+ <a class="link" href="proofs.html" title="Proofs">proof commands</a> omitting
+ an explicit proof term.
+ </p><p>An interactive proof or definition can and must be terminated by
+ a <a class="link" href="command_qed.html" title="qed">qed</a> command when no more sequents are
+ left to prove. Between the command that starts the interactive session and
+ the qed command the user must provide a procedural proof script made
+ of <a class="link" href="sec_tactics.html" title="Chapter 7. Tactics">tactics</a> structured by means of
+ <a class="link" href="tacticals.html" title="Tacticals">tacticals</a>.</p><p>In the tradition of the LCF system, tacticals can be considered
+ higher order tactics. Their syntax is structured and they are executed
+ atomically. On the contrary, in Matita the syntax of several tacticals is
+ destructured into a sequence of tokens and tactics in such a way that is
+ is possible to stop execution after every single token or tactic.
+ The original semantics is preserved: the execution of the whole sequence
+ yields the result expected by the original LCF-like tactical.</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="proofstatus.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">interpretation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The proof status</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============ Tacticals ====================== -->
+<chapter id="sec_tacticals">
+ <title>Tacticals</title>
+ <sect1>
+ <title>Interactive proofs and definitions</title>
+ <para>
+ An interactive definition is started by giving a
+ <link linkend="definition">definition</link> command omitting
+ the definiens.
+ An interactive proof is started by using one of the
+ <link linkend="proofs">proof commands</link> omitting
+ an explicit proof term.
+ </para>
+ <para>An interactive proof or definition can and must be terminated by
+ a <link linkend="command_qed">qed</link> command when no more sequents are
+ left to prove. Between the command that starts the interactive session and
+ the qed command the user must provide a procedural proof script made
+ of <link linkend="sec_tactics">tactics</link> structured by means of
+ <link linkend="tacticals">tacticals</link>.</para>
+ <para>In the tradition of the LCF system, tacticals can be considered
+ higher order tactics. Their syntax is structured and they are executed
+ atomically. On the contrary, in Matita the syntax of several tacticals is
+ destructured into a sequence of tokens and tactics in such a way that is
+ is possible to stop execution after every single token or tactic.
+ The original semantics is preserved: the execution of the whole sequence
+ yields the result expected by the original LCF-like tactical.</para>
+ </sect1>
+ <sect1 id="proofstatus">
+ <title>The proof status</title>
+ <para>
+ During an interactive proof, the proof status is made of
+ the set of sequents to prove and the partial proof built so far.
+ </para>
+ <para>The partial proof can be <link linkend="aboutproof">inspected</link>
+ on demand in the CIC browser. It will be shown in pseudo-natural language
+ produced on the fly from the proof term.</para>
+ <para>The set of sequents to prove is shown in the notebook of the
+ <link linkend="authoringinterface">authoring interface</link>, in the
+ top-right corner of the main window of Matita. Each tab shows a different
+ sequent, named with a question mark followed by a number. The current
+ role of the sequent, according to the following description, is also
+ shown in the tab tag.
+ </para>
+ <orderedlist>
+ <listitem id="selectedsequents">
+ <para>
+ <emphasis role="bold">Selected sequents</emphasis>
+ (name in boldface, e.g. <emphasis role="bold">?3</emphasis>).
+ The next tactic will be applied to every selected sequent, producing
+ new selected sequents. <link linkend="tacticals">Tacticals</link>
+ such as branching ("<emphasis role="bold">[</emphasis>")
+ or "<emphasis role="bold">focus</emphasis>" can be used
+ to change the set of selected sequents.
+ </para>
+ </listitem>
+ <listitem id="siblingsequents">
+ <para>
+ <emphasis role="bold">Sibling sequents</emphasis>
+ (name prefixed by a vertical bar and their position, e.g.
+ |<subscript>3</subscript>?2). When the set of selected sequents
+ has more than one element, the user can decide to focus in turn on each
+ of them. The branching <link linkend="tacticals">tactical</link>
+ ("<emphasis role="bold">[</emphasis>") selects the first
+ sequent only, marking every previously selected sequent as a sibling
+ sequent. Each sibling sequent is given a different position. The
+ tactical "<emphasis role="bold">2,3:</emphasis>" can be used to
+ select one or more sibling sequents, different from the one proposed,
+ according to their position. Once the user starts to work on the
+ selected sibling sequents it becomes impossible to select a new
+ set of siblings until the ("<emphasis role="bold">|</emphasis>")
+ tactical is used to end work on the current one.
+ </para>
+ </listitem>
+ <listitem id="solvedsequents">
+ <para>
+ <emphasis role="bold">Automatically solved sibling sequents</emphasis>
+ (name strokethrough, e.g. |<subscript>3</subscript><emphasis role="strikethrough">?2</emphasis>).
+ Sometimes a tactic can close by side effects a sibling sequent the
+ user has not selected yet. The sequent is left in the automatically
+ solved status in order for the user to explicitly accept
+ (using the "<emphasis role="bold">skip</emphasis>"
+ <link linkend="tacticals">tactical</link>) the automatic
+ instantiation in the proof script. This way the correspondence between
+ the number of branches in the proof script and the number of sequents
+ generated in the proof is preserved.
+ </para>
+ </listitem>
+ </orderedlist>
+ </sect1>
+ <sect1 id="tacticals">
+ <title>Tacticals</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>proof script</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.proofscript">&proofscript;</entry>
+ <entry>::=</entry>
+ <entry>&proofstep; [&proofstep;]…</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>Every proof step can be immediately executed.</para>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>proof steps</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.proofstep">&proofstep;</entry>
+ <entry>::=</entry>
+ <entry>&LCFtactical;</entry>
+ <entry>The tactical is applied to each
+ <link linkend="selectedsequents">selected sequent</link>.
+ Each new sequent becomes a selected sequent.</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">.</emphasis></entry>
+ <entry>The first
+ <link linkend="selectedsequents">selected sequent</link> becomes
+ the only one selected. All the remaining previously selected sequents
+ are proposed to the user one at a time when the next
+ "<emphasis role="bold">.</emphasis>" is used.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">;</emphasis></entry>
+ <entry>Nothing changes. Use this proof step as a separator in
+ concrete syntax.</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">[</emphasis></entry>
+ <entry>Every <link linkend="selectedsequents">selected sequent</link>
+ becomes a <link linkend="siblingsequents">sibling sequent</link>
+ that constitute a branch in the proof.
+ Moreover, the first sequent is also selected.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">|</emphasis></entry>
+ <entry>Stop working on the current branch of the innermost branching
+ proof.
+ The sibling branches become the <link linkend="siblingsequents">sibling
+ sequents</link> and the first one is also selected.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&nat;[<emphasis role="bold">,</emphasis>&nat;]…<emphasis role="bold">:</emphasis></entry>
+ <entry>The <link linkend="siblingsequents">sibling sequents</link>
+ specified by the user become the next
+ <link linkend="selectedsequents">selected sequents</link>.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">*:</emphasis></entry>
+ <entry>Every sibling branch not considered yet in the innermost
+ branching proof becomes a
+ <link linkend="selectedsequents">selected sequent</link>.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">skip</emphasis></entry>
+ <entry>Accept the automatically provided instantiation (not shown
+ to the user) for the currently selected
+ <link linkend="solvedsequents">automatically closed sibling sequent</link>.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">]</emphasis></entry>
+ <entry>Stop analyzing branches for the innermost branching proof.
+ Every sequent opened during the branching proof and not closed yet
+ becomes a <link linkend="selectedsequents">selected sequent</link>.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">focus</emphasis> &nat; [&nat;]…</entry>
+ <entry>
+ Selects the sequents specified by the user. The selected sequents
+ must be completely closed (no new sequents left open) before doing an
+ "<emphasis role="bold">unfocus</emphasis> that restores
+ the current set of sibling branches.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">unfocus</emphasis></entry>
+ <entry>
+ Used to match the innermost
+ "<emphasis role="bold">focus</emphasis>" tactical
+ when all the sequents selected by it have been closed.
+ Until "<emphasis role="bold">unfocus</emphasis>" is
+ performed, it is not possible to progress in the rest of the
+ proof.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>tactics and LCF tacticals</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.LCFtactical">&LCFtactical;</entry>
+ <entry>::=</entry>
+ <entry>&tactic;</entry>
+ <entry>Applies the specified tactic.</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&LCFtactical; <emphasis role="bold">;</emphasis> &LCFtactical;</entry>
+ <entry>Applies the first tactical first and the second tactical
+ to each sequent opened by the first one.</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&LCFtactical;
+ <emphasis role="bold">[</emphasis>
+ [&LCFtactical;]
+ [<emphasis role="bold">|</emphasis> &LCFtactical;]…
+ <emphasis role="bold">]</emphasis>
+ </entry>
+ <entry>Applies the first tactical first and each tactical in the
+ list of tacticals to the corresponding sequent opened by the
+ first one. The number of tacticals provided in the list must be
+ equal to the number of sequents opened by the first tactical.</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">do</emphasis> &nat;
+ &LCFtactical;
+ </entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">repeat</emphasis>
+ &LCFtactical;
+ </entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <emphasis role="bold">first [</emphasis>
+ [&LCFtactical;]
+ [<emphasis role="bold">|</emphasis> &LCFtactical;]…
+ <emphasis role="bold">]</emphasis>
+ </entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">try</emphasis> &LCFtactical;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <emphasis role="bold">solve [</emphasis>
+ [&LCFtactical;]
+ [<emphasis role="bold">|</emphasis> &LCFtactical;]…
+ <emphasis role="bold">]</emphasis>
+ </entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>&LCFtactical;<emphasis role="bold">)</emphasis></entry>
+ <entry>Used for grouping during parsing.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+</chapter>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Tactics</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="tacticals.html" title="Tacticals" /><link rel="next" href="tac_absurd.html" title="absurd" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Tactics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tacticals.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tac_absurd.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_tactics"></a>Chapter 7. Tactics</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_tactics.html#tactics_quickref">Quick reference card</a></span></dt><dt><span class="sect1"><a href="tac_absurd.html">absurd</a></span></dt><dt><span class="sect1"><a href="tac_apply.html">apply</a></span></dt><dt><span class="sect1"><a href="tac_applyS.html">applyS</a></span></dt><dt><span class="sect1"><a href="tac_assumption.html">assumption</a></span></dt><dt><span class="sect1"><a href="tac_auto.html">auto</a></span></dt><dt><span class="sect1"><a href="tac_cases.html">cases</a></span></dt><dt><span class="sect1"><a href="tac_clear.html">clear</a></span></dt><dt><span class="sect1"><a href="tac_clearbody.html">clearbody</a></span></dt><dt><span class="sect1"><a href="tac_compose.html">compose</a></span></dt><dt><span class="sect1"><a href="tac_change.html">change</a></span></dt><dt><span class="sect1"><a href="tac_constructor.html">constructor</a></span></dt><dt><span class="sect1"><a href="tac_contradiction.html">contradiction</a></span></dt><dt><span class="sect1"><a href="tac_cut.html">cut</a></span></dt><dt><span class="sect1"><a href="tac_decompose.html">decompose</a></span></dt><dt><span class="sect1"><a href="tac_demodulate.html">demodulate</a></span></dt><dt><span class="sect1"><a href="tac_destruct.html">destruct</a></span></dt><dt><span class="sect1"><a href="tac_elim.html">elim</a></span></dt><dt><span class="sect1"><a href="tac_elimType.html">elimType</a></span></dt><dt><span class="sect1"><a href="tac_exact.html">exact</a></span></dt><dt><span class="sect1"><a href="tac_exists.html">exists</a></span></dt><dt><span class="sect1"><a href="tac_fail.html">fail</a></span></dt><dt><span class="sect1"><a href="tac_fold.html">fold</a></span></dt><dt><span class="sect1"><a href="tac_fourier.html">fourier</a></span></dt><dt><span class="sect1"><a href="tac_fwd.html">fwd</a></span></dt><dt><span class="sect1"><a href="tac_generalize.html">generalize</a></span></dt><dt><span class="sect1"><a href="tac_id.html">id</a></span></dt><dt><span class="sect1"><a href="tac_intro.html">intro</a></span></dt><dt><span class="sect1"><a href="tac_intros.html">intros</a></span></dt><dt><span class="sect1"><a href="tac_inversion.html">inversion</a></span></dt><dt><span class="sect1"><a href="tac_lapply.html">lapply</a></span></dt><dt><span class="sect1"><a href="tac_left.html">left</a></span></dt><dt><span class="sect1"><a href="tac_letin.html">letin</a></span></dt><dt><span class="sect1"><a href="tac_normalize.html">normalize</a></span></dt><dt><span class="sect1"><a href="tac_reflexivity.html">reflexivity</a></span></dt><dt><span class="sect1"><a href="tac_replace.html">change</a></span></dt><dt><span class="sect1"><a href="tac_rewrite.html">rewrite</a></span></dt><dt><span class="sect1"><a href="tac_right.html">right</a></span></dt><dt><span class="sect1"><a href="tac_ring.html">ring</a></span></dt><dt><span class="sect1"><a href="tac_simplify.html">simplify</a></span></dt><dt><span class="sect1"><a href="tac_split.html">split</a></span></dt><dt><span class="sect1"><a href="tac_subst.html">subst</a></span></dt><dt><span class="sect1"><a href="tac_symmetry.html">symmetry</a></span></dt><dt><span class="sect1"><a href="tac_transitivity.html">transitivity</a></span></dt><dt><span class="sect1"><a href="tac_unfold.html">unfold</a></span></dt><dt><span class="sect1"><a href="tac_whd.html">whd</a></span></dt></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tactics_quickref"></a>Quick reference card</h2></div></div></div><p>
+ </p><div class="table"><a id="idp71070096"></a><p class="title"><strong>Table 7.1. tactics</strong></p><div class="table-contents"><table summary="tactics" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.tactic"></a><span class="emphasis"><em><a class="link" href="sec_tactics.html#grammar.tactic">tactic</a></em></span></td><td style="">::=</td><td style=""><a class="link" href="tac_absurd.html" title="absurd"><span class="bold"><strong>absurd</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_apply.html" title="apply"><span class="bold"><strong>apply</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_applyS.html" title="applyS"><span class="bold"><strong>applyS</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_assumption.html" title="assumption">
+ <span class="bold"><strong>assumption</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_auto.html" title="auto"><span class="bold"><strong>auto</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span>. <span class="bold"><strong>autobatch</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_cases.html" title="cases"><span class="bold"><strong>cases</strong></span></a>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>(</strong></span>[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…<span class="bold"><strong>)</strong></span>]
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_change.html" title="change"><span class="bold"><strong>change</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> <span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_clear.html" title="clear"><span class="bold"><strong>clear</strong></span></a>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>…]
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_clearbody.html" title="clearbody"><span class="bold"><strong>clearbody</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_compose.html" title="compose"><span class="bold"><strong>compose</strong></span></a> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] [<span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_constructor.html" title="constructor"><span class="bold"><strong>constructor</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_contradiction.html" title="contradiction">
+ <span class="bold"><strong>contradiction</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_cut.html" title="cut"><span class="bold"><strong>cut</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_decompose.html" title="decompose"><span class="bold"><strong>decompose</strong></span></a>
+ [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>…]
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_demodulate.html" title="demodulate"><span class="bold"><strong>demodulate</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_destruct.html" title="destruct"><span class="bold"><strong>destruct</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_elim.html" title="elim"><span class="bold"><strong>elim</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_elimType.html" title="elimType"><span class="bold"><strong>elimType</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_exact.html" title="exact"><span class="bold"><strong>exact</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_exists.html" title="exists">
+ <span class="bold"><strong>exists</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_fail.html" title="fail">
+ <span class="bold"><strong>fail</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_fold.html" title="fold"><span class="bold"><strong>fold</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.reduction-kind">reduction-kind</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_fourier.html" title="fourier">
+ <span class="bold"><strong>fourier</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_fwd.html" title="fwd"><span class="bold"><strong>fwd</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_generalize.html" title="generalize"><span class="bold"><strong>generalize</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_id.html" title="id">
+ <span class="bold"><strong>id</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_intro.html" title="intro"><span class="bold"><strong>intro</strong></span></a> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_intros.html" title="intros"><span class="bold"><strong>intros</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_inversion.html" title="inversion"><span class="bold"><strong>inversion</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_lapply.html" title="lapply"><span class="bold"><strong>lapply</strong></span></a>
+ [<span class="bold"><strong>linear</strong></span>]
+ [<span class="bold"><strong>depth=</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>
+ [<span class="bold"><strong>to</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>
+ [<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>…]
+ ]
+ [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_left.html" title="left">
+ <span class="bold"><strong>left</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_letin.html" title="letin"><span class="bold"><strong>letin</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_normalize.html" title="normalize"><span class="bold"><strong>normalize</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_reflexivity.html" title="reflexivity">
+ <span class="bold"><strong>reflexivity</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_replace.html" title="replace"><span class="bold"><strong>replace</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> <span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_rewrite.html" title="rewrite"><span class="bold"><strong>rewrite</strong></span></a> [<span class="bold"><strong><</strong></span>|<span class="bold"><strong>></strong></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_right.html" title="right">
+ <span class="bold"><strong>right</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_ring.html" title="ring">
+ <span class="bold"><strong>ring</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_simplify.html" title="simplify"><span class="bold"><strong>simplify</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_split.html" title="split">
+ <span class="bold"><strong>split</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_subst.html" title="subst">
+ <span class="bold"><strong>subst</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <a class="link" href="tac_symmetry.html" title="symmetry">
+ <span class="bold"><strong>symmetry</strong></span>
+ </a>
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_transitivity.html" title="transitivity"><span class="bold"><strong>transitivity</strong></span></a> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_unfold.html" title="unfold"><span class="bold"><strong>unfold</strong></span></a> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><a class="link" href="tac_whd.html" title="whd"><span class="bold"><strong>whd</strong></span></a> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td></tr></tbody></table></div></div><p><br class="table-break" />
+
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tacticals.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="tac_absurd.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Tacticals </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> absurd</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============ Tactics ====================== -->
+<chapter id="sec_tactics">
+ <title>Tactics</title>
+
+ <sect1 id="tactics_quickref">
+ <title>Quick reference card</title>
+ <para>
+ &tacticref;
+ </para>
+ </sect1>
+
+ <sect1 id="tac_absurd">
+ <title>absurd</title>
+ <titleabbrev>absurd</titleabbrev>
+ <para><userinput>absurd P</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">absurd</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>P</command> must have type <command>Prop</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by eliminating an
+ absurd term.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens two new sequents of conclusion <command>P</command>
+ and <command>¬P</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_apply">
+ <title>apply</title>
+ <titleabbrev>apply</titleabbrev>
+ <para><userinput>apply t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">apply</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>t</command> must have type
+ <command>T<subscript>1</subscript> → … →
+ T<subscript>n</subscript> → G</command>
+ where <command>G</command> can be unified with the conclusion
+ of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by applying <command>t</command> to <command>n</command> implicit arguments (that become new sequents).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise
+ <command>T<subscript>i</subscript></command> that is not
+ instantiated by unification. <command>T<subscript>i</subscript></command> is
+ the conclusion of the <command>i</command>-th new sequent to
+ prove.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_applyS">
+ <title>applyS</title>
+ <titleabbrev>applyS</titleabbrev>
+ <para><userinput>applyS t auto_params</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">applyS</emphasis> &sterm; &autoparams;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>t</command> must have type
+ <command>T<subscript>1</subscript> → ... →
+ T<subscript>n</subscript> → G</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para><command>applyS</command> is useful when
+ <command>apply</command> fails because the current goal
+ and the conclusion of the applied theorems are extensionally
+ equivalent up to instantiation of metavariables, but cannot
+ be unified. E.g. the goal is <command>P(n*O+m)</command> and
+ the theorem to be applied proves <command>∀m.P(m+O)</command>.
+ </para>
+ <para>
+ It tries to automatically rewrite the current goal using
+ <link linkend="tac_auto">auto paramodulation</link>
+ to make it unifiable with <command>G</command>.
+ Then it closes the current sequent by applying
+ <command>t</command> to <command>n</command>
+ implicit arguments (that become new sequents).
+ The <command>auto_params</command> parameters are passed
+ directly to <command>auto paramodulation</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise
+ <command>T<subscript>i</subscript></command> that is not
+ instantiated by unification. <command>T<subscript>i</subscript></command> is
+ the conclusion of the <command>i</command>-th new sequent to
+ prove.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_assumption">
+ <title>assumption</title>
+ <titleabbrev>assumption</titleabbrev>
+ <para><userinput>assumption </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">assumption</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>There must exist an hypothesis whose type can be unified with
+ the conclusion of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent exploiting an hypothesis.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_auto">
+ <title>auto</title>
+ <titleabbrev>auto</titleabbrev>
+ <para><userinput>auto params</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">auto</emphasis> &autoparams;. </para>
+ <para><emphasis role="bold">autobatch</emphasis> &autoparams;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None, but the tactic may fail finding a proof if every
+ proof is in the search space that is pruned away. Pruning is
+ controlled by the optional <command>params</command>.
+ Moreover, only lemmas whose type signature is a subset of the
+ signature of the current sequent are considered. The signature of
+ a sequent is essentially the set of constats appearing in it.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by repeated application of
+ rewriting steps (unless <command>paramodulation</command> is
+ omitted), hypothesis and lemmas in the library.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_cases">
+ <title>cases</title>
+ <titleabbrev>cases</titleabbrev>
+ <para><userinput>
+ cases t pattern hyps
+ </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">cases</emphasis>
+ &term; &pattern; [<emphasis role="bold">(</emphasis>[&id;]…<emphasis role="bold">)</emphasis>]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>
+ <command>t</command> must inhabit an inductive type
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>
+ It proceed by cases on <command>t</command>. The new generated
+ hypothesis in each branch are named according to
+ <command>hyps</command>.
+ The elimintation predicate is restricted by
+ <command>pattern</command>. In particular, if some hypothesis
+ is listed in <command>pattern</command>, the hypothesis is
+ generalized and cleared before proceeding by cases on
+ <command>t</command>. Currently, we only support patterns of the
+ form <command>H<subscript>1</subscript> … H<subscript>n</subscript> ⊢ %</command>. This limitation will be lifted in the future.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>One new sequent for each constructor of the type of
+ <command>t</command>. Each sequent has a new hypothesis for
+ each argument of the constructor.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_clear">
+ <title>clear</title>
+ <titleabbrev>clear</titleabbrev>
+ <para><userinput>
+ clear H<subscript>1</subscript> ... H<subscript>m</subscript>
+ </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">clear</emphasis>
+ &id; [&id;…]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>
+ <command>
+ H<subscript>1</subscript> ... H<subscript>m</subscript>
+ </command> must be hypotheses of the
+ current sequent to prove.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>
+ It hides the hypotheses
+ <command>
+ H<subscript>1</subscript> ... H<subscript>m</subscript>
+ </command> from the current sequent.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_clearbody">
+ <title>clearbody</title>
+ <titleabbrev>clearbody</titleabbrev>
+ <para><userinput>clearbody H</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">clearbody</emphasis> &id;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>H</command> must be an hypothesis of the
+ current sequent to prove.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It hides the definiens of a definition in the current
+ sequent context. Thus the definition becomes an hypothesis.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_compose">
+ <title>compose</title>
+ <titleabbrev>compose</titleabbrev>
+ <para><userinput>compose n t1 with t2 hyps</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">compose</emphasis> [&nat;] &sterm; [<emphasis role="bold">with</emphasis> &sterm;] [&intros-spec;]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Composes t1 with t2 in every possible way
+ <command>n</command> times introducing generated terms
+ as if <command>intros hyps</command> was issued.</para>
+ <para>If <command>t1:∀x:A.B[x]</command> and
+ <command>t2:∀x,y:A.B[x]→B[y]→C[x,y]</command> it generates:
+ <itemizedlist>
+ <listitem>
+ <para><command>λx,y:A.t2 x y (t1 x) : ∀x,y:A.B[y]→C[x,y]</command></para>
+ </listitem>
+ <listitem>
+ <para><command>λx,y:A.λH:B[x].t2 x y H (t1 y) : ∀x,y:A.B[x]→C[x,y]
+ </command></para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>If <command>t2</command> is omitted it composes
+ <command>t1</command>
+ with every hypothesis that can be introduced.
+ <command>n</command> iterates the process.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>The same, but with more hypothesis eventually introduced
+ by the &intros-spec;.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_change">
+ <title>change</title>
+ <titleabbrev>change</titleabbrev>
+ <para><userinput>change patt with t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">change</emphasis> &pattern; <emphasis role="bold">with</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>Each subterm matched by the pattern must be convertible
+ with the term <command>t</command> disambiguated in the context
+ of the matched subterm.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It replaces the subterms of the current sequent matched by
+ <command>patt</command> with the new term <command>t</command>.
+ For each subterm matched by the pattern, <command>t</command> is
+ disambiguated in the context of the subterm.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_constructor">
+ <title>constructor</title>
+ <titleabbrev>constructor</titleabbrev>
+ <para><userinput>constructor n</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">constructor</emphasis> &nat;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least <command>n</command> constructors.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It applies the <command>n</command>-th constructor of the
+ inductive type of the conclusion of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise of the constructor
+ that can not be inferred by unification. For more details,
+ see the <command>apply</command> tactic.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_contradiction">
+ <title>contradiction</title>
+ <titleabbrev>contradiction</titleabbrev>
+ <para><userinput>contradiction </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">contradiction</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>There must be in the current context an hypothesis of type
+ <command>False</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by applying an hypothesis of
+ type <command>False</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_cut">
+ <title>cut</title>
+ <titleabbrev>cut</titleabbrev>
+ <para><userinput>cut P as H</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">cut</emphasis> &sterm; [<emphasis role="bold">as</emphasis> &id;]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>P</command> must have type <command>Prop</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens two new sequents. The first one has an extra
+ hypothesis <command>H:P</command>. If <command>H</command> is
+ omitted, the name of the hypothesis is automatically generated.
+ The second sequent has conclusion <command>P</command> and
+ hypotheses the hypotheses of the current sequent to prove.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_decompose">
+ <title>decompose</title>
+ <titleabbrev>decompose</titleabbrev>
+ <para><userinput>
+ decompose as H<subscript>1</subscript> ... H<subscript>m</subscript>
+ </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">decompose</emphasis>
+ [<emphasis role="bold">as</emphasis> &id;…]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>
+ For each each premise <command>H</command> of type
+ <command>T</command> in the current context where
+ <command>T</command> is a non-recursive inductive type without
+ right parameters and of sort Prop or CProp, the tactic runs
+ <command>
+ elim H as H<subscript>1</subscript> ... H<subscript>m</subscript>
+ </command>, clears <command>H</command> and runs itself
+ recursively on each new premise introduced by
+ <command>elim</command> in the opened sequents.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>
+ The ones generated by all the <command>elim</command> tactics run.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_demodulate">
+ <title>demodulate</title>
+ <titleabbrev>demodulate</titleabbrev>
+ <para><userinput>demodulate auto_params</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">demodulate</emphasis> &autoparams;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>&TODO;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_destruct">
+ <title>destruct</title>
+ <titleabbrev>destruct</titleabbrev>
+ <para><userinput>destruct p</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">destruct</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>p</command> must have type <command>E<subscript>1</subscript> = E<subscript>2</subscript></command> where the two sides of the equality are possibly applied constructors of an inductive type.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>The tactic recursively compare the two sides of the equality
+ looking for different constructors in corresponding position.
+ If two of them are found, the tactic closes the current sequent
+ by proving the absurdity of <command>p</command>. Otherwise
+ it adds a new hypothesis for each leaf of the formula that
+ states the equality of the subformulae in the corresponding
+ positions on the two sides of the equality.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_elim">
+ <title>elim</title>
+ <titleabbrev>elim</titleabbrev>
+ <para><userinput>elim t pattern using th hyps</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">elim</emphasis> &sterm; &pattern; [<emphasis role="bold">using</emphasis> &sterm;] &intros-spec;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>t</command> must inhabit an inductive type and
+ <command>th</command> must be an elimination principle for that
+ inductive type. If <command>th</command> is omitted the appropriate
+ standard elimination principle is chosen.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It proceeds by cases on the values of <command>t</command>,
+ according to the elimination principle <command>th</command>.
+ The induction predicate is restricted by
+ <command>pattern</command>. In particular, if some hypothesis
+ is listed in <command>pattern</command>, the hypothesis is
+ generalized and cleared before eliminating <command>t</command>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens one new sequent for each case. The names of
+ the new hypotheses are picked by <command>hyps</command>, if
+ provided. If hyps specifies also a number of hypotheses that
+ is less than the number of new hypotheses for a new sequent,
+ then the exceeding hypothesis will be kept as implications in
+ the conclusion of the sequent.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_elimType">
+ <title>elimType</title>
+ <titleabbrev>elimType</titleabbrev>
+ <para><userinput>elimType T using th hyps</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">elimType</emphasis> &sterm; [<emphasis role="bold">using</emphasis> &sterm;] &intros-spec;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>T</command> must be an inductive type.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>TODO (severely bugged now).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>TODO</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_exact">
+ <title>exact</title>
+ <titleabbrev>exact</titleabbrev>
+ <para><userinput>exact p</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">exact</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The type of <command>p</command> must be convertible
+ with the conclusion of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent using <command>p</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_exists">
+ <title>exists</title>
+ <titleabbrev>exists</titleabbrev>
+ <para><userinput>exists </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">exists</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type
+ with at least one constructor.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Equivalent to <command>constructor 1</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <command>constructor</command> tactic.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_fail">
+ <title>fail</title>
+ <titleabbrev>fail</titleabbrev>
+ <para><userinput>fail</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">fail</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>This tactic always fail.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>N.A.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_fold">
+ <title>fold</title>
+ <titleabbrev>fold</titleabbrev>
+ <para><userinput>fold red t patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">fold</emphasis> &reduction-kind; &sterm; &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The pattern must not specify the wanted term.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>First of all it locates all the subterms matched by
+ <command>patt</command>. In the context of each matched subterm
+ it disambiguates the term <command>t</command> and reduces it
+ to its <command>red</command> normal form; then it replaces with
+ <command>t</command> every occurrence of the normal form in the
+ matched subterm.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_fourier">
+ <title>fourier</title>
+ <titleabbrev>fourier</titleabbrev>
+ <para><userinput>fourier </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">fourier</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be a linear
+ inequation over real numbers taken from standard library of
+ Coq. Moreover the inequations in the hypotheses must imply the
+ inequation in the conclusion of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by applying the Fourier method.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_fwd">
+ <title>fwd</title>
+ <titleabbrev>fwd</titleabbrev>
+ <para><userinput>fwd H as H<subscript>0</subscript> ... H<subscript>n</subscript></userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">fwd</emphasis> &id; [<emphasis role="bold">as</emphasis> &id; [&id;]…]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>
+ The type of <command>H</command> must be the premise of a
+ forward simplification theorem.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>
+ This tactic is under development.
+ It simplifies the current context by removing
+ <command>H</command> using the following methods:
+ forward application (by <command>lapply</command>) of a suitable
+ simplification theorem, chosen automatically, of which the type
+ of <command>H</command> is a premise,
+ decomposition (by <command>decompose</command>),
+ rewriting (by <command>rewrite</command>).
+ <command>H<subscript>0</subscript> ... H<subscript>n</subscript></command>
+ are passed to the tactics <command>fwd</command> invokes, as
+ names for the premise they introduce.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>
+ The ones opened by the tactics <command>fwd</command> invokes.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_generalize">
+ <title>generalize</title>
+ <titleabbrev>generalize</titleabbrev>
+ <para><userinput>generalize patt as H</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">generalize</emphasis> &pattern; [<emphasis role="bold">as</emphasis> &id;]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>All the terms matched by <command>patt</command> must be
+ convertible and close in the context of the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by applying a stronger
+ lemma that is proved using the new generated sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent where the current sequent conclusion
+ <command>G</command> is generalized to
+ <command>∀x.G{x/t}</command> where <command>{x/t}</command>
+ is a notation for the replacement with <command>x</command> of all
+ the occurrences of the term <command>t</command> matched by
+ <command>patt</command>. If <command>patt</command> matches no
+ subterm then <command>t</command> is defined as the
+ <command>wanted</command> part of the pattern.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_id">
+ <title>id</title>
+ <titleabbrev>id</titleabbrev>
+ <para><userinput>id </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">id</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>This identity tactic does nothing without failing.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_intro">
+ <title>intro</title>
+ <titleabbrev>intro</titleabbrev>
+ <para><userinput>intro H</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">intro</emphasis> [&id;]</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the sequent to prove must be an implication
+ or a universal quantification.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It applies the right introduction rule for implication,
+ closing the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent to prove adding to the hypothesis
+ the antecedent of the implication and setting the conclusion
+ to the consequent of the implicaiton. The name of the new
+ hypothesis is <command>H</command> if provided; otherwise it
+ is automatically generated.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_intros">
+ <title>intros</title>
+ <titleabbrev>intros</titleabbrev>
+ <para><userinput>intros hyps</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">intros</emphasis> &intros-spec;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>If <command>hyps</command> specifies a number of hypotheses
+ to introduce, then the conclusion of the current sequent must
+ be formed by at least that number of imbricated implications
+ or universal quantifications.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It applies several times the right introduction rule for
+ implication, closing the current sequent.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent to prove adding a number of new
+ hypotheses equal to the number of new hypotheses requested.
+ If the user does not request a precise number of new hypotheses,
+ it adds as many hypotheses as possible.
+ The name of each new hypothesis is either popped from the
+ user provided list of names, or it is automatically generated when
+ the list is (or becomes) empty.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_inversion">
+ <title>inversion</title>
+ <titleabbrev>inversion</titleabbrev>
+ <para><userinput>inversion t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">inversion</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The type of the term <command>t</command> must be an inductive
+ type or the application of an inductive type.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It proceeds by cases on <command>t</command> paying attention
+ to the constraints imposed by the actual "right arguments"
+ of the inductive type.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens one new sequent to prove for each case in the
+ definition of the type of <command>t</command>. With respect to
+ a simple elimination, each new sequent has additional hypotheses
+ that states the equalities of the "right parameters"
+ of the inductive type with terms originally present in the
+ sequent to prove.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_lapply">
+ <title>lapply</title>
+ <titleabbrev>lapply</titleabbrev>
+ <para><userinput>
+ lapply linear depth=d t
+ to t<subscript>1</subscript>, ..., t<subscript>n</subscript> as H
+ </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para>
+ <emphasis role="bold">lapply</emphasis>
+ [<emphasis role="bold">linear</emphasis>]
+ [<emphasis role="bold">depth=</emphasis>&nat;]
+ &sterm;
+ [<emphasis role="bold">to</emphasis>
+ &sterm;
+ [<emphasis role="bold">,</emphasis>&sterm;…]
+ ]
+ [<emphasis role="bold">as</emphasis> &id;]
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>
+ <command>t</command> must have at least <command>d</command>
+ independent premises and <command>n</command> must not be
+ greater than <command>d</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>
+ Invokes <command>letin H ≝ (t ? ... ?)</command>
+ with enough <command>?</command>'s to reach the
+ <command>d</command>-th independent premise of
+ <command>t</command>
+ (<command>d</command> is maximum if unspecified).
+ Then istantiates (by <command>apply</command>) with
+ t<subscript>1</subscript>, ..., t<subscript>n</subscript>
+ the <command>?</command>'s corresponding to the first
+ <command>n</command> independent premises of
+ <command>t</command>.
+ Usually the other <command>?</command>'s preceding the
+ <command>n</command>-th independent premise of
+ <command>t</command> are istantiated as a consequence.
+ If the <command>linear</command> flag is specified and if
+ <command>t, t<subscript>1</subscript>, ..., t<subscript>n</subscript></command>
+ are (applications of) premises in the current context, they are
+ <command>clear</command>ed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>
+ The ones opened by the tactics <command>lapply</command> invokes.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_left">
+ <title>left</title>
+ <titleabbrev>left</titleabbrev>
+ <para><userinput>left </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">left</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type
+ with at least one constructor.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Equivalent to <command>constructor 1</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <command>constructor</command> tactic.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_letin">
+ <title>letin</title>
+ <titleabbrev>letin</titleabbrev>
+ <para><userinput>letin x ≝ t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">letin</emphasis> &id; <emphasis role="bold">≝</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It adds to the context of the current sequent to prove a new
+ definition <command>x ≝ t</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_normalize">
+ <title>normalize</title>
+ <titleabbrev>normalize</titleabbrev>
+ <para><userinput>normalize patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">normalize</emphasis> &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It replaces all the terms matched by <command>patt</command>
+ with their βδιζ-normal form.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_reflexivity">
+ <title>reflexivity</title>
+ <titleabbrev>reflexivity</titleabbrev>
+ <para><userinput>reflexivity </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">reflexivity</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ <command>t=t</command> for some term <command>t</command></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by reflexivity
+ of equality.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_replace">
+ <title>replace</title>
+ <titleabbrev>change</titleabbrev>
+ <para><userinput>change patt with t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">replace</emphasis> &pattern; <emphasis role="bold">with</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It replaces the subterms of the current sequent matched by
+ <command>patt</command> with the new term <command>t</command>.
+ For each subterm matched by the pattern, <command>t</command> is
+ disambiguated in the context of the subterm.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>For each matched term <command>t'</command> it opens
+ a new sequent to prove whose conclusion is
+ <command>t'=t</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_rewrite">
+ <title>rewrite</title>
+ <titleabbrev>rewrite</titleabbrev>
+ <para><userinput>rewrite dir p patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">rewrite</emphasis> [<emphasis role="bold"><</emphasis>|<emphasis role="bold">></emphasis>] &sterm; &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>p</command> must be the proof of an equality,
+ possibly under some hypotheses.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It looks in every term matched by <command>patt</command>
+ for all the occurrences of the
+ left hand side of the equality that <command>p</command> proves
+ (resp. the right hand side if <command>dir</command> is
+ <command><</command>). Every occurence found is replaced with
+ the opposite side of the equality.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens one new sequent for each hypothesis of the
+ equality proved by <command>p</command> that is not closed
+ by unification.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_right">
+ <title>right</title>
+ <titleabbrev>right</titleabbrev>
+ <para><userinput>right </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">right</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least two constructors.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Equivalent to <command>constructor 2</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise of the second
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <command>constructor</command> tactic.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_ring">
+ <title>ring</title>
+ <titleabbrev>ring</titleabbrev>
+ <para><userinput>ring </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">ring</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be an
+ equality over Coq's real numbers that can be proved using
+ the ring properties of the real numbers only.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent veryfying the equality by
+ means of computation (i.e. this is a reflexive tactic, implemented
+ exploiting the "two level reasoning" technique).</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_simplify">
+ <title>simplify</title>
+ <titleabbrev>simplify</titleabbrev>
+ <para><userinput>simplify patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">simplify</emphasis> &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It replaces all the terms matched by <command>patt</command>
+ with other convertible terms that are supposed to be simpler.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_split">
+ <title>split</title>
+ <titleabbrev>split</titleabbrev>
+ <para><userinput>split </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">split</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least one constructor.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Equivalent to <command>constructor 1</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <command>constructor</command> tactic.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+ <sect1 id="tac_subst">
+ <title>subst</title>
+ <titleabbrev>subst</titleabbrev>
+ <para><userinput>subst</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">subst</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem><para>
+ None.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem><para>
+ For each premise of the form
+ <command>H: x = t</command> or <command>H: t = x</command>
+ where <command>x</command> is a local variable and
+ <command>t</command> does not depend on <command>x</command>,
+ the tactic rewrites <command>H</command> wherever
+ <command>x</command> appears clearing <command>H</command> and
+ <command>x</command> afterwards.
+ </para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem><para>
+ The one opened by the applied tactics.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_symmetry">
+ <title>symmetry</title>
+ <titleabbrev>symmetry</titleabbrev>
+ <para>The tactic <command>symmetry</command> </para>
+ <para><userinput>symmetry </userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">symmetry</emphasis></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current proof must be an equality.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It swaps the two sides of the equalityusing the symmetric
+ property.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_transitivity">
+ <title>transitivity</title>
+ <titleabbrev>transitivity</titleabbrev>
+ <para><userinput>transitivity t</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">transitivity</emphasis> &sterm;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>The conclusion of the current proof must be an equality.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by transitivity of the equality.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>It opens two new sequents <command>l=t</command> and
+ <command>t=r</command> where <command>l</command> and <command>r</command> are the left and right hand side of the equality in the conclusion of
+the current sequent to prove.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_unfold">
+ <title>unfold</title>
+ <titleabbrev>unfold</titleabbrev>
+ <para><userinput>unfold t patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">unfold</emphasis> [&sterm;] &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It finds all the occurrences of <command>t</command>
+ (possibly applied to arguments) in the subterms matched by
+ <command>patt</command>. Then it δ-expands each occurrence,
+ also performing β-reduction of the obtained term. If
+ <command>t</command> is omitted it defaults to each
+ subterm matched by <command>patt</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_whd">
+ <title>whd</title>
+ <titleabbrev>whd</titleabbrev>
+ <para><userinput>whd patt</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">whd</emphasis> &pattern;</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It replaces all the terms matched by <command>patt</command>
+ with their βδιζ-weak-head normal form.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>None.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+
+</chapter>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4. Syntax</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="authoring.html" title="Authoring" /><link rel="next" href="axiom_definition_declaration.html" title="Definitions and declarations" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Syntax</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="authoring.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="axiom_definition_declaration.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_terms"></a>Chapter 4. Syntax</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_terms.html#terms_and_co">Terms & co.</a></span></dt><dd><dl><dt><span class="sect2"><a href="sec_terms.html#lexical">Lexical conventions</a></span></dt><dt><span class="sect2"><a href="sec_terms.html#terms">Terms</a></span></dt></dl></dd><dt><span class="sect1"><a href="axiom_definition_declaration.html">Definitions and declarations</a></span></dt><dd><dl><dt><span class="sect2"><a href="axiom_definition_declaration.html#axiom">axiom</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#definition">definition</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#letrec"><span class="emphasis"><em>TODO</em></span></a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#inductive">(co)inductive types declaration</a></span></dt><dt><span class="sect2"><a href="axiom_definition_declaration.html#record">record</a></span></dt></dl></dd><dt><span class="sect1"><a href="proofs.html">Proofs</a></span></dt><dd><dl><dt><span class="sect2"><a href="proofs.html#theorem">theorem</a></span></dt><dt><span class="sect2"><a href="proofs.html#variant">variant</a></span></dt><dt><span class="sect2"><a href="proofs.html#lemma">lemma</a></span></dt><dt><span class="sect2"><a href="proofs.html#fact">fact</a></span></dt><dt><span class="sect2"><a href="proofs.html#remark">remark</a></span></dt></dl></dd><dt><span class="sect1"><a href="tacticargs.html">Tactic arguments</a></span></dt><dd><dl><dt><span class="sect2"><a href="tacticargs.html#introsspec">intros-spec</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#pattern">pattern</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#reduction-kind">reduction-kind</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#auto-params">auto-params</a></span></dt><dt><span class="sect2"><a href="tacticargs.html#justification">justification</a></span></dt></dl></dd></dl></div><p>To describe syntax in this manual we use the following conventions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Non terminal symbols are emphasized and have a link to their
+ definition. E.g.: <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></p></li><li class="listitem"><p>Terminal symbols are in bold. E.g.:
+ <span class="bold"><strong>theorem</strong></span></p></li><li class="listitem"><p>Optional sequences of elements are put in square brackets.
+ E.g.: [<span class="bold"><strong>in</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</p></li><li class="listitem"><p>Alternatives are put in square brakets and they are
+ separated by vertical bars. E.g.: [<span class="bold"><strong><</strong></span>|<span class="bold"><strong>></strong></span>]</p></li><li class="listitem"><p>Repetitions of a sequence of elements are given by putting the
+ sequence in square brackets, that are followed by three dots. The empty
+ sequence is a valid repetition.
+ E.g.: [<span class="bold"><strong>and</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…</p></li><li class="listitem"><p>Characters belonging to a set of characters are given
+ by listing the set elements in square brackets. Hyphens are used to
+ specify ranges of characters in the set.
+ E.g.: [<span class="bold"><strong>a</strong></span>-<span class="bold"><strong>zA</strong></span>-<span class="bold"><strong>Z0</strong></span>-<span class="bold"><strong>9_-</strong></span>]</p></li></ol></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="terms_and_co"></a>Terms & co.</h2></div></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="lexical"></a>Lexical conventions</h3></div></div></div><div class="table"><a id="idp69058128"></a><p class="title"><strong>Table 4.1. qstring</strong></p><div class="table-contents"><table summary="qstring" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.qstring"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.qstring">qstring</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>"</strong></span><span class="emphasis"><em>〈〈any sequence of characters excluded "〉〉</em></span><span class="bold"><strong>"</strong></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69064992"></a><p class="title"><strong>Table 4.2. id</strong></p><div class="table-contents"><table summary="id" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.id"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em>〈〈any sequence of letters, underscores or valid <a class="ulink" href="http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Digit" target="_top">XML digits</a> prefixed by a latin letter ([a-zA-Z]) and post-fixed by a possible empty sequence of decorators ([?'`])〉〉</em></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69071584"></a><p class="title"><strong>Table 4.3. nat</strong></p><div class="table-contents"><table summary="nat" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.nat"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em>〈〈any sequence of valid <a class="ulink" href="http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Digit" target="_top">XML digits</a>〉〉</em></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69079568"></a><p class="title"><strong>Table 4.4. char</strong></p><div class="table-contents"><table summary="char" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.char"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.char">char</a></em></span></td><td style="">::=</td><td style="">[<span class="bold"><strong>a</strong></span>-<span class="bold"><strong>zA</strong></span>-<span class="bold"><strong>Z0</strong></span>-<span class="bold"><strong>9_-</strong></span>]</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69086976"></a><p class="title"><strong>Table 4.5. uri-step</strong></p><div class="table-contents"><table summary="uri-step" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.uri-step"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri-step">uri-step</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.char">char</a></em></span>[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.char">char</a></em></span>]…</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69095648"></a><p class="title"><strong>Table 4.6. uri</strong></p><div class="table-contents"><table summary="uri" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.uri"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span></td><td style="">::=</td><td style="">[<span class="bold"><strong>cic:/</strong></span>|<span class="bold"><strong>theory:/</strong></span>]<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri-step">uri-step</a></em></span>[<span class="bold"><strong>/</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri-step">uri-step</a></em></span>]…<span class="bold"><strong>.</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>.</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…[<span class="bold"><strong>#xpointer(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span><span class="bold"><strong>/</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>[<span class="bold"><strong>/</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]…<span class="bold"><strong>)</strong></span>]</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69112080"></a><p class="title"><strong>Table 4.7. csymbol</strong></p><div class="table-contents"><table summary="csymbol" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.csymbol"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.csymbol">csymbol</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>'</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69118752"></a><p class="title"><strong>Table 4.8. symbol</strong></p><div class="table-contents"><table summary="symbol" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.symbol"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.symbol">symbol</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>〈〈None of the above〉〉</strong></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="terms"></a>Terms</h3></div></div></div><p>
+ </p><div class="table"><a id="tbl_terms"></a><p class="title"><strong>Table 4.9. Terms</strong></p><div class="table-contents"><table summary="Terms" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.term"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td><td style="">simple or delimited term</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">application</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>λ</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args">args</a></em></span><span class="bold"><strong>.</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">λ-abstraction</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>Π</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args">args</a></em></span><span class="bold"><strong>.</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">dependent product meant to define a datatype</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>∀</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args">args</a></em></span><span class="bold"><strong>.</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">dependent product meant to define a proposition</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>→</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">non-dependent product (logical implication or function space)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>let</strong></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>|(<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>)] <span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>in</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">local definition</td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <span class="bold"><strong>let</strong></span>
+ [<span class="bold"><strong>co</strong></span>]<span class="bold"><strong>rec</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.rec_def">rec_def</a></em></span>
+ </td><td style="">(co)recursive definitions</td></tr><tr><td style=""> </td><td style=""> </td><td style="">
+ [<span class="bold"><strong>and</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.rec_def">rec_def</a></em></span>]…
+ </td><td style=""> </td></tr><tr><td style=""> </td><td style=""> </td><td style="">
+ <span class="bold"><strong>in</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ </td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style="">…</td><td style="">user provided notation</td></tr><tr><td style=""><a id="grammar.rec_def"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.rec_def">rec_def</a></em></span></td><td style="">::=</td><td style="">
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>|<span class="bold"><strong>_</strong></span>|<span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]… <span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span><span class="bold"><strong>)</strong></span>]…
+ </td><td style=""> </td></tr><tr><td style=""> </td><td style=""> </td><td style="">
+ [<span class="bold"><strong>on</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]
+ [<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]
+ <span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]
+ </td><td style=""> </td></tr></tbody></table></div></div><p><br class="table-break" />
+
+ </p><div class="table"><a id="idp69190544"></a><p class="title"><strong>Table 4.10. Simple terms</strong></p><div class="table-contents"><table summary="Simple terms" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.sterm"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span><span class="bold"><strong>)</strong></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>\subst[</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>≔</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ [<span class="bold"><strong>;</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>≔</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>]
+ </td><td style="">identifier with optional explicit named substitution</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span></td><td style="">a qualified reference</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>Prop</strong></span></td><td style="">the impredicative sort of propositions</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>Set</strong></span></td><td style="">the impredicate sort of datatypes</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>CProp</strong></span></td><td style="">one fixed predicative sort of constructive propositions</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>Type</strong></span></td><td style="">one predicative sort of datatypes</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>?</strong></span></td><td style="">implicit argument</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>?n</strong></span>
+ [<span class="bold"><strong>[</strong></span>
+ [<span class="bold"><strong>_</strong></span>|<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>]</td><td style="">metavariable</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>match</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ [ <span class="bold"><strong>in</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> ]
+ [ <span class="bold"><strong>return</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> ]
+ <span class="bold"><strong>with</strong></span>
+ </td><td style="">case analysis</td></tr><tr><td style=""> </td><td style=""> </td><td style="">
+ <span class="bold"><strong>[</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.match_branch">match_branch</a></em></span>[<span class="bold"><strong>|</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.match_branch">match_branch</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>
+ </td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span><span class="bold"><strong>:</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span><span class="bold"><strong>)</strong></span></td><td style="">cast</td></tr><tr><td style=""> </td><td style="">|</td><td style="">…</td><td style="">user provided notation at precedence 90</td></tr></tbody></table></div></div><p><br class="table-break" />
+
+ </p><div class="table"><a id="idp69241744"></a><p class="title"><strong>Table 4.11. Arguments</strong></p><div class="table-contents"><table summary="Arguments" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.args"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args">args</a></em></span></td><td style="">::=</td><td style="">
+ <span class="bold"><strong>_</strong></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]
+ </td><td style="">ignored argument</td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <span class="bold"><strong>(</strong></span><span class="bold"><strong>_</strong></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]<span class="bold"><strong>)</strong></span>
+ </td><td style="">ignored argument</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]<span class="bold"><strong>)</strong></span></td><td style=""> </td></tr><tr><td style=""><a id="grammar.args2"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.args2">args2</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span><span class="bold"><strong>)</strong></span></td><td style=""> </td></tr></tbody></table></div></div><p><br class="table-break" />
+
+ </p><div class="table"><a id="idp69274944"></a><p class="title"><strong>Table 4.12. Pattern matching</strong></p><div class="table-contents"><table summary="Pattern matching" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.match_branch"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.match_branch">match_branch</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.match_pattern">match_pattern</a></em></span> <span class="bold"><strong>⇒</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style=""> </td></tr><tr><td style=""><a id="grammar.match_pattern"></a><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.match_pattern">match_pattern</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">0-ary constructor</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…<span class="bold"><strong>)</strong></span></td><td style="">n-ary constructor (binds the n arguments)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…</td><td style="">n-ary constructor (binds the n arguments)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>_</strong></span></td><td style="">any remaining constructor (ignoring its arguments)</td></tr></tbody></table></div></div><p><br class="table-break" />
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="authoring.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="axiom_definition_declaration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Authoring </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Definitions and declarations</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- =========== Terms, declarations and definitions ============ -->
+
+<chapter id="sec_terms">
+ <title>Syntax</title>
+ <para>To describe syntax in this manual we use the following conventions:</para>
+ <orderedlist>
+ <listitem><para>Non terminal symbols are emphasized and have a link to their
+ definition. E.g.: &term;</para></listitem>
+ <listitem><para>Terminal symbols are in bold. E.g.:
+ <emphasis role="bold">theorem</emphasis></para></listitem>
+ <listitem><para>Optional sequences of elements are put in square brackets.
+ E.g.: [<emphasis role="bold">in</emphasis> &term;]</para></listitem>
+ <listitem><para>Alternatives are put in square brakets and they are
+ separated by vertical bars. E.g.: [<emphasis role="bold"><</emphasis>|<emphasis role="bold">></emphasis>]</para></listitem>
+ <listitem><para>Repetitions of a sequence of elements are given by putting the
+ sequence in square brackets, that are followed by three dots. The empty
+ sequence is a valid repetition.
+ E.g.: [<emphasis role="bold">and</emphasis> &term;]…</para></listitem>
+ <listitem><para>Characters belonging to a set of characters are given
+ by listing the set elements in square brackets. Hyphens are used to
+ specify ranges of characters in the set.
+ E.g.: [<emphasis role="bold">a</emphasis>-<emphasis role="bold">zA</emphasis>-<emphasis role="bold">Z0</emphasis>-<emphasis role="bold">9_-</emphasis>]</para></listitem>
+ </orderedlist>
+ <sect1 id="terms_and_co">
+ <title>Terms & co.</title>
+ <sect2 id="lexical">
+ <title>Lexical conventions</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>qstring</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.qstring">&qstring;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">"</emphasis><emphasis>〈〈any sequence of characters excluded "〉〉</emphasis><emphasis role="bold">"</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>id</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.id">&id;</entry>
+ <entry>::=</entry>
+ <entry><emphasis>〈〈any sequence of letters, underscores or valid <ulink type="http" url="http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Digit">XML digits</ulink> prefixed by a latin letter ([a-zA-Z]) and post-fixed by a possible empty sequence of decorators ([?'`])〉〉</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>nat</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.nat">&nat;</entry>
+ <entry>::=</entry>
+ <entry><emphasis>〈〈any sequence of valid <ulink type="http" url="http://www.w3.org/TR/2004/REC-xml-20040204/#NT-Digit">XML digits</ulink>〉〉</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>char</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.char">&char;</entry>
+ <entry>::=</entry>
+ <entry>[<emphasis role="bold">a</emphasis>-<emphasis role="bold">zA</emphasis>-<emphasis role="bold">Z0</emphasis>-<emphasis role="bold">9_-</emphasis>]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>uri-step</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.uri-step">&uri-step;</entry>
+ <entry>::=</entry>
+ <entry>&char;[&char;]…</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>uri</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.uri">&uri;</entry>
+ <entry>::=</entry>
+ <entry>[<emphasis role="bold">cic:/</emphasis>|<emphasis role="bold">theory:/</emphasis>]&uri-step;[<emphasis role="bold">/</emphasis>&uri-step;]…<emphasis role="bold">.</emphasis>&id;[<emphasis role="bold">.</emphasis>&id;]…[<emphasis role="bold">#xpointer(</emphasis>&nat;<emphasis role="bold">/</emphasis>&nat;[<emphasis role="bold">/</emphasis>&nat;]…<emphasis role="bold">)</emphasis>]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>csymbol</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.csymbol">&csymbol;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">'</emphasis>&id;</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>symbol</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.symbol">&symbol;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">〈〈None of the above〉〉</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+ <sect2 id="terms">
+ <title>Terms</title>
+
+ <!-- ZACK: Sample EBNF snippet, see:
+ http://www.docbook.org/tdg/en/html/productionset.html -->
+ <!--
+ <productionset>
+ <title>Terms</title>
+ <production id="grammar.term">
+ <lhs>&term;</lhs>
+ <rhs>&sterm;</rhs>
+ <lineannotation></lineannotation>
+ </production>
+ </productionset>
+ -->
+
+ <para>
+ <table id="tbl_terms" frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>Terms</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.term">&term;</entry>
+ <entry>::=</entry>
+ <entry>&sterm;</entry>
+ <entry>simple or delimited term</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&term; &term;</entry>
+ <entry>application</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">λ</emphasis>&args;<emphasis role="bold">.</emphasis>&term;</entry>
+ <entry>λ-abstraction</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">Π</emphasis>&args;<emphasis role="bold">.</emphasis>&term;</entry>
+ <entry>dependent product meant to define a datatype</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">∀</emphasis>&args;<emphasis role="bold">.</emphasis>&term;</entry>
+ <entry>dependent product meant to define a proposition</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&term; <emphasis role="bold">→</emphasis> &term;</entry>
+ <entry>non-dependent product (logical implication or function space)</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">let</emphasis> [&id;|(&id;<emphasis role="bold">:</emphasis> &term;)] <emphasis role="bold">≝</emphasis> &term; <emphasis role="bold">in</emphasis> &term;</entry>
+ <entry>local definition</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <emphasis role="bold">let</emphasis>
+ [<emphasis role="bold">co</emphasis>]<emphasis role="bold">rec</emphasis>
+ &rec_def;
+ </entry>
+ <entry>(co)recursive definitions</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry/>
+ <entry>
+ [<emphasis role="bold">and</emphasis> &rec_def;]…
+ </entry>
+ <entry/>
+ </row>
+ <row>
+ <entry/>
+ <entry/>
+ <entry>
+ <emphasis role="bold">in</emphasis> &term;
+ </entry>
+ <entry/>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>…</entry>
+ <entry>user provided notation</entry>
+ </row>
+ <row>
+ <entry id="grammar.rec_def">&rec_def;</entry>
+ <entry>::=</entry>
+ <entry>
+ &id; [&id;|<emphasis role="bold">_</emphasis>|<emphasis role="bold">(</emphasis>&id;[<emphasis role="bold">,</emphasis>&id;]… <emphasis role="bold">:</emphasis>&term;<emphasis role="bold">)</emphasis>]…
+ </entry>
+ <entry />
+ </row>
+ <row>
+ <entry />
+ <entry />
+ <entry>
+ [<emphasis role="bold">on</emphasis> &id;]
+ [<emphasis role="bold">:</emphasis> &term;]
+ <emphasis role="bold">≝</emphasis> &term;]
+ </entry>
+ <entry />
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>Simple terms</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.sterm">&sterm;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">(</emphasis>&term;<emphasis role="bold">)</emphasis></entry>
+ <entry/>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&id;[<emphasis role="bold">\subst[</emphasis>
+ &id;<emphasis role="bold">≔</emphasis>&term;
+ [<emphasis role="bold">;</emphasis>&id;<emphasis role="bold">≔</emphasis>&term;]…
+ <emphasis role="bold">]</emphasis>]
+ </entry>
+ <entry>identifier with optional explicit named substitution</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&uri;</entry>
+ <entry>a qualified reference</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">Prop</emphasis></entry>
+ <entry>the impredicative sort of propositions</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">Set</emphasis></entry>
+ <entry>the impredicate sort of datatypes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">CProp</emphasis></entry>
+ <entry>one fixed predicative sort of constructive propositions</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">Type</emphasis></entry>
+ <entry>one predicative sort of datatypes</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">?</emphasis></entry>
+ <entry>implicit argument</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">?n</emphasis>
+ [<emphasis role="bold">[</emphasis>
+ [<emphasis role="bold">_</emphasis>|&term;]…
+ <emphasis role="bold">]</emphasis>]</entry>
+ <entry>metavariable</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">match</emphasis> &term;
+ [ <emphasis role="bold">in</emphasis> &id; ]
+ [ <emphasis role="bold">return</emphasis> &term; ]
+ <emphasis role="bold">with</emphasis>
+ </entry>
+ <entry>case analysis</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry/>
+ <entry>
+ <emphasis role="bold">[</emphasis>
+ &match_branch;[<emphasis role="bold">|</emphasis>&match_branch;]…
+ <emphasis role="bold">]</emphasis>
+ </entry>
+ <entry/>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>&term;<emphasis role="bold">:</emphasis>&term;<emphasis role="bold">)</emphasis></entry>
+ <entry>cast</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>…</entry>
+ <entry>user provided notation at precedence 90</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>Arguments</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.args">&args;</entry>
+ <entry>::=</entry>
+ <entry>
+ <emphasis role="bold">_</emphasis>[<emphasis role="bold">:</emphasis> &term;]
+ </entry>
+ <entry>ignored argument</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <emphasis role="bold">(</emphasis><emphasis role="bold">_</emphasis>[<emphasis role="bold">:</emphasis> &term;]<emphasis role="bold">)</emphasis>
+ </entry>
+ <entry>ignored argument</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&id;[<emphasis role="bold">,</emphasis>&id;]…[<emphasis role="bold">:</emphasis> &term;]</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>&id;[<emphasis role="bold">,</emphasis>&id;]…[<emphasis role="bold">:</emphasis> &term;]<emphasis role="bold">)</emphasis></entry>
+ <entry/>
+ </row>
+ <row>
+ <entry id="grammar.args2">&args2;</entry>
+ <entry>::=</entry>
+ <entry>&id;</entry>
+ <entry/>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>&id;[<emphasis role="bold">,</emphasis>&id;]…<emphasis role="bold">:</emphasis> &term;<emphasis role="bold">)</emphasis></entry>
+ <entry/>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>Pattern matching</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.match_branch">&match_branch;</entry>
+ <entry>::=</entry>
+ <entry>&match_pattern; <emphasis role="bold">⇒</emphasis> &term;</entry>
+ <entry />
+ </row>
+ <row>
+ <entry id="grammar.match_pattern">&match_pattern;</entry>
+ <entry>::=</entry>
+ <entry>&id;</entry>
+ <entry>0-ary constructor</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>&id; &id; [&id;]…<emphasis role="bold">)</emphasis></entry>
+ <entry>n-ary constructor (binds the n arguments)</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&id; &id; [&id;]…</entry>
+ <entry>n-ary constructor (binds the n arguments)</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">_</emphasis></entry>
+ <entry>any remaining constructor (ignoring its arguments)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+
+ </sect2>
+ </sect1>
+
+ <sect1 id="axiom_definition_declaration">
+ <title>Definitions and declarations</title>
+ <sect2 id="axiom">
+ <title><emphasis role="bold">axiom</emphasis> &id;<emphasis role="bold">:</emphasis> &term;</title>
+ <titleabbrev>axiom</titleabbrev>
+ <para><userinput>axiom H: P</userinput></para>
+ <para><command>H</command> is declared as an axiom that states <command>P</command></para>
+ </sect2>
+ <sect2 id="definition">
+ <title><emphasis role="bold">definition</emphasis> &id;[<emphasis role="bold">:</emphasis> &term;] [<emphasis role="bold">≝</emphasis> &term;]</title>
+ <titleabbrev>definition</titleabbrev>
+ <para><userinput>definition f: T ≝ t</userinput></para>
+ <para><command>f</command> is defined as <command>t</command>;
+ <command>T</command> is its type. An error is raised if the type of
+ <command>t</command> is not convertible to <command>T</command>.</para>
+ <para><command>T</command> is inferred from <command>t</command> if
+ omitted.</para>
+ <para><command>t</command> can be omitted only if <command>T</command> is
+ given. In this case Matita enters in interactive mode and
+ <command>f</command> must be defined by means of tactics.</para>
+ <para>Notice that the command is equivalent to <command>theorem f: T ≝ t</command>.</para>
+ </sect2>
+ <sect2 id="letrec">
+ <title><emphasis role="bold">letrec</emphasis> &TODO;</title>
+ <titleabbrev>&TODO;</titleabbrev>
+ <para>&TODO;</para>
+ </sect2>
+ <sect2 id="inductive">
+ <title>[<emphasis role="bold">inductive</emphasis>|<emphasis role="bold">coinductive</emphasis>] &id; [&args2;]… <emphasis role="bold">:</emphasis> &term; <emphasis role="bold">≝</emphasis> [<emphasis role="bold">|</emphasis>] [&id;<emphasis role="bold">:</emphasis>&term;] [<emphasis role="bold">|</emphasis> &id;<emphasis role="bold">:</emphasis>&term;]…
+[<emphasis role="bold">with</emphasis> &id; <emphasis role="bold">:</emphasis> &term; <emphasis role="bold">≝</emphasis> [<emphasis role="bold">|</emphasis>] [&id;<emphasis role="bold">:</emphasis>&term;] [<emphasis role="bold">|</emphasis> &id;<emphasis role="bold">:</emphasis>&term;]…]…
+</title>
+ <titleabbrev>(co)inductive types declaration</titleabbrev>
+ <para><userinput>inductive i x y z: S ≝ k1:T1 | … | kn:Tn with i' : S' ≝ k1':T1' | … | km':Tm'</userinput></para>
+ <para>Declares a family of two mutually inductive types
+ <command>i</command> and <command>i'</command> whose types are
+ <command>S</command> and <command>S'</command>, which must be convertible
+ to sorts.</para>
+ <para>The constructors <command>ki</command> of type <command>Ti</command>
+ and <command>ki'</command> of type <command>Ti'</command> are also
+ simultaneously declared. The declared types <command>i</command> and
+ <command>i'</command> may occur in the types of the constructors, but
+ only in strongly positive positions according to the rules of the
+ calculus.</para>
+ <para>The whole family is parameterized over the arguments <command>x,y,z</command>.</para>
+ <para>If the keyword <command>coinductive</command> is used, the declared
+ types are considered mutually coinductive.</para>
+ <para>Elimination principles for the record are automatically generated
+ by Matita, if allowed by the typing rules of the calculus according to
+ the sort <command>S</command>. If generated,
+ they are named <command>i_ind</command>, <command>i_rec</command> and
+ <command>i_rect</command> according to the sort of their induction
+ predicate.</para>
+ </sect2>
+ <sect2 id="record">
+ <title><emphasis role="bold">record</emphasis> &id; [&args2;]… <emphasis role="bold">:</emphasis> &term; <emphasis role="bold">≝</emphasis><emphasis role="bold">{</emphasis>[&id; [<emphasis role="bold">:</emphasis>|<emphasis role="bold">:></emphasis>] &term;] [<emphasis role="bold">;</emphasis>&id; [<emphasis role="bold">:</emphasis>|<emphasis role="bold">:></emphasis>] &term;]…<emphasis role="bold">}</emphasis></title>
+ <titleabbrev>record</titleabbrev>
+ <para><userinput>record id x y z: S ≝ { f1: T1; …; fn:Tn }</userinput></para>
+ <para>Declares a new record family <command>id</command> parameterized over
+ <command>x,y,z</command>.</para>
+ <para><command>S</command> is the type of the record
+ and it must be convertible to a sort.</para>
+ <para>Each field <command>fi</command> is declared by giving its type
+ <command>Ti</command>. A record without any field is admitted.</para>
+ <para>Elimination principles for the record are automatically generated
+ by Matita, if allowed by the typing rules of the calculus according to
+ the sort <command>S</command>. If generated,
+ they are named <command>i_ind</command>, <command>i_rec</command> and
+ <command>i_rect</command> according to the sort of their induction
+ predicate.</para>
+ <para>For each field <command>fi</command> a record projection
+ <command>fi</command> is also automatically generated if projection
+ is allowed by the typing rules of the calculus according to the
+ sort <command>S</command>, the type <command>T1</command> and
+ the definability of depending record projections.</para>
+ <para>If the type of a field is declared with <command>:></command>,
+ the corresponding record projection becomes an implicit coercion.
+ This is just syntactic sugar and it has the same effect of declaring the
+ record projection as a coercion later on.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="proofs">
+ <title>Proofs</title>
+ <sect2 id="theorem">
+ <title><emphasis role="bold">theorem</emphasis> &id;[<emphasis role="bold">:</emphasis> &term;] [<emphasis role="bold">≝</emphasis> &term;]</title>
+ <titleabbrev>theorem</titleabbrev>
+ <para><userinput>theorem f: P ≝ p</userinput></para>
+ <para>Proves a new theorem <command>f</command> whose thesis is
+ <command>P</command>.</para>
+ <para>If <command>p</command> is provided, it must be a proof term for
+ <command>P</command>. Otherwise an interactive proof is started.</para>
+ <para><command>P</command> can be omitted only if the proof is not
+ interactive.</para>
+ <para>Proving a theorem already proved in the library is an error.
+ To provide an alternative name and proof for the same theorem, use
+ <command>variant f: P ≝ p</command>.</para>
+ <para>A warning is raised if the name of the theorem cannot be obtained
+ by mangling the name of the constants in its thesis.</para>
+ <para>Notice that the command is equivalent to <command>definition f: T ≝ t</command>.</para>
+ </sect2>
+ <sect2 id="variant">
+ <title><emphasis role="bold">variant</emphasis> &id;<emphasis role="bold">:</emphasis> &term; <emphasis role="bold">≝</emphasis> &term;</title>
+ <titleabbrev>variant</titleabbrev>
+ <para><userinput>variant f: T ≝ t</userinput></para>
+ <para>Same as <command>theorem f: T ≝ t</command>, but it does not
+ complain if the theorem has already been proved. To be used to give
+ an alternative name or proof to a theorem.</para>
+ </sect2>
+ <sect2 id="lemma">
+ <title><emphasis role="bold">lemma</emphasis> &id;[<emphasis role="bold">:</emphasis> &term;] [<emphasis role="bold">≝</emphasis> &term;]</title>
+ <titleabbrev>lemma</titleabbrev>
+ <para><userinput>lemma f: T ≝ t</userinput></para>
+ <para>Same as <command>theorem f: T ≝ t</command></para>
+ </sect2>
+ <sect2 id="fact">
+ <title><emphasis role="bold">fact</emphasis> &id;[<emphasis role="bold">:</emphasis> &term;] [<emphasis role="bold">≝</emphasis> &term;]</title>
+ <titleabbrev>fact</titleabbrev>
+ <para><userinput>fact f: T ≝ t</userinput></para>
+ <para>Same as <command>theorem f: T ≝ t</command></para>
+ </sect2>
+ <sect2 id="remark">
+ <title><emphasis role="bold">remark</emphasis> &id;[<emphasis role="bold">:</emphasis> &term;] [<emphasis role="bold">≝</emphasis> &term;]</title>
+ <titleabbrev>remark</titleabbrev>
+ <para><userinput>remark f: T ≝ t</userinput></para>
+ <para>Same as <command>theorem f: T ≝ t</command></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="tacticargs">
+ <title>Tactic arguments</title>
+ <para>This section documents the syntax of some recurring arguments for
+ tactics.</para>
+
+ <sect2 id="introsspec">
+ <title>intros-spec</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>intros-spec</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.intros-spec">&intros-spec;</entry>
+ <entry>::=</entry>
+ <entry>[&nat;] [<emphasis role="bold">(</emphasis>[&id;]…<emphasis role="bold">)</emphasis>]</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>The natural number is the number of new hypotheses to be introduced. The list of identifiers gives the name for the first hypotheses.</para>
+ </sect2>
+
+ <sect2 id="pattern">
+ <title>pattern</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>pattern</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.pattern">&pattern;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">in</emphasis>
+ [&id;[<emphasis role="bold">:</emphasis> &path;]]…
+ [<emphasis role="bold">⊢</emphasis> &path;]]</entry>
+ <entry>simple pattern</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">in match</emphasis> &path;
+ [<emphasis role="bold">in</emphasis>
+ [&id;[<emphasis role="bold">:</emphasis> &path;]]…
+ [<emphasis role="bold">⊢</emphasis> &path;]]</entry>
+ <entry>full pattern</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>path</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.path">&path;</entry>
+ <entry>::=</entry>
+ <entry><emphasis>〈〈any &sterm; without occurrences of <emphasis role="bold">Set</emphasis>, <emphasis role="bold">Prop</emphasis>, <emphasis role="bold">CProp</emphasis>, <emphasis role="bold">Type</emphasis>, &id;, &uri; and user provided notation; however, <emphasis role="bold">%</emphasis> is now an additional production for &sterm;〉〉</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>A <emphasis>path</emphasis> locates zero or more subterms of a given term by mimicking the term structure up to:</para>
+ <orderedlist>
+ <listitem><para>Occurrences of the subterms to locate that are
+ represented by <emphasis role="bold">%</emphasis>.</para></listitem>
+ <listitem><para>Subterms without any occurrence of subterms to locate
+ that can be represented by <emphasis role="bold">?</emphasis>.
+ </para></listitem>
+ </orderedlist>
+ <para>Warning: the format for a path for a <emphasis role="bold">match</emphasis> … <emphasis role="bold">with</emphasis>
+ expression is restricted to: <emphasis role="bold">match</emphasis> &path;
+ <emphasis role="bold">with</emphasis>
+ <emphasis role="bold">[</emphasis>
+ <emphasis role="bold">_</emphasis>
+ <emphasis role="bold">⇒</emphasis>
+ &path;
+ <emphasis role="bold">|</emphasis> …
+ <emphasis role="bold">|</emphasis>
+ <emphasis role="bold">_</emphasis>
+ <emphasis role="bold">⇒</emphasis>
+ &path;
+ <emphasis role="bold">]</emphasis>
+ Its semantics is the following: the n-th
+ "<emphasis role="bold">_</emphasis>
+ <emphasis role="bold">⇒</emphasis>
+ &path;" branch is matched against the n-th constructor of the
+ inductive data type. The head λ-abstractions of &path; are matched
+ against the corresponding constructor arguments.
+ </para>
+ <para>For instance, the path
+ <userinput>∀_,_:?.(? ? % ?)→(? ? ? %)</userinput>
+ locates at once the subterms
+ <userinput>x+y</userinput> and <userinput>x*y</userinput> in the
+ term <userinput>∀x,y:nat.x+y=1→0=x*y</userinput>
+ (where the notation <userinput>A=B</userinput> hides the term
+ <userinput>(eq T A B)</userinput> for some type <userinput>T</userinput>).
+ </para>
+ <para>A <emphasis>simple pattern</emphasis> extends paths to locate
+ subterms in a whole sequent. In particular, the pattern
+ <userinput>in H: p K: q ⊢ r</userinput> locates at once all the subterms
+ located by the pattern <userinput>r</userinput> in the conclusion of the
+ sequent and by the patterns <userinput>p</userinput> and
+ <userinput>q</userinput> in the hypotheses <userinput>H</userinput>
+ and <userinput>K</userinput> of the sequent.
+ </para>
+ <para>If no list of hypotheses is provided in a simple pattern, no subterm
+ is selected in the hypothesis. If the <userinput>⊢ p</userinput>
+ part of the pattern is not provided, no subterm will be matched in the
+ conclusion if at least one hypothesis is provided; otherwise the whole
+ conclusion is selected.
+ </para>
+ <para>Finally, a <emphasis>full pattern</emphasis> is interpreted in three
+ steps. In the first step the <userinput>match T in</userinput>
+ part is ignored and a set <emphasis>S</emphasis> of subterms is
+ located as for the case of
+ simple patterns. In the second step the term <userinput>T</userinput>
+ is parsed and interpreted in the context of each subterm
+ <emphasis>s ∈ S</emphasis>. In the last term for each
+ <emphasis>s ∈ S</emphasis> the interpreted term <userinput>T</userinput>
+ computed in the previous step is looked for. The final set of subterms
+ located by the full pattern is the set of occurrences of
+ the interpreted <userinput>T</userinput> in the subterms <emphasis>s</emphasis>.
+ </para>
+ <para>A full pattern can always be replaced by a simple pattern,
+ often at the cost of increased verbosity or decreased readability.</para>
+ <para>Example: the pattern
+ <userinput>⊢ in match x+y in ∀_,_:?.(? ? % ?)</userinput>
+ locates only the first occurrence of <userinput>x+y</userinput>
+ in the sequent <userinput>x,y: nat ⊢ ∀z,w:nat. (x+y) * (z+w) =
+ z * (x+y) + w * (x+y)</userinput>. The corresponding simple pattern
+ is <userinput>⊢ ∀_,_:?.(? ? (? % ?) ?)</userinput>.
+ </para>
+ <para>Every tactic that acts on subterms of the selected sequents have
+ a pattern argument for uniformity. To automatically generate a simple
+ pattern:</para>
+ <orderedlist>
+ <listitem><para>Select in the current goal the subterms to pass to the
+ tactic by using the mouse. In order to perform a multiple selection of
+ subterms, hold the Ctrl key while selecting every subterm after the
+ first one.</para></listitem>
+ <listitem><para>From the contextual menu select "Copy".</para></listitem>
+ <listitem><para>From the "Edit" or the contextual menu select
+ "Paste as pattern"</para></listitem>
+ </orderedlist>
+ </sect2>
+
+ <sect2 id="reduction-kind">
+ <title>reduction-kind</title>
+ <para>Reduction kinds are normalization functions that transform a term
+ to a convertible but simpler one. Each reduction kind can be used both
+ as a tactic argument and as a stand-alone tactic.</para>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>reduction-kind</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.reduction-kind">&reduction-kind;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">normalize</emphasis></entry>
+ <entry>Computes the βδιζ-normal form</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">simplify</emphasis></entry>
+ <entry>Computes a form supposed to be simpler</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">unfold</emphasis> [&sterm;]</entry>
+ <entry>δ-reduces the constant or variable if specified, or that
+ in head position</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">whd</emphasis></entry>
+ <entry>Computes the βδιζ-weak-head normal form</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+
+ <sect2 id="auto-params">
+ <title>auto-params</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>auto-params</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.autoparams">&autoparams;</entry>
+ <entry>::=</entry>
+ <entry>[&simpleautoparam;]…
+ [<emphasis role="bold">by</emphasis>
+ &term; [,&term;]…]
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>simple-auto-param</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.simpleautoparam">&simpleautoparam;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">depth=&nat;</emphasis></entry>
+ <entry>Give a bound to the depth of the search tree</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">width=&nat;</emphasis></entry>
+ <entry>The maximal width of the search tree</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">library</emphasis></entry>
+ <entry>Search everywhere (not only in included files)</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">type</emphasis></entry>
+ <entry>Try to close also goals of sort Type, otherwise only goals
+ living in sort Prop are attacked.
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">paramodulation</emphasis></entry>
+ <entry>Try to close the goal performing unit-equality paramodulation
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">size=&nat;</emphasis></entry>
+ <entry>The maximal number of nodes in the proof</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">timeout=&nat;</emphasis></entry>
+ <entry>Timeout in seconds
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+
+ <sect2 id="justification">
+ <title>justification</title>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>justification</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.justification">&justification;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">using</emphasis> &term;</entry>
+ <entry>Proof term manually provided</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>&autoparams;</entry>
+ <entry>Call automation</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+ </sect1>
+
+</chapter>
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Extending the syntax</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="prev" href="tacticargs.html" title="Tactic arguments" /><link rel="next" href="ch05s02.html" title="interpretation" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Extending the syntax</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tacticargs.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="sec_usernotation"></a>Chapter 5. Extending the syntax</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="sec_usernotation.html#idp70046384">notation</a></span></dt><dt><span class="sect1"><a href="ch05s02.html">interpretation</a></span></dt></dl></div>
+ Introduction: <span class="emphasis"><em>TODO</em></span><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp70046384"></a>notation</h2></div></div></div><p><strong class="userinput"><code>notation usage "presentation" associativity with precedence p for content</code></strong></p><p><a id="notation"></a>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>notation</strong></span>
+ [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.usage">usage</a></em></span>] <span class="bold"><strong>"</strong></span><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.notation_lhs">notation_lhs</a></em></span><span class="bold"><strong>"</strong></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.associativity">associativity</a></em></span>] <span class="bold"><strong>with</strong></span> <span class="bold"><strong>precedence</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>
+ <span class="bold"><strong>for</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.notation_rhs">notation_rhs</a></em></span>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>Declares a mapping between the presentation
+ AST <span class="command"><strong>presentation</strong></span> and the content AST
+ <span class="command"><strong>content</strong></span>. The declared presentation AST fragment
+ <span class="command"><strong>presentation</strong></span> is at precedence level
+ <span class="command"><strong>p</strong></span>. The precedence level is used to determine where
+ parentheses must be inserted. In particular, the content AST fragment
+ <span class="command"><strong>content</strong></span> is actually a pattern, since it contains
+ placeholders (variables) for sub-ASTs. Every placeholder for a term
+ is given an expected precedence level. Parentheses must be inserted
+ around sub-ASTs having a precedence level strictly smaller than the
+ expected one.</p><p>If <span class="command"><strong>presentation</strong></span> describes a binary
+ infix operator and if no precedence level is explicitly given for the
+ operator arguments, an <span class="command"><strong>associativity</strong></span> declaration
+ can be given to automatically choose the right level for the operands.
+ Otherwise, no <span class="command"><strong>associativity</strong></span> can be given.</p><p>If <span class="command"><strong>direction</strong></span> is
+ omitted, the mapping is bi-directional and is used both during
+ parsing and pretty-printing of terms. If <span class="command"><strong>direction</strong></span>
+ is <span class="command"><strong>></strong></span>, the mapping is used only during parsing;
+ if it is <span class="command"><strong><</strong></span>, it is used only during
+ pretty-printing. Thus it is possible to use simple notations to type
+ for writing the term, and nicer ones for rendering it.</p></dd><dt><span class="term">Notation arguments:</span></dt><dd><div class="table"><a id="idp70117712"></a><p class="title"><strong>Table 5.1. usage</strong></p><div class="table-contents"><table summary="usage" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.usage"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.usage">usage</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong><</strong></span></td><td style="">Only for pretty-printing</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>></strong></span></td><td style="">Only for parsing</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70126480"></a><p class="title"><strong>Table 5.2. associativity</strong></p><div class="table-contents"><table summary="associativity" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.associativity"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.associativity">associativity</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>left</strong></span> <span class="bold"><strong>associative</strong></span></td><td style="">Left associative</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>right</strong></span> <span class="bold"><strong>associative</strong></span></td><td style="">Right associative</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>non</strong></span> <span class="bold"><strong>associative</strong></span></td><td style="">Non associative (default)</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70139344"></a><p class="title"><strong>Table 5.3. notation_rhs</strong></p><div class="table-contents"><table summary="notation_rhs" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.notation_rhs"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.notation_rhs">notation_rhs</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_ast">unparsed_ast</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_meta">unparsed_meta</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70148064"></a><p class="title"><strong>Table 5.4. unparsed_ast</strong></p><div class="table-contents"><table summary="unparsed_ast" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.unparsed_ast"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_ast">unparsed_ast</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>@{</strong></span><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.enriched_term">enriched_term</a></em></span><span class="bold"><strong>}</strong></span></td><td style="">A content level AST (a term which is parsed, but not disambiguated).</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>@</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="command"><strong>@id</strong></span> is just an abbreviation for <span class="command"><strong>@{id}</strong></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>@</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.csymbol">csymbol</a></em></span></td><td style=""><span class="command"><strong>@'symbol</strong></span> is just an abbreviation for <span class="command"><strong>@{'symbol}</strong></span></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70166064"></a><p class="title"><strong>Table 5.5. enriched_term</strong></p><div class="table-contents"><table summary="enriched_term" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.enriched_term"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.enriched_term">enriched_term</a></em></span></td><td style="">::=</td><td style="">〈〈A term that may contain occurrences of <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_meta">unparsed_meta</a></em></span>, even as variable names in binders, and occurrences of <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.csymbol">csymbol</a></em></span>〉〉</td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70173616"></a><p class="title"><strong>Table 5.6. unparsed_meta</strong></p><div class="table-contents"><table summary="unparsed_meta" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.unparsed_meta"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_meta">unparsed_meta</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>${</strong></span><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span><span class="bold"><strong>}</strong></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>$</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="command"><strong>$id</strong></span> is just an abbreviation for <span class="command"><strong>${id}</strong></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>$</strong></span><span class="bold"><strong>_</strong></span></td><td style=""><span class="command"><strong>$_</strong></span> is just an abbreviation for <span class="command"><strong>${_}</strong></span></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70190032"></a><p class="title"><strong>Table 5.7. level2_meta</strong></p><div class="table-contents"><table summary="level2_meta" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.level2_meta"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.unparsed_ast">unparsed_ast</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>term</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>number</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>ident</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>fresh</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>anonymous</strong></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>fold</strong></span> [<span class="bold"><strong>left</strong></span>|<span class="bold"><strong>right</strong></span>] <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span> <span class="bold"><strong>rec</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>default</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>if</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span> <span class="bold"><strong>then</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span> <span class="bold"><strong>else</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.level2_meta">level2_meta</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>fail</strong></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70234960"></a><p class="title"><strong>Table 5.8. notation_lhs</strong></p><div class="table-contents"><table summary="notation_lhs" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.notation_lhs"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.notation_lhs">notation_lhs</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]…</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70242480"></a><p class="title"><strong>Table 5.9. layout</strong></p><div class="table-contents"><table summary="layout" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.layout"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\sub</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Subscript</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\sup</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Superscript</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\below</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\above</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\over</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\atop</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style=""> </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\frac</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Fraction</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>\infrule</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Inference rule (premises, conclusion, rule name)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>\sqrt</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Square root</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>\root</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> <span class="bold"><strong>\of</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Generalized root</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>hbox</strong></span> <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]… <span class="bold"><strong>)</strong></span></td><td style="">Horizontal box</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>vbox</strong></span> <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]… <span class="bold"><strong>)</strong></span></td><td style="">Vertical box</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>hvbox</strong></span> <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]… <span class="bold"><strong>)</strong></span></td><td style="">Horizontal and vertical box</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>hovbox</strong></span> <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]… <span class="bold"><strong>)</strong></span></td><td style="">Horizontal or vertical box</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>break</strong></span></td><td style="">Breakable space</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>]… <span class="bold"><strong>)</strong></span></td><td style="">Group</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">Placeholder for a term with no explicit precedence</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>term</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">Placeholder for a term with explicit expected precedence</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>number</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">Placeholder for a natural number</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>ident</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></td><td style="">Placeholder for an identifier</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.literal">literal</a></em></span></td><td style="">Literal</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>opt</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span></td><td style="">Optional layout (it can be omitted for parsing)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>list0</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>
+ [<span class="bold"><strong>sep</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.literal">literal</a></em></span>]</td><td style="">List of layouts separated by <span class="command"><strong>sep</strong></span> (default:
+ any blank)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>list1</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>
+ [<span class="bold"><strong>sep</strong></span> <span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.literal">literal</a></em></span>]</td><td style="">Non empty list of layouts separated by <span class="command"><strong>sep</strong></span>
+ (default: any blank)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>mstyle</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> value (<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>)
+ </td><td style="">Style attributes like color #ff0000</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>mpadded</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> value (<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>)
+ </td><td style="">padding attributes like width -150%</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>maction</strong></span> (<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>)
+ [ (<span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.layout">layout</a></em></span>) … ]
+ </td><td style="">Alternative notations (output only)</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70356272"></a><p class="title"><strong>Table 5.10. literal</strong></p><div class="table-contents"><table summary="literal" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.literal"></a><span class="emphasis"><em><a class="link" href="sec_usernotation.html#grammar.literal">literal</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.symbol">symbol</a></em></span></td><td style="">Unicode symbol</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></td><td style="">Natural number (a constant)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>'</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span><span class="bold"><strong>'</strong></span></td><td style="">New keyword for the lexer</td></tr></tbody></table></div></div><br class="table-break" /></dd></dl></div><p>
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tacticargs.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Tactic arguments </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> interpretation</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+
+<!-- ============ User Notation ====================== -->
+<chapter id="sec_usernotation">
+ <title>Extending the syntax</title>
+ Introduction: &TODO;
+ <sect1>
+ <title>notation</title>
+ <titleabbrev>notation</titleabbrev>
+ <para><userinput>notation usage "presentation" associativity with precedence p for content</userinput></para>
+ <para id="notation">
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">notation</emphasis>
+ [&usage;] <emphasis role="bold">"</emphasis>¬ation_lhs;<emphasis role="bold">"</emphasis> [&associativity;] <emphasis role="bold">with</emphasis> <emphasis role="bold">precedence</emphasis> &nat;
+ <emphasis role="bold">for</emphasis>
+ ¬ation_rhs;
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>Declares a mapping between the presentation
+ AST <command>presentation</command> and the content AST
+ <command>content</command>. The declared presentation AST fragment
+ <command>presentation</command> is at precedence level
+ <command>p</command>. The precedence level is used to determine where
+ parentheses must be inserted. In particular, the content AST fragment
+ <command>content</command> is actually a pattern, since it contains
+ placeholders (variables) for sub-ASTs. Every placeholder for a term
+ is given an expected precedence level. Parentheses must be inserted
+ around sub-ASTs having a precedence level strictly smaller than the
+ expected one.</para>
+ <para>If <command>presentation</command> describes a binary
+ infix operator and if no precedence level is explicitly given for the
+ operator arguments, an <command>associativity</command> declaration
+ can be given to automatically choose the right level for the operands.
+ Otherwise, no <command>associativity</command> can be given.</para>
+ <para>If <command>direction</command> is
+ omitted, the mapping is bi-directional and is used both during
+ parsing and pretty-printing of terms. If <command>direction</command>
+ is <command>></command>, the mapping is used only during parsing;
+ if it is <command><</command>, it is used only during
+ pretty-printing. Thus it is possible to use simple notations to type
+ for writing the term, and nicer ones for rendering it.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Notation arguments:</term>
+ <listitem>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>usage</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.usage">&usage;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold"><</emphasis></entry>
+ <entry>Only for pretty-printing</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">></emphasis></entry>
+ <entry>Only for parsing</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>associativity</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.associativity">&associativity;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">left</emphasis> <emphasis role="bold">associative</emphasis></entry>
+ <entry>Left associative</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">right</emphasis> <emphasis role="bold">associative</emphasis></entry>
+ <entry>Right associative</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><emphasis role="bold">non</emphasis> <emphasis role="bold">associative</emphasis></entry>
+ <entry>Non associative (default)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>notation_rhs</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.notation_rhs">¬ation_rhs;</entry>
+ <entry>::=</entry>
+ <entry>&unparsed_ast;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&unparsed_meta;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>unparsed_ast</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.unparsed_ast">&unparsed_ast;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">@{</emphasis>&enriched_term;<emphasis role="bold">}</emphasis></entry>
+ <entry>A content level AST (a term which is parsed, but not disambiguated).</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">@</emphasis>&id;</entry>
+ <entry><command>@id</command> is just an abbreviation for <command>@{id}</command></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">@</emphasis>&csymbol;</entry>
+ <entry><command>@'symbol</command> is just an abbreviation for <command>@{'symbol}</command></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>enriched_term</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.enriched_term">&enriched_term;</entry>
+ <entry>::=</entry>
+ <entry>〈〈A term that may contain occurrences of &unparsed_meta;, even as variable names in binders, and occurrences of &csymbol;〉〉</entry>
+ <entry>&TODO;</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>unparsed_meta</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.unparsed_meta">&unparsed_meta;</entry>
+ <entry>::=</entry>
+ <entry><emphasis role="bold">${</emphasis>&level2_meta;<emphasis role="bold">}</emphasis></entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">$</emphasis>&id;</entry>
+ <entry><command>$id</command> is just an abbreviation for <command>${id}</command></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">$</emphasis><emphasis role="bold">_</emphasis></entry>
+ <entry><command>$_</command> is just an abbreviation for <command>${_}</command></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>level2_meta</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.level2_meta">&level2_meta;</entry>
+ <entry>::=</entry>
+ <entry>&unparsed_ast;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">term</emphasis> &nat; &id;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">number</emphasis> &id;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">ident</emphasis> &id;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">fresh</emphasis> &id;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">anonymous</emphasis></entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&id;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">fold</emphasis> [<emphasis role="bold">left</emphasis>|<emphasis role="bold">right</emphasis>] &level2_meta; <emphasis role="bold">rec</emphasis> &id; &level2_meta;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">default</emphasis> &level2_meta; &level2_meta;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">if</emphasis> &level2_meta; <emphasis role="bold">then</emphasis> &level2_meta; <emphasis role="bold">else</emphasis> &level2_meta;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">fail</emphasis></entry>
+ <entry>&TODO;</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>notation_lhs</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.notation_lhs">¬ation_lhs;</entry>
+ <entry>::=</entry>
+ <entry>&layout; [&layout;]…</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>layout</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.layout">&layout;</entry>
+ <entry>::=</entry>
+ <entry>&layout; <emphasis role="bold">\sub</emphasis> &layout;</entry>
+ <entry>Subscript</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\sup</emphasis> &layout;</entry>
+ <entry>Superscript</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\below</emphasis> &layout;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\above</emphasis> &layout;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\over</emphasis> &layout;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\atop</emphasis> &layout;</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&layout; <emphasis role="bold">\frac</emphasis> &layout;</entry>
+ <entry>Fraction</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">\infrule</emphasis> &layout; &layout; &layout;</entry>
+ <entry>Inference rule (premises, conclusion, rule name)</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">\sqrt</emphasis> &layout;</entry>
+ <entry>Square root</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">\root</emphasis> &layout; <emphasis role="bold">\of</emphasis> &layout;</entry>
+ <entry>Generalized root</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">hbox</emphasis> <emphasis role="bold">(</emphasis> &layout; [&layout;]… <emphasis role="bold">)</emphasis></entry>
+ <entry>Horizontal box</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">vbox</emphasis> <emphasis role="bold">(</emphasis> &layout; [&layout;]… <emphasis role="bold">)</emphasis></entry>
+ <entry>Vertical box</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">hvbox</emphasis> <emphasis role="bold">(</emphasis> &layout; [&layout;]… <emphasis role="bold">)</emphasis></entry>
+ <entry>Horizontal and vertical box</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">hovbox</emphasis> <emphasis role="bold">(</emphasis> &layout; [&layout;]… <emphasis role="bold">)</emphasis></entry>
+ <entry>Horizontal or vertical box</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">break</emphasis></entry>
+ <entry>Breakable space</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis> &layout; [&layout;]… <emphasis role="bold">)</emphasis></entry>
+ <entry>Group</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&id;</entry>
+ <entry>Placeholder for a term with no explicit precedence</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">term</emphasis> &nat; &id;</entry>
+ <entry>Placeholder for a term with explicit expected precedence</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">number</emphasis> &id;</entry>
+ <entry>Placeholder for a natural number</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">ident</emphasis> &id;</entry>
+ <entry>Placeholder for an identifier</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&literal;</entry>
+ <entry>Literal</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">opt</emphasis> &layout;</entry>
+ <entry>Optional layout (it can be omitted for parsing)</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">list0</emphasis> &layout;
+ [<emphasis role="bold">sep</emphasis> &literal;]</entry>
+ <entry>List of layouts separated by <command>sep</command> (default:
+ any blank)</entry>
+ </row>
+
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">list1</emphasis> &layout;
+ [<emphasis role="bold">sep</emphasis> &literal;]</entry>
+ <entry>Non empty list of layouts separated by <command>sep</command>
+ (default: any blank)</entry>
+ </row>
+
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">mstyle</emphasis> &id; value (&layout;)
+ </entry>
+ <entry>Style attributes like color #ff0000</entry>
+ </row>
+
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">mpadded</emphasis> &id; value (&layout;)
+ </entry>
+ <entry>padding attributes like width -150%</entry>
+ </row>
+
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">maction</emphasis> (&layout;)
+ [ (&layout;) … ]
+ </entry>
+ <entry>Alternative notations (output only)</entry>
+ </row>
+
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>literal</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.literal">&literal;</entry>
+ <entry>::=</entry>
+ <entry>&symbol;</entry>
+ <entry>Unicode symbol</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&nat;</entry>
+ <entry>Natural number (a constant)</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">'</emphasis>&id;<emphasis role="bold">'</emphasis></entry>
+ <entry>New keyword for the lexer</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1>
+ <title>interpretation</title>
+ <titleabbrev>interpretation</titleabbrev>
+ <para><userinput>interpretation "description" 'symbol p<subscript>1</subscript> … p<subscript>n</subscript> =
+ rhs</userinput></para>
+ <para id="interpretation">
+ <variablelist>
+ <varlistentry role="tactic.synopsis">
+ <term>Synopsis:</term>
+ <listitem>
+ <para><emphasis role="bold">interpretation</emphasis>
+ &qstring; &csymbol; [&interpretation_argument;]…
+ <emphasis role="bold">=</emphasis>
+ &interpretation_rhs;
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It declares a bi-directional mapping <command>{…}</command> between the content-level AST <command>'symbol t<subscript>1</subscript> … t<subscript>n</subscript></command> and the semantic term <command>rhs[{t<subscript>1</subscript>}/p<subscript>1</subscript>;…;{t<subscript>n</subscript>}/p<subscript>n</subscript>]</command>
+ (the simultaneous substitution in <command>rhs</command> of the
+ interpretation <command>{…}</command> of every content-level
+ actual argument <command>t<subscript>i</subscript></command> for its
+ corresponding formal parameter
+ <command>p<subscript>i</subscript></command>). The
+ <command>description</command> must be a textual description of the
+ meaning associated to <command>'symbol</command> by this
+ interpretation, and is used by the user interface of Matita to
+ provide feedback on the interpretation of ambiguous terms.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Interpretation arguments:</term>
+ <listitem>
+
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>interpretation_argument</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.interpretation_argument">&interpretation_argument;</entry>
+ <entry>::=</entry>
+ <entry>[<emphasis role="bold">η</emphasis><emphasis role="bold">.</emphasis>]… &id;</entry>
+ <entry>A formal parameter. If the name of the formal parameter is
+ prefixed by n symbols "η", then the mapping performs
+ (multiple) η-expansions to grant that the semantic actual
+ parameter begins with at least n λ-abstractions.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>interpretation_rhs</title>
+ <tgroup cols="4">
+ <tbody>
+ <row>
+ <entry id="grammar.interpretation_rhs">&interpretation_rhs;</entry>
+ <entry>::=</entry>
+ <entry>&uri;</entry>
+ <entry>A constant, specified by its URI</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry>&id;</entry>
+ <entry>A constant, specified by its name, or a bound variable. If
+ the constant name is ambiguous, the one corresponding to the
+ last implicitly or explicitly specified alias is used.</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">?</emphasis></entry>
+ <entry>An implicit parameter</entry>
+ </row>
+ <row>
+ <entry></entry>
+ <entry>|</entry>
+ <entry><emphasis role="bold">(</emphasis>
+ &interpretation_rhs;
+ [&interpretation_rhs;]…
+ <emphasis role="bold">)</emphasis></entry>
+ <entry>An application</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+</chapter>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>absurd</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="next" href="tac_apply.html" title="apply" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">absurd</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_tactics.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_apply.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_absurd"></a>absurd</h2></div></div></div><p><strong class="userinput"><code>absurd P</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>absurd</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>P</strong></span> must have type <span class="command"><strong>Prop</strong></span>.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by eliminating an
+ absurd term.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens two new sequents of conclusion <span class="command"><strong>P</strong></span>
+ and <span class="command"><strong>¬P</strong></span>.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_tactics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_apply.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Tactics </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> apply</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>we have</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_weneedtoprove.html" title="we need to prove" /><link rel="next" href="tac_weproceedbycases.html" title="we proceed by cases on" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">we have</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_weneedtoprove.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_weproceedbycases.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_andelim"></a>we have</h2></div></div></div><p><strong class="userinput"><code>justification we have t1 (id1) and t2 (id2)</code></strong>
+ </p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <span class="bold"><strong>we have</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong>( </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong> ) and </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong> ( </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>)</strong></span></p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p></p></dd><dt><span class="term">Action:</span></dt><dd><p>It derives <span class="command"><strong>t1∧t2</strong></span> using the
+ <span class="command"><strong>justification</strong></span> then it introduces in the context
+ <span class="command"><strong>t1</strong></span> labelled with <span class="command"><strong>id1</strong></span> and
+ <span class="command"><strong>t2</strong></span> labelled with <span class="command"><strong>id2</strong></span>.
+ </p></dd><dt><span class="term">New sequent to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_weneedtoprove.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_weproceedbycases.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">we need to prove </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> we proceed by cases on</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>apply</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_absurd.html" title="absurd" /><link rel="next" href="tac_applyS.html" title="applyS" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">apply</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_absurd.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_applyS.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_apply"></a>apply</h2></div></div></div><p><strong class="userinput"><code>apply t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>apply</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>t</strong></span> must have type
+ <span class="command"><strong>T<sub>1</sub> → … →
+ T<sub>n</sub> → G</strong></span>
+ where <span class="command"><strong>G</strong></span> can be unified with the conclusion
+ of the current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by applying <span class="command"><strong>t</strong></span> to <span class="command"><strong>n</strong></span> implicit arguments (that become new sequents).</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise
+ <span class="command"><strong>T<sub>i</sub></strong></span> that is not
+ instantiated by unification. <span class="command"><strong>T<sub>i</sub></strong></span> is
+ the conclusion of the <span class="command"><strong>i</strong></span>-th new sequent to
+ prove.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_absurd.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_applyS.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">absurd </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> applyS</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>applyS</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_apply.html" title="apply" /><link rel="next" href="tac_assumption.html" title="assumption" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">applyS</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_apply.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_assumption.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_applyS"></a>applyS</h2></div></div></div><p><strong class="userinput"><code>applyS t auto_params</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>applyS</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>t</strong></span> must have type
+ <span class="command"><strong>T<sub>1</sub> → ... →
+ T<sub>n</sub> → G</strong></span>.</p></dd><dt><span class="term">Action:</span></dt><dd><p><span class="command"><strong>applyS</strong></span> is useful when
+ <span class="command"><strong>apply</strong></span> fails because the current goal
+ and the conclusion of the applied theorems are extensionally
+ equivalent up to instantiation of metavariables, but cannot
+ be unified. E.g. the goal is <span class="command"><strong>P(n*O+m)</strong></span> and
+ the theorem to be applied proves <span class="command"><strong>∀m.P(m+O)</strong></span>.
+ </p><p>
+ It tries to automatically rewrite the current goal using
+ <a class="link" href="tac_auto.html" title="auto">auto paramodulation</a>
+ to make it unifiable with <span class="command"><strong>G</strong></span>.
+ Then it closes the current sequent by applying
+ <span class="command"><strong>t</strong></span> to <span class="command"><strong>n</strong></span>
+ implicit arguments (that become new sequents).
+ The <span class="command"><strong>auto_params</strong></span> parameters are passed
+ directly to <span class="command"><strong>auto paramodulation</strong></span>.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise
+ <span class="command"><strong>T<sub>i</sub></strong></span> that is not
+ instantiated by unification. <span class="command"><strong>T<sub>i</sub></strong></span> is
+ the conclusion of the <span class="command"><strong>i</strong></span>-th new sequent to
+ prove.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_apply.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_assumption.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">apply </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> assumption</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>assume</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="next" href="tac_byinduction.html" title="by induction hypothesis we know" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">assume</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec_declarative_tactics.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_byinduction.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_assume"></a>assume</h2></div></div></div><p><strong class="userinput"><code>assume x : t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>assume</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong> : </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current proof must be
+ <span class="command"><strong>∀x:T.P</strong></span> or
+ <span class="command"><strong>T→P</strong></span> where <span class="command"><strong>T</strong></span> is
+ a data type (i.e. <span class="command"><strong>T</strong></span> has type
+ <span class="command"><strong>Set</strong></span> or <span class="command"><strong>Type</strong></span>).</p></dd><dt><span class="term">Action:</span></dt><dd><p>It adds to the context of the current sequent to prove a new
+ declaration <span class="command"><strong>x : T </strong></span>. The new conclusion becomes
+ <span class="command"><strong>P</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec_declarative_tactics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_byinduction.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. Declarative Tactics </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> by induction hypothesis we know</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>assumption</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_applyS.html" title="applyS" /><link rel="next" href="tac_auto.html" title="auto" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">assumption</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_applyS.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_auto.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_assumption"></a>assumption</h2></div></div></div><p><strong class="userinput"><code>assumption </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>assumption</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>There must exist an hypothesis whose type can be unified with
+ the conclusion of the current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent exploiting an hypothesis.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_applyS.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_auto.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">applyS </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> auto</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>auto</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_assumption.html" title="assumption" /><link rel="next" href="tac_cases.html" title="cases" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">auto</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_assumption.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_cases.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_auto"></a>auto</h2></div></div></div><p><strong class="userinput"><code>auto params</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>auto</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span>. </p><p><span class="bold"><strong>autobatch</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None, but the tactic may fail finding a proof if every
+ proof is in the search space that is pruned away. Pruning is
+ controlled by the optional <span class="command"><strong>params</strong></span>.
+ Moreover, only lemmas whose type signature is a subset of the
+ signature of the current sequent are considered. The signature of
+ a sequent is essentially the set of constats appearing in it.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by repeated application of
+ rewriting steps (unless <span class="command"><strong>paramodulation</strong></span> is
+ omitted), hypothesis and lemmas in the library.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_assumption.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_cases.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">assumption </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> cases</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>done</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_case.html" title="case" /><link rel="next" href="tac_exitselim.html" title="let such that" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">done</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_case.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_exitselim.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_bydone"></a>done</h2></div></div></div><p><strong class="userinput"><code>justification done</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <span class="bold"><strong>done</strong></span></p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p></p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent given the justification.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_case.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_exitselim.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">case </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> let such that</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>by induction hypothesis we know</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_assume.html" title="assume" /><link rel="next" href="tac_case.html" title="case" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">by induction hypothesis we know</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_assume.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_case.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_byinduction"></a>by induction hypothesis we know</h2></div></div></div><p><strong class="userinput"><code>by induction hypothesis we know t (id)</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>by induction hypothesis we know</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> (</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>)</strong></span></p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p>To be used in a proof by induction to state the inductive
+ hypothesis.</p></dd><dt><span class="term">Action:</span></dt><dd><p> Introduces the inductive hypothesis. </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_assume.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_case.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">assume </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> case</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>we proved</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_weproceedbyinduction.html" title="we proceed by induction on" /><link rel="next" href="sec_commands.html" title="Chapter 9. Other commands" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">we proved</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_weproceedbyinduction.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="sec_commands.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_bytermweproved"></a>we proved</h2></div></div></div><p><strong class="userinput"><code>justification we proved t (id)</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <span class="bold"><strong>we proved</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>)</strong></span></p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p><span class="command"><strong>t</strong></span>must have type <span class="command"><strong>Prop</strong></span>.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It derives <span class="command"><strong>t</strong></span>
+ using the justification and labels the conclusion with
+ <span class="command"><strong>id</strong></span>.
+ </p></dd><dt><span class="term">New sequent to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_weproceedbyinduction.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_commands.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">we proceed by induction on </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Other commands</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>case</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_byinduction.html" title="by induction hypothesis we know" /><link rel="next" href="tac_bydone.html" title="done" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">case</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_byinduction.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_bydone.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_case"></a>case</h2></div></div></div><p><strong class="userinput"><code>case id (id1:t1) … (idn:tn)</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>case</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>)</strong></span>] … </p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p>To be used in a proof by induction or by cases to start
+ a new case</p></dd><dt><span class="term">Action:</span></dt><dd><p>Starts the new case <span class="command"><strong>id</strong></span> declaring
+ the local parameters <span class="command"><strong>(id1:t1) … (idn:tn)</strong></span></p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_byinduction.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_bydone.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">by induction hypothesis we know </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> done</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>cases</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_auto.html" title="auto" /><link rel="next" href="tac_clear.html" title="clear" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">cases</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_auto.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_clear.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_cases"></a>cases</h2></div></div></div><p><strong class="userinput"><code>
+ cases t pattern hyps
+ </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>cases</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>(</strong></span>[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…<span class="bold"><strong>)</strong></span>]
+ </p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>
+ <span class="command"><strong>t</strong></span> must inhabit an inductive type
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ It proceed by cases on <span class="command"><strong>t</strong></span>. The new generated
+ hypothesis in each branch are named according to
+ <span class="command"><strong>hyps</strong></span>.
+ The elimintation predicate is restricted by
+ <span class="command"><strong>pattern</strong></span>. In particular, if some hypothesis
+ is listed in <span class="command"><strong>pattern</strong></span>, the hypothesis is
+ generalized and cleared before proceeding by cases on
+ <span class="command"><strong>t</strong></span>. Currently, we only support patterns of the
+ form <span class="command"><strong>H<sub>1</sub> … H<sub>n</sub> ⊢ %</strong></span>. This limitation will be lifted in the future.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>One new sequent for each constructor of the type of
+ <span class="command"><strong>t</strong></span>. Each sequent has a new hypothesis for
+ each argument of the constructor.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_auto.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_clear.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">auto </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> clear</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>change</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_compose.html" title="compose" /><link rel="next" href="tac_constructor.html" title="constructor" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">change</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_compose.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_constructor.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_change"></a>change</h2></div></div></div><p><strong class="userinput"><code>change patt with t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>change</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> <span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>Each subterm matched by the pattern must be convertible
+ with the term <span class="command"><strong>t</strong></span> disambiguated in the context
+ of the matched subterm.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It replaces the subterms of the current sequent matched by
+ <span class="command"><strong>patt</strong></span> with the new term <span class="command"><strong>t</strong></span>.
+ For each subterm matched by the pattern, <span class="command"><strong>t</strong></span> is
+ disambiguated in the context of the subterm.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_compose.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_constructor.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">compose </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> constructor</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>clear</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_cases.html" title="cases" /><link rel="next" href="tac_clearbody.html" title="clearbody" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">clear</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_cases.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_clearbody.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_clear"></a>clear</h2></div></div></div><p><strong class="userinput"><code>
+ clear H<sub>1</sub> ... H<sub>m</sub>
+ </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>clear</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>…]
+ </p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>
+ <span class="command"><strong>
+ H<sub>1</sub> ... H<sub>m</sub>
+ </strong></span> must be hypotheses of the
+ current sequent to prove.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ It hides the hypotheses
+ <span class="command"><strong>
+ H<sub>1</sub> ... H<sub>m</sub>
+ </strong></span> from the current sequent.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_cases.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_clearbody.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">cases </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> clearbody</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>clearbody</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_clear.html" title="clear" /><link rel="next" href="tac_compose.html" title="compose" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">clearbody</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_clear.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_compose.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_clearbody"></a>clearbody</h2></div></div></div><p><strong class="userinput"><code>clearbody H</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>clearbody</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>H</strong></span> must be an hypothesis of the
+ current sequent to prove.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It hides the definiens of a definition in the current
+ sequent context. Thus the definition becomes an hypothesis.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_clear.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_compose.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">clear </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> compose</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>compose</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_clearbody.html" title="clearbody" /><link rel="next" href="tac_change.html" title="change" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">compose</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_clearbody.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_change.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_compose"></a>compose</h2></div></div></div><p><strong class="userinput"><code>compose n t1 with t2 hyps</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>compose</strong></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] [<span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span>]</p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p></p></dd><dt><span class="term">Action:</span></dt><dd><p>Composes t1 with t2 in every possible way
+ <span class="command"><strong>n</strong></span> times introducing generated terms
+ as if <span class="command"><strong>intros hyps</strong></span> was issued.</p><p>If <span class="command"><strong>t1:∀x:A.B[x]</strong></span> and
+ <span class="command"><strong>t2:∀x,y:A.B[x]→B[y]→C[x,y]</strong></span> it generates:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="command"><strong>λx,y:A.t2 x y (t1 x) : ∀x,y:A.B[y]→C[x,y]</strong></span></p></li><li class="listitem"><p><span class="command"><strong>λx,y:A.λH:B[x].t2 x y H (t1 y) : ∀x,y:A.B[x]→C[x,y]
+ </strong></span></p></li></ul></div><p>
+ </p><p>If <span class="command"><strong>t2</strong></span> is omitted it composes
+ <span class="command"><strong>t1</strong></span>
+ with every hypothesis that can be introduced.
+ <span class="command"><strong>n</strong></span> iterates the process.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>The same, but with more hypothesis eventually introduced
+ by the <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span>.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_clearbody.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_change.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">clearbody </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> change</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>constructor</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_change.html" title="change" /><link rel="next" href="tac_contradiction.html" title="contradiction" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">constructor</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_change.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_contradiction.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_constructor"></a>constructor</h2></div></div></div><p><strong class="userinput"><code>constructor n</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>constructor</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least <span class="command"><strong>n</strong></span> constructors.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It applies the <span class="command"><strong>n</strong></span>-th constructor of the
+ inductive type of the conclusion of the current sequent.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise of the constructor
+ that can not be inferred by unification. For more details,
+ see the <span class="command"><strong>apply</strong></span> tactic.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_change.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_contradiction.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">change </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> contradiction</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>contradiction</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_constructor.html" title="constructor" /><link rel="next" href="tac_cut.html" title="cut" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">contradiction</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_constructor.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_cut.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_contradiction"></a>contradiction</h2></div></div></div><p><strong class="userinput"><code>contradiction </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>contradiction</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>There must be in the current context an hypothesis of type
+ <span class="command"><strong>False</strong></span>.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by applying an hypothesis of
+ type <span class="command"><strong>False</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_constructor.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_cut.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">constructor </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> cut</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>cut</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_contradiction.html" title="contradiction" /><link rel="next" href="tac_decompose.html" title="decompose" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">cut</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_contradiction.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_decompose.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_cut"></a>cut</h2></div></div></div><p><strong class="userinput"><code>cut P as H</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>cut</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>P</strong></span> must have type <span class="command"><strong>Prop</strong></span>.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens two new sequents. The first one has an extra
+ hypothesis <span class="command"><strong>H:P</strong></span>. If <span class="command"><strong>H</strong></span> is
+ omitted, the name of the hypothesis is automatically generated.
+ The second sequent has conclusion <span class="command"><strong>P</strong></span> and
+ hypotheses the hypotheses of the current sequent to prove.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_contradiction.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_decompose.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">contradiction </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> decompose</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>decompose</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_cut.html" title="cut" /><link rel="next" href="tac_demodulate.html" title="demodulate" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">decompose</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_cut.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_demodulate.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_decompose"></a>decompose</h2></div></div></div><p><strong class="userinput"><code>
+ decompose as H<sub>1</sub> ... H<sub>m</sub>
+ </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>decompose</strong></span>
+ [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>…]
+ </p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ For each each premise <span class="command"><strong>H</strong></span> of type
+ <span class="command"><strong>T</strong></span> in the current context where
+ <span class="command"><strong>T</strong></span> is a non-recursive inductive type without
+ right parameters and of sort Prop or CProp, the tactic runs
+ <span class="command"><strong>
+ elim H as H<sub>1</sub> ... H<sub>m</sub>
+ </strong></span>, clears <span class="command"><strong>H</strong></span> and runs itself
+ recursively on each new premise introduced by
+ <span class="command"><strong>elim</strong></span> in the opened sequents.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>
+ The ones generated by all the <span class="command"><strong>elim</strong></span> tactics run.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_cut.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_demodulate.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">cut </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> demodulate</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>demodulate</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_decompose.html" title="decompose" /><link rel="next" href="tac_destruct.html" title="destruct" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">demodulate</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_decompose.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_destruct.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_demodulate"></a>demodulate</h2></div></div></div><p><strong class="userinput"><code>demodulate auto_params</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>demodulate</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p><span class="emphasis"><em>TODO</em></span></p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_decompose.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_destruct.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">decompose </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> destruct</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>destruct</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_demodulate.html" title="demodulate" /><link rel="next" href="tac_elim.html" title="elim" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">destruct</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_demodulate.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_elim.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_destruct"></a>destruct</h2></div></div></div><p><strong class="userinput"><code>destruct p</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>destruct</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>p</strong></span> must have type <span class="command"><strong>E<sub>1</sub> = E<sub>2</sub></strong></span> where the two sides of the equality are possibly applied constructors of an inductive type.</p></dd><dt><span class="term">Action:</span></dt><dd><p>The tactic recursively compare the two sides of the equality
+ looking for different constructors in corresponding position.
+ If two of them are found, the tactic closes the current sequent
+ by proving the absurdity of <span class="command"><strong>p</strong></span>. Otherwise
+ it adds a new hypothesis for each leaf of the formula that
+ states the equality of the subformulae in the corresponding
+ positions on the two sides of the equality.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_demodulate.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_elim.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">demodulate </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> elim</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>elim</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_destruct.html" title="destruct" /><link rel="next" href="tac_elimType.html" title="elimType" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">elim</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_destruct.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_elimType.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_elim"></a>elim</h2></div></div></div><p><strong class="userinput"><code>elim t pattern using th hyps</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>elim</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>t</strong></span> must inhabit an inductive type and
+ <span class="command"><strong>th</strong></span> must be an elimination principle for that
+ inductive type. If <span class="command"><strong>th</strong></span> is omitted the appropriate
+ standard elimination principle is chosen.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It proceeds by cases on the values of <span class="command"><strong>t</strong></span>,
+ according to the elimination principle <span class="command"><strong>th</strong></span>.
+ The induction predicate is restricted by
+ <span class="command"><strong>pattern</strong></span>. In particular, if some hypothesis
+ is listed in <span class="command"><strong>pattern</strong></span>, the hypothesis is
+ generalized and cleared before eliminating <span class="command"><strong>t</strong></span>
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens one new sequent for each case. The names of
+ the new hypotheses are picked by <span class="command"><strong>hyps</strong></span>, if
+ provided. If hyps specifies also a number of hypotheses that
+ is less than the number of new hypotheses for a new sequent,
+ then the exceeding hypothesis will be kept as implications in
+ the conclusion of the sequent.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_destruct.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_elimType.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">destruct </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> elimType</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>elimType</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_elim.html" title="elim" /><link rel="next" href="tac_exact.html" title="exact" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">elimType</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_elim.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_exact.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_elimType"></a>elimType</h2></div></div></div><p><strong class="userinput"><code>elimType T using th hyps</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>elimType</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> [<span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>T</strong></span> must be an inductive type.</p></dd><dt><span class="term">Action:</span></dt><dd><p>TODO (severely bugged now).</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>TODO</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_elim.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_exact.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">elim </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> exact</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>exact</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_elimType.html" title="elimType" /><link rel="next" href="tac_exists.html" title="exists" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">exact</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_elimType.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_exists.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_exact"></a>exact</h2></div></div></div><p><strong class="userinput"><code>exact p</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>exact</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The type of <span class="command"><strong>p</strong></span> must be convertible
+ with the conclusion of the current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent using <span class="command"><strong>p</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_elimType.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_exists.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">elimType </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> exists</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>exists</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_exact.html" title="exact" /><link rel="next" href="tac_fail.html" title="fail" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">exists</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_exact.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_fail.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_exists"></a>exists</h2></div></div></div><p><strong class="userinput"><code>exists </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>exists</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type
+ with at least one constructor.</p></dd><dt><span class="term">Action:</span></dt><dd><p>Equivalent to <span class="command"><strong>constructor 1</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <span class="command"><strong>constructor</strong></span> tactic.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_exact.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_fail.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">exact </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> fail</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>let such that</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_bydone.html" title="done" /><link rel="next" href="tac_obtain.html" title="obtain" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">let such that</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_bydone.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_obtain.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_exitselim"></a>let such that</h2></div></div></div><p><strong class="userinput"><code>justification let x:t such that p (id)</code></strong>
+ </p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span> <span class="bold"><strong>let</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>such that</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ <span class="bold"><strong>(</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>)</strong></span></p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p>
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It derives <span class="command"><strong>∃x:t.p</strong></span> using the
+ <span class="command"><strong>justification</strong></span> and then it introduces in the context
+ <span class="command"><strong>x</strong></span> and the hypothesis
+ <span class="command"><strong>p</strong></span> labelled with
+ <span class="command"><strong>id</strong></span>.
+ </p></dd><dt><span class="term">New sequent to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_bydone.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_obtain.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">done </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> obtain</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>fail</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_exists.html" title="exists" /><link rel="next" href="tac_fold.html" title="fold" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">fail</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_exists.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_fold.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_fail"></a>fail</h2></div></div></div><p><strong class="userinput"><code>fail</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>fail</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>This tactic always fail.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>N.A.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_exists.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_fold.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">exists </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> fold</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>fold</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_fail.html" title="fail" /><link rel="next" href="tac_fourier.html" title="fourier" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">fold</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_fail.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_fourier.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_fold"></a>fold</h2></div></div></div><p><strong class="userinput"><code>fold red t patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>fold</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.reduction-kind">reduction-kind</a></em></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The pattern must not specify the wanted term.</p></dd><dt><span class="term">Action:</span></dt><dd><p>First of all it locates all the subterms matched by
+ <span class="command"><strong>patt</strong></span>. In the context of each matched subterm
+ it disambiguates the term <span class="command"><strong>t</strong></span> and reduces it
+ to its <span class="command"><strong>red</strong></span> normal form; then it replaces with
+ <span class="command"><strong>t</strong></span> every occurrence of the normal form in the
+ matched subterm.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_fail.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_fourier.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">fail </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> fourier</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>fourier</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_fold.html" title="fold" /><link rel="next" href="tac_fwd.html" title="fwd" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">fourier</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_fold.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_fwd.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_fourier"></a>fourier</h2></div></div></div><p><strong class="userinput"><code>fourier </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>fourier</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be a linear
+ inequation over real numbers taken from standard library of
+ Coq. Moreover the inequations in the hypotheses must imply the
+ inequation in the conclusion of the current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by applying the Fourier method.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_fold.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_fwd.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">fold </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> fwd</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>fwd</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_fourier.html" title="fourier" /><link rel="next" href="tac_generalize.html" title="generalize" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">fwd</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_fourier.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_generalize.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_fwd"></a>fwd</h2></div></div></div><p><strong class="userinput"><code>fwd H as H<sub>0</sub> ... H<sub>n</sub></code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>fwd</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…]</p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>
+ The type of <span class="command"><strong>H</strong></span> must be the premise of a
+ forward simplification theorem.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ This tactic is under development.
+ It simplifies the current context by removing
+ <span class="command"><strong>H</strong></span> using the following methods:
+ forward application (by <span class="command"><strong>lapply</strong></span>) of a suitable
+ simplification theorem, chosen automatically, of which the type
+ of <span class="command"><strong>H</strong></span> is a premise,
+ decomposition (by <span class="command"><strong>decompose</strong></span>),
+ rewriting (by <span class="command"><strong>rewrite</strong></span>).
+ <span class="command"><strong>H<sub>0</sub> ... H<sub>n</sub></strong></span>
+ are passed to the tactics <span class="command"><strong>fwd</strong></span> invokes, as
+ names for the premise they introduce.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>
+ The ones opened by the tactics <span class="command"><strong>fwd</strong></span> invokes.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_fourier.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_generalize.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">fourier </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> generalize</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>generalize</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_fwd.html" title="fwd" /><link rel="next" href="tac_id.html" title="id" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">generalize</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_fwd.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_id.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_generalize"></a>generalize</h2></div></div></div><p><strong class="userinput"><code>generalize patt as H</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>generalize</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>All the terms matched by <span class="command"><strong>patt</strong></span> must be
+ convertible and close in the context of the current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by applying a stronger
+ lemma that is proved using the new generated sequent.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent where the current sequent conclusion
+ <span class="command"><strong>G</strong></span> is generalized to
+ <span class="command"><strong>∀x.G{x/t}</strong></span> where <span class="command"><strong>{x/t}</strong></span>
+ is a notation for the replacement with <span class="command"><strong>x</strong></span> of all
+ the occurrences of the term <span class="command"><strong>t</strong></span> matched by
+ <span class="command"><strong>patt</strong></span>. If <span class="command"><strong>patt</strong></span> matches no
+ subterm then <span class="command"><strong>t</strong></span> is defined as the
+ <span class="command"><strong>wanted</strong></span> part of the pattern.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_fwd.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_id.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">fwd </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> id</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>id</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_generalize.html" title="generalize" /><link rel="next" href="tac_intro.html" title="intro" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">id</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_generalize.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_intro.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_id"></a>id</h2></div></div></div><p><strong class="userinput"><code>id </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>id</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>This identity tactic does nothing without failing.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_generalize.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">generalize </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> intro</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>intro</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_id.html" title="id" /><link rel="next" href="tac_intros.html" title="intros" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">intro</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_id.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_intros.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_intro"></a>intro</h2></div></div></div><p><strong class="userinput"><code>intro H</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>intro</strong></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]</p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the sequent to prove must be an implication
+ or a universal quantification.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It applies the right introduction rule for implication,
+ closing the current sequent.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent to prove adding to the hypothesis
+ the antecedent of the implication and setting the conclusion
+ to the consequent of the implicaiton. The name of the new
+ hypothesis is <span class="command"><strong>H</strong></span> if provided; otherwise it
+ is automatically generated.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_id.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_intros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">id </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> intros</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>intros</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_intro.html" title="intro" /><link rel="next" href="tac_inversion.html" title="inversion" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">intros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_intro.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_inversion.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_intros"></a>intros</h2></div></div></div><p><strong class="userinput"><code>intros hyps</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>intros</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>If <span class="command"><strong>hyps</strong></span> specifies a number of hypotheses
+ to introduce, then the conclusion of the current sequent must
+ be formed by at least that number of imbricated implications
+ or universal quantifications.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It applies several times the right introduction rule for
+ implication, closing the current sequent.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent to prove adding a number of new
+ hypotheses equal to the number of new hypotheses requested.
+ If the user does not request a precise number of new hypotheses,
+ it adds as many hypotheses as possible.
+ The name of each new hypothesis is either popped from the
+ user provided list of names, or it is automatically generated when
+ the list is (or becomes) empty.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_intro.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_inversion.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">intro </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> inversion</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>inversion</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_intros.html" title="intros" /><link rel="next" href="tac_lapply.html" title="lapply" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">inversion</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_intros.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_lapply.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_inversion"></a>inversion</h2></div></div></div><p><strong class="userinput"><code>inversion t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>inversion</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The type of the term <span class="command"><strong>t</strong></span> must be an inductive
+ type or the application of an inductive type.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It proceeds by cases on <span class="command"><strong>t</strong></span> paying attention
+ to the constraints imposed by the actual "right arguments"
+ of the inductive type.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens one new sequent to prove for each case in the
+ definition of the type of <span class="command"><strong>t</strong></span>. With respect to
+ a simple elimination, each new sequent has additional hypotheses
+ that states the equalities of the "right parameters"
+ of the inductive type with terms originally present in the
+ sequent to prove.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_intros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_lapply.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">intros </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> lapply</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>lapply</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_inversion.html" title="inversion" /><link rel="next" href="tac_left.html" title="left" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lapply</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_inversion.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_left.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_lapply"></a>lapply</h2></div></div></div><p><strong class="userinput"><code>
+ lapply linear depth=d t
+ to t<sub>1</sub>, ..., t<sub>n</sub> as H
+ </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>
+ <span class="bold"><strong>lapply</strong></span>
+ [<span class="bold"><strong>linear</strong></span>]
+ [<span class="bold"><strong>depth=</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>
+ [<span class="bold"><strong>to</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>
+ [<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>…]
+ ]
+ [<span class="bold"><strong>as</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]
+ </p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>
+ <span class="command"><strong>t</strong></span> must have at least <span class="command"><strong>d</strong></span>
+ independent premises and <span class="command"><strong>n</strong></span> must not be
+ greater than <span class="command"><strong>d</strong></span>.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ Invokes <span class="command"><strong>letin H ≝ (t ? ... ?)</strong></span>
+ with enough <span class="command"><strong>?</strong></span>'s to reach the
+ <span class="command"><strong>d</strong></span>-th independent premise of
+ <span class="command"><strong>t</strong></span>
+ (<span class="command"><strong>d</strong></span> is maximum if unspecified).
+ Then istantiates (by <span class="command"><strong>apply</strong></span>) with
+ t<sub>1</sub>, ..., t<sub>n</sub>
+ the <span class="command"><strong>?</strong></span>'s corresponding to the first
+ <span class="command"><strong>n</strong></span> independent premises of
+ <span class="command"><strong>t</strong></span>.
+ Usually the other <span class="command"><strong>?</strong></span>'s preceding the
+ <span class="command"><strong>n</strong></span>-th independent premise of
+ <span class="command"><strong>t</strong></span> are istantiated as a consequence.
+ If the <span class="command"><strong>linear</strong></span> flag is specified and if
+ <span class="command"><strong>t, t<sub>1</sub>, ..., t<sub>n</sub></strong></span>
+ are (applications of) premises in the current context, they are
+ <span class="command"><strong>clear</strong></span>ed.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>
+ The ones opened by the tactics <span class="command"><strong>lapply</strong></span> invokes.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_inversion.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_left.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">inversion </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> left</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>left</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_lapply.html" title="lapply" /><link rel="next" href="tac_letin.html" title="letin" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">left</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_lapply.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_letin.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_left"></a>left</h2></div></div></div><p><strong class="userinput"><code>left </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>left</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type
+ with at least one constructor.</p></dd><dt><span class="term">Action:</span></dt><dd><p>Equivalent to <span class="command"><strong>constructor 1</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <span class="command"><strong>constructor</strong></span> tactic.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_lapply.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_letin.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">lapply </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> letin</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>letin</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_left.html" title="left" /><link rel="next" href="tac_normalize.html" title="normalize" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">letin</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_left.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_normalize.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_letin"></a>letin</h2></div></div></div><p><strong class="userinput"><code>letin x ≝ t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>letin</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> <span class="bold"><strong>≝</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It adds to the context of the current sequent to prove a new
+ definition <span class="command"><strong>x ≝ t</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_left.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_normalize.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">left </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> normalize</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>normalize</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_letin.html" title="letin" /><link rel="next" href="tac_reflexivity.html" title="reflexivity" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">normalize</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_letin.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_reflexivity.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_normalize"></a>normalize</h2></div></div></div><p><strong class="userinput"><code>normalize patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>normalize</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It replaces all the terms matched by <span class="command"><strong>patt</strong></span>
+ with their βδιζ-normal form.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_letin.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_reflexivity.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">letin </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> reflexivity</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>obtain</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_exitselim.html" title="let such that" /><link rel="next" href="tac_suppose.html" title="suppose" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">obtain</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_exitselim.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_suppose.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_obtain"></a>obtain</h2></div></div></div><p><strong class="userinput"><code>obtain H t1 = t2 justification</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p>[<span class="bold"><strong>obtain</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span> | <span class="bold"><strong>conclude</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>] <span class="bold"><strong>=</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> [<span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span> | <span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> | <span class="bold"><strong>using once</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> | <span class="bold"><strong>proof</strong></span>] [<span class="bold"><strong>done</strong></span>]</p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p><span class="command"><strong>conclude</strong></span> can be used only if the current
+ sequent is stating an equality. The left hand side must be omitted
+ in an equality chain.</p></dd><dt><span class="term">Action:</span></dt><dd><p>Starts or continues an equality chain. If the chain starts
+ with <span class="command"><strong>obtain H</strong></span> a new subproof named
+ <span class="command"><strong>H</strong></span> is started.</p></dd><dt><span class="term">New sequent to prove:</span></dt><dd><p>If the chain starts
+ with <span class="command"><strong>obtain H</strong></span> a nre sequent for
+ <span class="command"><strong>t2 = ?</strong></span> is opened.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_exitselim.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_suppose.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">let such that </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> suppose</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>reflexivity</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_normalize.html" title="normalize" /><link rel="next" href="tac_replace.html" title="replace" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">reflexivity</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_normalize.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_replace.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_reflexivity"></a>reflexivity</h2></div></div></div><p><strong class="userinput"><code>reflexivity </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>reflexivity</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ <span class="command"><strong>t=t</strong></span> for some term <span class="command"><strong>t</strong></span></p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by reflexivity
+ of equality.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_normalize.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_replace.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">normalize </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> replace</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>replace</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_reflexivity.html" title="reflexivity" /><link rel="next" href="tac_rewrite.html" title="rewrite" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">replace</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_reflexivity.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_rewrite.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_replace"></a>replace</h2></div></div></div><p><strong class="userinput"><code>change patt with t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>replace</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span> <span class="bold"><strong>with</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It replaces the subterms of the current sequent matched by
+ <span class="command"><strong>patt</strong></span> with the new term <span class="command"><strong>t</strong></span>.
+ For each subterm matched by the pattern, <span class="command"><strong>t</strong></span> is
+ disambiguated in the context of the subterm.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>For each matched term <span class="command"><strong>t'</strong></span> it opens
+ a new sequent to prove whose conclusion is
+ <span class="command"><strong>t'=t</strong></span>.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_reflexivity.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_rewrite.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">reflexivity </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> rewrite</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>rewrite</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_replace.html" title="replace" /><link rel="next" href="tac_right.html" title="right" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">rewrite</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_replace.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_right.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_rewrite"></a>rewrite</h2></div></div></div><p><strong class="userinput"><code>rewrite dir p patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>rewrite</strong></span> [<span class="bold"><strong><</strong></span>|<span class="bold"><strong>></strong></span>] <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p><span class="command"><strong>p</strong></span> must be the proof of an equality,
+ possibly under some hypotheses.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It looks in every term matched by <span class="command"><strong>patt</strong></span>
+ for all the occurrences of the
+ left hand side of the equality that <span class="command"><strong>p</strong></span> proves
+ (resp. the right hand side if <span class="command"><strong>dir</strong></span> is
+ <span class="command"><strong><</strong></span>). Every occurence found is replaced with
+ the opposite side of the equality.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens one new sequent for each hypothesis of the
+ equality proved by <span class="command"><strong>p</strong></span> that is not closed
+ by unification.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_replace.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_right.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">replace </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> right</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>right</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_rewrite.html" title="rewrite" /><link rel="next" href="tac_ring.html" title="ring" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">right</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_rewrite.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_ring.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_right"></a>right</h2></div></div></div><p><strong class="userinput"><code>right </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>right</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least two constructors.</p></dd><dt><span class="term">Action:</span></dt><dd><p>Equivalent to <span class="command"><strong>constructor 2</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise of the second
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <span class="command"><strong>constructor</strong></span> tactic.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_rewrite.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_ring.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">rewrite </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> ring</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ring</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_right.html" title="right" /><link rel="next" href="tac_simplify.html" title="simplify" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ring</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_right.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_simplify.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_ring"></a>ring</h2></div></div></div><p><strong class="userinput"><code>ring </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>ring</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be an
+ equality over Coq's real numbers that can be proved using
+ the ring properties of the real numbers only.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent veryfying the equality by
+ means of computation (i.e. this is a reflexive tactic, implemented
+ exploiting the "two level reasoning" technique).</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_right.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_simplify.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">right </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> simplify</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>simplify</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_ring.html" title="ring" /><link rel="next" href="tac_split.html" title="split" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">simplify</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_ring.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_split.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_simplify"></a>simplify</h2></div></div></div><p><strong class="userinput"><code>simplify patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>simplify</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It replaces all the terms matched by <span class="command"><strong>patt</strong></span>
+ with other convertible terms that are supposed to be simpler.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_ring.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_split.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ring </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> split</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>split</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_simplify.html" title="simplify" /><link rel="next" href="tac_subst.html" title="subst" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">split</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_simplify.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_subst.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_split"></a>split</h2></div></div></div><p><strong class="userinput"><code>split </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>split</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current sequent must be
+ an inductive type or the application of an inductive type with
+ at least one constructor.</p></dd><dt><span class="term">Action:</span></dt><dd><p>Equivalent to <span class="command"><strong>constructor 1</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens a new sequent for each premise of the first
+ constructor of the inductive type that is the conclusion of the
+ current sequent. For more details, see the <span class="command"><strong>constructor</strong></span> tactic.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_simplify.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_subst.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">simplify </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> subst</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>subst</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_split.html" title="split" /><link rel="next" href="tac_symmetry.html" title="symmetry" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">subst</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_split.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_symmetry.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_subst"></a>subst</h2></div></div></div><p><strong class="userinput"><code>subst</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>subst</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>
+ None.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>
+ For each premise of the form
+ <span class="command"><strong>H: x = t</strong></span> or <span class="command"><strong>H: t = x</strong></span>
+ where <span class="command"><strong>x</strong></span> is a local variable and
+ <span class="command"><strong>t</strong></span> does not depend on <span class="command"><strong>x</strong></span>,
+ the tactic rewrites <span class="command"><strong>H</strong></span> wherever
+ <span class="command"><strong>x</strong></span> appears clearing <span class="command"><strong>H</strong></span> and
+ <span class="command"><strong>x</strong></span> afterwards.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>
+ The one opened by the applied tactics.
+ </p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_split.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_symmetry.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">split </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> symmetry</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>suppose</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_obtain.html" title="obtain" /><link rel="next" href="tac_thesisbecomes.html" title="the thesis becomes" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">suppose</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_obtain.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_thesisbecomes.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_suppose"></a>suppose</h2></div></div></div><p><strong class="userinput"><code>suppose t1 (x) that is equivalent to t2</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>suppose</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> (</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>) </strong></span> [ <span class="bold"><strong>that is equivalent to</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> ]</p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p>The conclusion of the current proof must be
+ <span class="command"><strong>∀x:T.P</strong></span> or
+ <span class="command"><strong>T→P</strong></span> where <span class="command"><strong>T</strong></span> is
+ a proposition (i.e. <span class="command"><strong>T</strong></span> has type
+ <span class="command"><strong>Prop</strong></span> or <span class="command"><strong>CProp</strong></span>).</p></dd><dt><span class="term">Action:</span></dt><dd><p>It adds to the context of the current sequent to prove a new
+ declaration <span class="command"><strong>x : T </strong></span>. The new conclusion becomes
+ <span class="command"><strong>P</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_obtain.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_thesisbecomes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">obtain </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> the thesis becomes</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>symmetry</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_subst.html" title="subst" /><link rel="next" href="tac_transitivity.html" title="transitivity" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">symmetry</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_subst.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_transitivity.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_symmetry"></a>symmetry</h2></div></div></div><p>The tactic <span class="command"><strong>symmetry</strong></span> </p><p><strong class="userinput"><code>symmetry </code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>symmetry</strong></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current proof must be an equality.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It swaps the two sides of the equalityusing the symmetric
+ property.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_subst.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_transitivity.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">subst </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> transitivity</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>the thesis becomes</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_suppose.html" title="suppose" /><link rel="next" href="tac_weneedtoprove.html" title="we need to prove" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">the thesis becomes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_suppose.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_weneedtoprove.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_thesisbecomes"></a>the thesis becomes</h2></div></div></div><p><strong class="userinput"><code>the thesis becomes t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>the thesis becomes</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p>The provided term <span class="command"><strong>t</strong></span> must be convertible with
+ current sequent.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It changes the current goal to the one provided.</p></dd><dt><span class="term">New sequent to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_suppose.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_weneedtoprove.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">suppose </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> we need to prove</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>transitivity</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_symmetry.html" title="symmetry" /><link rel="next" href="tac_unfold.html" title="unfold" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">transitivity</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_symmetry.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_unfold.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_transitivity"></a>transitivity</h2></div></div></div><p><strong class="userinput"><code>transitivity t</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>transitivity</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>The conclusion of the current proof must be an equality.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It closes the current sequent by transitivity of the equality.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens two new sequents <span class="command"><strong>l=t</strong></span> and
+ <span class="command"><strong>t=r</strong></span> where <span class="command"><strong>l</strong></span> and <span class="command"><strong>r</strong></span> are the left and right hand side of the equality in the conclusion of
+the current sequent to prove.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_symmetry.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_unfold.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">symmetry </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> unfold</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>unfold</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_transitivity.html" title="transitivity" /><link rel="next" href="tac_whd.html" title="whd" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">unfold</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_transitivity.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_whd.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_unfold"></a>unfold</h2></div></div></div><p><strong class="userinput"><code>unfold t patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>unfold</strong></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>] <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It finds all the occurrences of <span class="command"><strong>t</strong></span>
+ (possibly applied to arguments) in the subterms matched by
+ <span class="command"><strong>patt</strong></span>. Then it δ-expands each occurrence,
+ also performing β-reduction of the obtained term. If
+ <span class="command"><strong>t</strong></span> is omitted it defaults to each
+ subterm matched by <span class="command"><strong>patt</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_transitivity.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_whd.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">transitivity </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> whd</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>we need to prove</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_thesisbecomes.html" title="the thesis becomes" /><link rel="next" href="tac_andelim.html" title="we have" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">we need to prove</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_thesisbecomes.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_andelim.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_weneedtoprove"></a>we need to prove</h2></div></div></div><p><strong class="userinput"><code>we need to prove t1 (id) or equivalently t2</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>we need to prove</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>
+ [<span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>
+ <span class="bold"><strong>)</strong></span>]
+ [ <span class="bold"><strong>or equivalently</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]</p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p></p></dd><dt><span class="term">Action:</span></dt><dd><p>If <span class="command"><strong>id</strong></span> is provided, starts a subproof that once concluded
+ will be named <span class="command"><strong>id</strong></span>. Otherwise states what needs to be proved.
+ If <span class="command"><strong>t2</strong></span> is provided, the new goal is
+ immediately changed to <span class="command"><strong>t2</strong></span> wich must
+ be equivalent to <span class="command"><strong>t1</strong></span>.
+ </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>The stated one if <span class="command"><strong>id</strong></span> is provided</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_thesisbecomes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_andelim.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">the thesis becomes </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> we have</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>we proceed by cases on</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_andelim.html" title="we have" /><link rel="next" href="tac_weproceedbyinduction.html" title="we proceed by induction on" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">we proceed by cases on</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_andelim.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_weproceedbyinduction.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_weproceedbycases"></a>we proceed by cases on</h2></div></div></div><p><strong class="userinput"><code>we proceed by cases on t to prove th</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>we proceed by cases on</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong>to prove</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p><span class="command"><strong>t</strong></span> must inhabitant of an inductive type and
+ <span class="command"><strong>th</strong></span> must be the conclusion to be proved by
+ cases.</p></dd><dt><span class="term">Action:</span></dt><dd><p> It proceeds by cases on <span class="command"><strong>t</strong></span> </p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens one new sequent for each constructor of the
+ type of <span class="command"><strong>t</strong></span>.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_andelim.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_weproceedbyinduction.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">we have </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> we proceed by induction on</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>we proceed by induction on</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /><link rel="prev" href="tac_weproceedbycases.html" title="we proceed by cases on" /><link rel="next" href="tac_bytermweproved.html" title="we proved" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">we proceed by induction on</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_weproceedbycases.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Declarative Tactics</th><td width="20%" align="right"> <a accesskey="n" href="tac_bytermweproved.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_weproceedbyinduction"></a>we proceed by induction on</h2></div></div></div><p><strong class="userinput"><code>we proceed by induction on t to prove th</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>we proceed by induction on</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> <span class="bold"><strong> to prove </strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> </p></dd><dt><span class="term">Pre-condition:</span></dt><dd><p><span class="command"><strong>t</strong></span> must inhabitant of an inductive type and
+ <span class="command"><strong>th</strong></span> must be the conclusion to be proved by induction.
+ </p></dd><dt><span class="term">Action:</span></dt><dd><p>It proceed by induction on <span class="command"><strong>t</strong></span>.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>It opens one new sequent for each constructor of the
+ type of <span class="command"><strong>t</strong></span>.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_weproceedbycases.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_declarative_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="tac_bytermweproved.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">we proceed by cases on </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> we proved</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>whd</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tactics.html" title="Chapter 7. Tactics" /><link rel="prev" href="tac_unfold.html" title="unfold" /><link rel="next" href="sec_declarative_tactics.html" title="Chapter 8. Declarative Tactics" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">whd</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tac_unfold.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Tactics</th><td width="20%" align="right"> <a accesskey="n" href="sec_declarative_tactics.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tac_whd"></a>whd</h2></div></div></div><p><strong class="userinput"><code>whd patt</code></strong></p><p>
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Synopsis:</span></dt><dd><p><span class="bold"><strong>whd</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></p></dd><dt><span class="term">Pre-conditions:</span></dt><dd><p>None.</p></dd><dt><span class="term">Action:</span></dt><dd><p>It replaces all the terms matched by <span class="command"><strong>patt</strong></span>
+ with their βδιζ-weak-head normal form.</p></dd><dt><span class="term">New sequents to prove:</span></dt><dd><p>None.</p></dd></dl></div><p>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tac_unfold.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tactics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_declarative_tactics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">unfold </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. Declarative Tactics</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>tacticssec__tactics</title>
+ <tgroup cols="3">
+ <tbody/>
+ </tgroup>
+</table>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Tacticals</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_tacticals.html" title="Chapter 6. Tacticals" /><link rel="prev" href="proofstatus.html" title="The proof status" /><link rel="next" href="sec_tactics.html" title="Chapter 7. Tactics" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Tacticals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="proofstatus.html">Prev</a> </td><th width="60%" align="center">Chapter 6. Tacticals</th><td width="20%" align="right"> <a accesskey="n" href="sec_tactics.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tacticals"></a>Tacticals</h2></div></div></div><div class="table"><a id="idp70790512"></a><p class="title"><strong>Table 6.1. proof script</strong></p><div class="table-contents"><table summary="proof script" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.proofscript"></a><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.proofscript">proof-script</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.proofstep">proof-step</a></em></span> [<span class="emphasis"><em><a class="link" href="tacticals.html#grammar.proofstep">proof-step</a></em></span>]…</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><p>Every proof step can be immediately executed.</p><div class="table"><a id="idp70799712"></a><p class="title"><strong>Table 6.2. proof steps</strong></p><div class="table-contents"><table summary="proof steps" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.proofstep"></a><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.proofstep">proof-step</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span></td><td style="">The tactical is applied to each
+ <a class="link" href="proofstatus.html#selectedsequents">selected sequent</a>.
+ Each new sequent becomes a selected sequent.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>.</strong></span></td><td style="">The first
+ <a class="link" href="proofstatus.html#selectedsequents">selected sequent</a> becomes
+ the only one selected. All the remaining previously selected sequents
+ are proposed to the user one at a time when the next
+ "<span class="bold"><strong>.</strong></span>" is used.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>;</strong></span></td><td style="">Nothing changes. Use this proof step as a separator in
+ concrete syntax.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>[</strong></span></td><td style="">Every <a class="link" href="proofstatus.html#selectedsequents">selected sequent</a>
+ becomes a <a class="link" href="proofstatus.html#siblingsequents">sibling sequent</a>
+ that constitute a branch in the proof.
+ Moreover, the first sequent is also selected.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>|</strong></span></td><td style="">Stop working on the current branch of the innermost branching
+ proof.
+ The sibling branches become the <a class="link" href="proofstatus.html#siblingsequents">sibling
+ sequents</a> and the first one is also selected.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>[<span class="bold"><strong>,</strong></span><span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]…<span class="bold"><strong>:</strong></span></td><td style="">The <a class="link" href="proofstatus.html#siblingsequents">sibling sequents</a>
+ specified by the user become the next
+ <a class="link" href="proofstatus.html#selectedsequents">selected sequents</a>.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>*:</strong></span></td><td style="">Every sibling branch not considered yet in the innermost
+ branching proof becomes a
+ <a class="link" href="proofstatus.html#selectedsequents">selected sequent</a>.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>skip</strong></span></td><td style="">Accept the automatically provided instantiation (not shown
+ to the user) for the currently selected
+ <a class="link" href="proofstatus.html#solvedsequents">automatically closed sibling sequent</a>.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>]</strong></span></td><td style="">Stop analyzing branches for the innermost branching proof.
+ Every sequent opened during the branching proof and not closed yet
+ becomes a <a class="link" href="proofstatus.html#selectedsequents">selected sequent</a>.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>focus</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>]…</td><td style="">
+ Selects the sequents specified by the user. The selected sequents
+ must be completely closed (no new sequents left open) before doing an
+ "<span class="bold"><strong>unfocus</strong></span> that restores
+ the current set of sibling branches.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>unfocus</strong></span></td><td style="">
+ Used to match the innermost
+ "<span class="bold"><strong>focus</strong></span>" tactical
+ when all the sequents selected by it have been closed.
+ Until "<span class="bold"><strong>unfocus</strong></span>" is
+ performed, it is not possible to progress in the rest of the
+ proof.
+ </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp70846288"></a><p class="title"><strong>Table 6.3. tactics and LCF tacticals</strong></p><div class="table-contents"><table summary="tactics and LCF tacticals" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.LCFtactical"></a><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em><a class="link" href="sec_tactics.html#grammar.tactic">tactic</a></em></span></td><td style="">Applies the specified tactic.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span> <span class="bold"><strong>;</strong></span> <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span></td><td style="">Applies the first tactical first and the second tactical
+ to each sequent opened by the first one.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>
+ <span class="bold"><strong>[</strong></span>
+ [<span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]
+ [<span class="bold"><strong>|</strong></span> <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>
+ </td><td style="">Applies the first tactical first and each tactical in the
+ list of tacticals to the corresponding sequent opened by the
+ first one. The number of tacticals provided in the list must be
+ equal to the number of sequents opened by the first tactical.</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>do</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>
+ <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>
+ </td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>repeat</strong></span>
+ <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>
+ </td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <span class="bold"><strong>first [</strong></span>
+ [<span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]
+ [<span class="bold"><strong>|</strong></span> <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>
+ </td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>try</strong></span> <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span></td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style="">
+ <span class="bold"><strong>solve [</strong></span>
+ [<span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]
+ [<span class="bold"><strong>|</strong></span> <span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span>]…
+ <span class="bold"><strong>]</strong></span>
+ </td><td style=""><span class="emphasis"><em>TODO</em></span></td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>(</strong></span><span class="emphasis"><em><a class="link" href="tacticals.html#grammar.LCFtactical">LCF-tactical</a></em></span><span class="bold"><strong>)</strong></span></td><td style="">Used for grouping during parsing.</td></tr></tbody></table></div></div><br class="table-break" /></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="proofstatus.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_tacticals.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_tactics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The proof status </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Tactics</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Tactic arguments</title><link rel="stylesheet" type="text/css" href="docbook.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /><link rel="home" href="index.html" title="Matita V0.5.9 User Manual (rev. 0.5.9 )" /><link rel="up" href="sec_terms.html" title="Chapter 4. Syntax" /><link rel="prev" href="proofs.html" title="Proofs" /><link rel="next" href="sec_usernotation.html" title="Chapter 5. Extending the syntax" /></head><body><a xmlns="" href="../../../"><div class="matita_logo"><img src="figures/matita.png" alt="Tiny Matita logo" /><span>Matita Home</span></div></a><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Tactic arguments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="proofs.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Syntax</th><td width="20%" align="right"> <a accesskey="n" href="sec_usernotation.html">Next</a></td></tr></table><hr /></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tacticargs"></a>Tactic arguments</h2></div></div></div><p>This section documents the syntax of some recurring arguments for
+ tactics.</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="introsspec"></a>intros-spec</h3></div></div></div><div class="table"><a id="idp69423248"></a><p class="title"><strong>Table 4.13. intros-spec</strong></p><div class="table-contents"><table summary="intros-spec" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.intros-spec"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.intros-spec">intros-spec</a></em></span></td><td style="">::=</td><td style="">[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span>] [<span class="bold"><strong>(</strong></span>[<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>]…<span class="bold"><strong>)</strong></span>]</td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><p>The natural number is the number of new hypotheses to be introduced. The list of identifiers gives the name for the first hypotheses.</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="pattern"></a>pattern</h3></div></div></div><div class="table"><a id="idp69433952"></a><p class="title"><strong>Table 4.14. pattern</strong></p><div class="table-contents"><table summary="pattern" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.pattern"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.pattern">pattern</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>in</strong></span>
+ [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>]]…
+ [<span class="bold"><strong>⊢</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>]]</td><td style="">simple pattern</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>in match</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>
+ [<span class="bold"><strong>in</strong></span>
+ [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>[<span class="bold"><strong>:</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>]]…
+ [<span class="bold"><strong>⊢</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>]]</td><td style="">full pattern</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69453472"></a><p class="title"><strong>Table 4.15. path</strong></p><div class="table-contents"><table summary="path" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.path"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span></td><td style="">::=</td><td style=""><span class="emphasis"><em>〈〈any <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span> without occurrences of <span class="bold"><strong>Set</strong></span>, <span class="bold"><strong>Prop</strong></span>, <span class="bold"><strong>CProp</strong></span>, <span class="bold"><strong>Type</strong></span>, <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.id">id</a></em></span>, <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.uri">uri</a></em></span> and user provided notation; however, <span class="bold"><strong>%</strong></span> is now an additional production for <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>〉〉</em></span></td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><p>A <span class="emphasis"><em>path</em></span> locates zero or more subterms of a given term by mimicking the term structure up to:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Occurrences of the subterms to locate that are
+ represented by <span class="bold"><strong>%</strong></span>.</p></li><li class="listitem"><p>Subterms without any occurrence of subterms to locate
+ that can be represented by <span class="bold"><strong>?</strong></span>.
+ </p></li></ol></div><p>Warning: the format for a path for a <span class="bold"><strong>match</strong></span> … <span class="bold"><strong>with</strong></span>
+ expression is restricted to: <span class="bold"><strong>match</strong></span> <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>
+ <span class="bold"><strong>with</strong></span>
+ <span class="bold"><strong>[</strong></span>
+ <span class="bold"><strong>_</strong></span>
+ <span class="bold"><strong>⇒</strong></span>
+ <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>
+ <span class="bold"><strong>|</strong></span> …
+ <span class="bold"><strong>|</strong></span>
+ <span class="bold"><strong>_</strong></span>
+ <span class="bold"><strong>⇒</strong></span>
+ <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>
+ <span class="bold"><strong>]</strong></span>
+ Its semantics is the following: the n-th
+ "<span class="bold"><strong>_</strong></span>
+ <span class="bold"><strong>⇒</strong></span>
+ <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span>" branch is matched against the n-th constructor of the
+ inductive data type. The head λ-abstractions of <span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.path">path</a></em></span> are matched
+ against the corresponding constructor arguments.
+ </p><p>For instance, the path
+ <strong class="userinput"><code>∀_,_:?.(? ? % ?)→(? ? ? %)</code></strong>
+ locates at once the subterms
+ <strong class="userinput"><code>x+y</code></strong> and <strong class="userinput"><code>x*y</code></strong> in the
+ term <strong class="userinput"><code>∀x,y:nat.x+y=1→0=x*y</code></strong>
+ (where the notation <strong class="userinput"><code>A=B</code></strong> hides the term
+ <strong class="userinput"><code>(eq T A B)</code></strong> for some type <strong class="userinput"><code>T</code></strong>).
+ </p><p>A <span class="emphasis"><em>simple pattern</em></span> extends paths to locate
+ subterms in a whole sequent. In particular, the pattern
+ <strong class="userinput"><code>in H: p K: q ⊢ r</code></strong> locates at once all the subterms
+ located by the pattern <strong class="userinput"><code>r</code></strong> in the conclusion of the
+ sequent and by the patterns <strong class="userinput"><code>p</code></strong> and
+ <strong class="userinput"><code>q</code></strong> in the hypotheses <strong class="userinput"><code>H</code></strong>
+ and <strong class="userinput"><code>K</code></strong> of the sequent.
+ </p><p>If no list of hypotheses is provided in a simple pattern, no subterm
+ is selected in the hypothesis. If the <strong class="userinput"><code>⊢ p</code></strong>
+ part of the pattern is not provided, no subterm will be matched in the
+ conclusion if at least one hypothesis is provided; otherwise the whole
+ conclusion is selected.
+ </p><p>Finally, a <span class="emphasis"><em>full pattern</em></span> is interpreted in three
+ steps. In the first step the <strong class="userinput"><code>match T in</code></strong>
+ part is ignored and a set <span class="emphasis"><em>S</em></span> of subterms is
+ located as for the case of
+ simple patterns. In the second step the term <strong class="userinput"><code>T</code></strong>
+ is parsed and interpreted in the context of each subterm
+ <span class="emphasis"><em>s ∈ S</em></span>. In the last term for each
+ <span class="emphasis"><em>s ∈ S</em></span> the interpreted term <strong class="userinput"><code>T</code></strong>
+ computed in the previous step is looked for. The final set of subterms
+ located by the full pattern is the set of occurrences of
+ the interpreted <strong class="userinput"><code>T</code></strong> in the subterms <span class="emphasis"><em>s</em></span>.
+ </p><p>A full pattern can always be replaced by a simple pattern,
+ often at the cost of increased verbosity or decreased readability.</p><p>Example: the pattern
+ <strong class="userinput"><code>⊢ in match x+y in ∀_,_:?.(? ? % ?)</code></strong>
+ locates only the first occurrence of <strong class="userinput"><code>x+y</code></strong>
+ in the sequent <strong class="userinput"><code>x,y: nat ⊢ ∀z,w:nat. (x+y) * (z+w) =
+ z * (x+y) + w * (x+y)</code></strong>. The corresponding simple pattern
+ is <strong class="userinput"><code>⊢ ∀_,_:?.(? ? (? % ?) ?)</code></strong>.
+ </p><p>Every tactic that acts on subterms of the selected sequents have
+ a pattern argument for uniformity. To automatically generate a simple
+ pattern:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Select in the current goal the subterms to pass to the
+ tactic by using the mouse. In order to perform a multiple selection of
+ subterms, hold the Ctrl key while selecting every subterm after the
+ first one.</p></li><li class="listitem"><p>From the contextual menu select "Copy".</p></li><li class="listitem"><p>From the "Edit" or the contextual menu select
+ "Paste as pattern"</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="reduction-kind"></a>reduction-kind</h3></div></div></div><p>Reduction kinds are normalization functions that transform a term
+ to a convertible but simpler one. Each reduction kind can be used both
+ as a tactic argument and as a stand-alone tactic.</p><div class="table"><a id="idp69506592"></a><p class="title"><strong>Table 4.16. reduction-kind</strong></p><div class="table-contents"><table summary="reduction-kind" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.reduction-kind"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.reduction-kind">reduction-kind</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>normalize</strong></span></td><td style="">Computes the βδιζ-normal form</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>simplify</strong></span></td><td style="">Computes a form supposed to be simpler</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>unfold</strong></span> [<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.sterm">sterm</a></em></span>]</td><td style="">δ-reduces the constant or variable if specified, or that
+ in head position</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>whd</strong></span></td><td style="">Computes the βδιζ-weak-head normal form</td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="auto-params"></a>auto-params</h3></div></div></div><div class="table"><a id="idp69522400"></a><p class="title"><strong>Table 4.17. auto-params</strong></p><div class="table-contents"><table summary="auto-params" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.autoparams"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></td><td style="">::=</td><td style="">[<span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.simpleautoparam">simple_auto_param</a></em></span>]…
+ [<span class="bold"><strong>by</strong></span>
+ <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span> [,<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span>]…]
+ </td><td class="auto-generated" style=""> </td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="idp69531952"></a><p class="title"><strong>Table 4.18. simple-auto-param</strong></p><div class="table-contents"><table summary="simple-auto-param" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.simpleautoparam"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.simpleautoparam">simple_auto_param</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>depth=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style="">Give a bound to the depth of the search tree</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>width=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style="">The maximal width of the search tree</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>library</strong></span></td><td style="">Search everywhere (not only in included files)</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>type</strong></span></td><td style="">Try to close also goals of sort Type, otherwise only goals
+ living in sort Prop are attacked.
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>paramodulation</strong></span></td><td style="">Try to close the goal performing unit-equality paramodulation
+ </td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>size=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style="">The maximal number of nodes in the proof</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="bold"><strong>timeout=<span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.nat">nat</a></em></span></strong></span></td><td style="">Timeout in seconds
+ </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="justification"></a>justification</h3></div></div></div><div class="table"><a id="idp69555152"></a><p class="title"><strong>Table 4.19. justification</strong></p><div class="table-contents"><table summary="justification" style="border-collapse: collapse;border-top: 0.5pt solid ; border-bottom: 0.5pt solid ; "><colgroup><col /><col /><col /><col /></colgroup><tbody><tr><td style=""><a id="grammar.justification"></a><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.justification">justification</a></em></span></td><td style="">::=</td><td style=""><span class="bold"><strong>using</strong></span> <span class="emphasis"><em><a class="link" href="sec_terms.html#grammar.term">term</a></em></span></td><td style="">Proof term manually provided</td></tr><tr><td style=""> </td><td style="">|</td><td style=""><span class="emphasis"><em><a class="link" href="tacticargs.html#grammar.autoparams">auto_params</a></em></span></td><td style="">Call automation</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="proofs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sec_terms.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec_usernotation.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Proofs </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. Extending the syntax</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>tactics</title>
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry id="grammar.tactic">&tactic;</entry>
+ <entry>::=</entry>
+ <entry><link linkend="tac_absurd"><emphasis role="bold">absurd</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_apply"><emphasis role="bold">apply</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_applyS"><emphasis role="bold">applyS</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> <emphasis><link linkend="grammar.autoparams">auto_params</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_assumption">
+ <emphasis role="bold">assumption</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_auto"><emphasis role="bold">auto</emphasis></link> <emphasis><link linkend="grammar.autoparams">auto_params</link></emphasis>. <emphasis role="bold">autobatch</emphasis> <emphasis><link linkend="grammar.autoparams">auto_params</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_cases"><emphasis role="bold">cases</emphasis></link>
+ <emphasis><link linkend="grammar.term">term</link></emphasis> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis> [<emphasis role="bold">(</emphasis>[<emphasis><link linkend="grammar.id">id</link></emphasis>]…<emphasis role="bold">)</emphasis>]
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_change"><emphasis role="bold">change</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis> <emphasis role="bold">with</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_clear"><emphasis role="bold">clear</emphasis></link>
+ <emphasis><link linkend="grammar.id">id</link></emphasis> [<emphasis><link linkend="grammar.id">id</link></emphasis>…]
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_clearbody"><emphasis role="bold">clearbody</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_compose"><emphasis role="bold">compose</emphasis></link> [<emphasis><link linkend="grammar.nat">nat</link></emphasis>] <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> [<emphasis role="bold">with</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis>] [<emphasis><link linkend="grammar.intros-spec">intros-spec</link></emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_constructor"><emphasis role="bold">constructor</emphasis></link> <emphasis><link linkend="grammar.nat">nat</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_contradiction">
+ <emphasis role="bold">contradiction</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_cut"><emphasis role="bold">cut</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> [<emphasis role="bold">as</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_decompose"><emphasis role="bold">decompose</emphasis></link>
+ [<emphasis role="bold">as</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>…]
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_demodulate"><emphasis role="bold">demodulate</emphasis></link> <emphasis><link linkend="grammar.autoparams">auto_params</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_destruct"><emphasis role="bold">destruct</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_elim"><emphasis role="bold">elim</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis> [<emphasis role="bold">using</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis>] <emphasis><link linkend="grammar.intros-spec">intros-spec</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_elimType"><emphasis role="bold">elimType</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> [<emphasis role="bold">using</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis>] <emphasis><link linkend="grammar.intros-spec">intros-spec</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_exact"><emphasis role="bold">exact</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_exists">
+ <emphasis role="bold">exists</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_fail">
+ <emphasis role="bold">fail</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_fold"><emphasis role="bold">fold</emphasis></link> <emphasis><link linkend="grammar.reduction-kind">reduction-kind</link></emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_fourier">
+ <emphasis role="bold">fourier</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_fwd"><emphasis role="bold">fwd</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis> [<emphasis role="bold">as</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis> [<emphasis><link linkend="grammar.id">id</link></emphasis>]…]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_generalize"><emphasis role="bold">generalize</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis> [<emphasis role="bold">as</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_id">
+ <emphasis role="bold">id</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_intro"><emphasis role="bold">intro</emphasis></link> [<emphasis><link linkend="grammar.id">id</link></emphasis>]</entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_intros"><emphasis role="bold">intros</emphasis></link> <emphasis><link linkend="grammar.intros-spec">intros-spec</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_inversion"><emphasis role="bold">inversion</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_lapply"><emphasis role="bold">lapply</emphasis></link>
+ [<emphasis role="bold">linear</emphasis>]
+ [<emphasis role="bold">depth=</emphasis><emphasis><link linkend="grammar.nat">nat</link></emphasis>]
+ <emphasis><link linkend="grammar.sterm">sterm</link></emphasis>
+ [<emphasis role="bold">to</emphasis>
+ <emphasis><link linkend="grammar.sterm">sterm</link></emphasis>
+ [<emphasis role="bold">,</emphasis><emphasis><link linkend="grammar.sterm">sterm</link></emphasis>…]
+ ]
+ [<emphasis role="bold">as</emphasis> <emphasis><link linkend="grammar.id">id</link></emphasis>]
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_left">
+ <emphasis role="bold">left</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_letin"><emphasis role="bold">letin</emphasis></link> <emphasis><link linkend="grammar.id">id</link></emphasis> <emphasis role="bold">≝</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_normalize"><emphasis role="bold">normalize</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_reflexivity">
+ <emphasis role="bold">reflexivity</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_replace"><emphasis role="bold">replace</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis> <emphasis role="bold">with</emphasis> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_rewrite"><emphasis role="bold">rewrite</emphasis></link> [<emphasis role="bold"><</emphasis>|<emphasis role="bold">></emphasis>] <emphasis><link linkend="grammar.sterm">sterm</link></emphasis> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_right">
+ <emphasis role="bold">right</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_ring">
+ <emphasis role="bold">ring</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_simplify"><emphasis role="bold">simplify</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_split">
+ <emphasis role="bold">split</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_subst">
+ <emphasis role="bold">subst</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry>
+ <link linkend="tac_symmetry">
+ <emphasis role="bold">symmetry</emphasis>
+ </link>
+ </entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_transitivity"><emphasis role="bold">transitivity</emphasis></link> <emphasis><link linkend="grammar.sterm">sterm</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_unfold"><emphasis role="bold">unfold</emphasis></link> [<emphasis><link linkend="grammar.sterm">sterm</link></emphasis>] <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ <row>
+ <entry/>
+ <entry>|</entry>
+ <entry><link linkend="tac_whd"><emphasis role="bold">whd</emphasis></link> <emphasis><link linkend="grammar.pattern">pattern</link></emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
--- /dev/null
+@MATITA_VERSION@
--- /dev/null
+<!--
+ Extensible HTML version 1.0 Transitional DTD
+
+ This is the same as HTML 4 Transitional except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+ $Revision: 1.2 $
+ $Date: 2002/08/01 18:37:55 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!-- <!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "xhtml-special.ent">
+%HTMLspecial; -->
+
+
+<!-- Portions (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLlat1 PUBLIC
+ "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+ %HTMLlat1;
+-->
+
+<!ENTITY nbsp " "> <!-- no-break space = non-breaking space,
+ U+00A0 ISOnum -->
+<!ENTITY iexcl "¡"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent "¢"> <!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound "£"> <!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "¤"> <!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen "¥"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "¦"> <!-- broken bar = broken vertical bar,
+ U+00A6 ISOnum -->
+<!ENTITY sect "§"> <!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml "¨"> <!-- diaeresis = spacing diaeresis,
+ U+00A8 ISOdia -->
+<!ENTITY copy "©"> <!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf "ª"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo "«"> <!-- left-pointing double angle quotation mark
+ = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not "¬"> <!-- not sign = angled dash,
+ U+00AC ISOnum -->
+<!ENTITY shy "­"> <!-- soft hyphen = discretionary hyphen,
+ U+00AD ISOnum -->
+<!ENTITY reg "®"> <!-- registered sign = registered trade mark sign,
+ U+00AE ISOnum -->
+<!ENTITY macr "¯"> <!-- macron = spacing macron = overline
+ = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg "°"> <!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "±"> <!-- plus-minus sign = plus-or-minus sign,
+ U+00B1 ISOnum -->
+<!ENTITY sup2 "²"> <!-- superscript two = superscript digit two
+ = squared, U+00B2 ISOnum -->
+<!ENTITY sup3 "³"> <!-- superscript three = superscript digit three
+ = cubed, U+00B3 ISOnum -->
+<!ENTITY acute "´"> <!-- acute accent = spacing acute,
+ U+00B4 ISOdia -->
+<!ENTITY micro "µ"> <!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para "¶"> <!-- pilcrow sign = paragraph sign,
+ U+00B6 ISOnum -->
+<!ENTITY middot "·"> <!-- middle dot = Georgian comma
+ = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil "¸"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1 "¹"> <!-- superscript one = superscript digit one,
+ U+00B9 ISOnum -->
+<!ENTITY ordm "º"> <!-- masculine ordinal indicator,
+ U+00BA ISOnum -->
+<!ENTITY raquo "»"> <!-- right-pointing double angle quotation mark
+ = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "¼"> <!-- vulgar fraction one quarter
+ = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "½"> <!-- vulgar fraction one half
+ = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "¾"> <!-- vulgar fraction three quarters
+ = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "¿"> <!-- inverted question mark
+ = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "À"> <!-- latin capital letter A with grave
+ = latin capital letter A grave,
+ U+00C0 ISOlat1 -->
+<!ENTITY Aacute "Á"> <!-- latin capital letter A with acute,
+ U+00C1 ISOlat1 -->
+<!ENTITY Acirc "Â"> <!-- latin capital letter A with circumflex,
+ U+00C2 ISOlat1 -->
+<!ENTITY Atilde "Ã"> <!-- latin capital letter A with tilde,
+ U+00C3 ISOlat1 -->
+<!ENTITY Auml "Ä"> <!-- latin capital letter A with diaeresis,
+ U+00C4 ISOlat1 -->
+<!ENTITY Aring "Å"> <!-- latin capital letter A with ring above
+ = latin capital letter A ring,
+ U+00C5 ISOlat1 -->
+<!ENTITY AElig "Æ"> <!-- latin capital letter AE
+ = latin capital ligature AE,
+ U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "Ç"> <!-- latin capital letter C with cedilla,
+ U+00C7 ISOlat1 -->
+<!ENTITY Egrave "È"> <!-- latin capital letter E with grave,
+ U+00C8 ISOlat1 -->
+<!ENTITY Eacute "É"> <!-- latin capital letter E with acute,
+ U+00C9 ISOlat1 -->
+<!ENTITY Ecirc "Ê"> <!-- latin capital letter E with circumflex,
+ U+00CA ISOlat1 -->
+<!ENTITY Euml "Ë"> <!-- latin capital letter E with diaeresis,
+ U+00CB ISOlat1 -->
+<!ENTITY Igrave "Ì"> <!-- latin capital letter I with grave,
+ U+00CC ISOlat1 -->
+<!ENTITY Iacute "Í"> <!-- latin capital letter I with acute,
+ U+00CD ISOlat1 -->
+<!ENTITY Icirc "Î"> <!-- latin capital letter I with circumflex,
+ U+00CE ISOlat1 -->
+<!ENTITY Iuml "Ï"> <!-- latin capital letter I with diaeresis,
+ U+00CF ISOlat1 -->
+<!ENTITY ETH "Ð"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "Ñ"> <!-- latin capital letter N with tilde,
+ U+00D1 ISOlat1 -->
+<!ENTITY Ograve "Ò"> <!-- latin capital letter O with grave,
+ U+00D2 ISOlat1 -->
+<!ENTITY Oacute "Ó"> <!-- latin capital letter O with acute,
+ U+00D3 ISOlat1 -->
+<!ENTITY Ocirc "Ô"> <!-- latin capital letter O with circumflex,
+ U+00D4 ISOlat1 -->
+<!ENTITY Otilde "Õ"> <!-- latin capital letter O with tilde,
+ U+00D5 ISOlat1 -->
+<!ENTITY Ouml "Ö"> <!-- latin capital letter O with diaeresis,
+ U+00D6 ISOlat1 -->
+<!ENTITY times "×"> <!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "Ø"> <!-- latin capital letter O with stroke
+ = latin capital letter O slash,
+ U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "Ù"> <!-- latin capital letter U with grave,
+ U+00D9 ISOlat1 -->
+<!ENTITY Uacute "Ú"> <!-- latin capital letter U with acute,
+ U+00DA ISOlat1 -->
+<!ENTITY Ucirc "Û"> <!-- latin capital letter U with circumflex,
+ U+00DB ISOlat1 -->
+<!ENTITY Uuml "Ü"> <!-- latin capital letter U with diaeresis,
+ U+00DC ISOlat1 -->
+<!ENTITY Yacute "Ý"> <!-- latin capital letter Y with acute,
+ U+00DD ISOlat1 -->
+<!ENTITY THORN "Þ"> <!-- latin capital letter THORN,
+ U+00DE ISOlat1 -->
+<!ENTITY szlig "ß"> <!-- latin small letter sharp s = ess-zed,
+ U+00DF ISOlat1 -->
+<!ENTITY agrave "à"> <!-- latin small letter a with grave
+ = latin small letter a grave,
+ U+00E0 ISOlat1 -->
+<!ENTITY aacute "á"> <!-- latin small letter a with acute,
+ U+00E1 ISOlat1 -->
+<!ENTITY acirc "â"> <!-- latin small letter a with circumflex,
+ U+00E2 ISOlat1 -->
+<!ENTITY atilde "ã"> <!-- latin small letter a with tilde,
+ U+00E3 ISOlat1 -->
+<!ENTITY auml "ä"> <!-- latin small letter a with diaeresis,
+ U+00E4 ISOlat1 -->
+<!ENTITY aring "å"> <!-- latin small letter a with ring above
+ = latin small letter a ring,
+ U+00E5 ISOlat1 -->
+<!ENTITY aelig "æ"> <!-- latin small letter ae
+ = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "ç"> <!-- latin small letter c with cedilla,
+ U+00E7 ISOlat1 -->
+<!ENTITY egrave "è"> <!-- latin small letter e with grave,
+ U+00E8 ISOlat1 -->
+<!ENTITY eacute "é"> <!-- latin small letter e with acute,
+ U+00E9 ISOlat1 -->
+<!ENTITY ecirc "ê"> <!-- latin small letter e with circumflex,
+ U+00EA ISOlat1 -->
+<!ENTITY euml "ë"> <!-- latin small letter e with diaeresis,
+ U+00EB ISOlat1 -->
+<!ENTITY igrave "ì"> <!-- latin small letter i with grave,
+ U+00EC ISOlat1 -->
+<!ENTITY iacute "í"> <!-- latin small letter i with acute,
+ U+00ED ISOlat1 -->
+<!ENTITY icirc "î"> <!-- latin small letter i with circumflex,
+ U+00EE ISOlat1 -->
+<!ENTITY iuml "ï"> <!-- latin small letter i with diaeresis,
+ U+00EF ISOlat1 -->
+<!ENTITY eth "ð"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "ñ"> <!-- latin small letter n with tilde,
+ U+00F1 ISOlat1 -->
+<!ENTITY ograve "ò"> <!-- latin small letter o with grave,
+ U+00F2 ISOlat1 -->
+<!ENTITY oacute "ó"> <!-- latin small letter o with acute,
+ U+00F3 ISOlat1 -->
+<!ENTITY ocirc "ô"> <!-- latin small letter o with circumflex,
+ U+00F4 ISOlat1 -->
+<!ENTITY otilde "õ"> <!-- latin small letter o with tilde,
+ U+00F5 ISOlat1 -->
+<!ENTITY ouml "ö"> <!-- latin small letter o with diaeresis,
+ U+00F6 ISOlat1 -->
+<!ENTITY divide "÷"> <!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "ø"> <!-- latin small letter o with stroke,
+ = latin small letter o slash,
+ U+00F8 ISOlat1 -->
+<!ENTITY ugrave "ù"> <!-- latin small letter u with grave,
+ U+00F9 ISOlat1 -->
+<!ENTITY uacute "ú"> <!-- latin small letter u with acute,
+ U+00FA ISOlat1 -->
+<!ENTITY ucirc "û"> <!-- latin small letter u with circumflex,
+ U+00FB ISOlat1 -->
+<!ENTITY uuml "ü"> <!-- latin small letter u with diaeresis,
+ U+00FC ISOlat1 -->
+<!ENTITY yacute "ý"> <!-- latin small letter y with acute,
+ U+00FD ISOlat1 -->
+<!ENTITY thorn "þ"> <!-- latin small letter thorn,
+ U+00FE ISOlat1 -->
+<!ENTITY yuml "ÿ"> <!-- latin small letter y with diaeresis,
+ U+00FF ISOlat1 -->
+<!-- Mathematical, Greek and Symbolic characters for XHTML -->
+
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLsymbol PUBLIC
+ "-//W3C//ENTITIES Symbols for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+ %HTMLsymbol;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+ New names (i.e., not in ISO 8879 list) do not clash with any
+ existing ISO 8879 entity names. ISO 10646 character numbers
+ are given for each character, in hex. values are decimal
+ conversions of the ISO 10646 values and refer to the document
+ character set. Names are Unicode names.
+-->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof "ƒ"> <!-- latin small letter f with hook = function
+ = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha "Α"> <!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta "Β"> <!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma "Γ"> <!-- greek capital letter gamma,
+ U+0393 ISOgrk3 -->
+<!ENTITY Delta "Δ"> <!-- greek capital letter delta,
+ U+0394 ISOgrk3 -->
+<!ENTITY Epsilon "Ε"> <!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta "Ζ"> <!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta "Η"> <!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta "Θ"> <!-- greek capital letter theta,
+ U+0398 ISOgrk3 -->
+<!ENTITY Iota "Ι"> <!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa "Κ"> <!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda "Λ"> <!-- greek capital letter lamda,
+ U+039B ISOgrk3 -->
+<!ENTITY Mu "Μ"> <!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu "Ν"> <!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron "Ο"> <!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho "Ρ"> <!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma "Σ"> <!-- greek capital letter sigma,
+ U+03A3 ISOgrk3 -->
+<!ENTITY Tau "Τ"> <!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon "Υ"> <!-- greek capital letter upsilon,
+ U+03A5 ISOgrk3 -->
+<!ENTITY Phi "Φ"> <!-- greek capital letter phi,
+ U+03A6 ISOgrk3 -->
+<!ENTITY Chi "Χ"> <!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi "Ψ"> <!-- greek capital letter psi,
+ U+03A8 ISOgrk3 -->
+<!ENTITY Omega "Ω"> <!-- greek capital letter omega,
+ U+03A9 ISOgrk3 -->
+
+<!ENTITY alpha "α"> <!-- greek small letter alpha,
+ U+03B1 ISOgrk3 -->
+<!ENTITY beta "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma "γ"> <!-- greek small letter gamma,
+ U+03B3 ISOgrk3 -->
+<!ENTITY delta "δ"> <!-- greek small letter delta,
+ U+03B4 ISOgrk3 -->
+<!ENTITY epsilon "ε"> <!-- greek small letter epsilon,
+ U+03B5 ISOgrk3 -->
+<!ENTITY zeta "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta "θ"> <!-- greek small letter theta,
+ U+03B8 ISOgrk3 -->
+<!ENTITY iota "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa "κ"> <!-- greek small letter kappa,
+ U+03BA ISOgrk3 -->
+<!ENTITY lambda "λ"> <!-- greek small letter lamda,
+ U+03BB ISOgrk3 -->
+<!ENTITY mu "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron "ο"> <!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf "ς"> <!-- greek small letter final sigma,
+ U+03C2 ISOgrk3 -->
+<!ENTITY sigma "σ"> <!-- greek small letter sigma,
+ U+03C3 ISOgrk3 -->
+<!ENTITY tau "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon "υ"> <!-- greek small letter upsilon,
+ U+03C5 ISOgrk3 -->
+<!ENTITY phi "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega "ω"> <!-- greek small letter omega,
+ U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "ϑ"> <!-- greek theta symbol,
+ U+03D1 NEW -->
+<!ENTITY upsih "ϒ"> <!-- greek upsilon with hook symbol,
+ U+03D2 NEW -->
+<!ENTITY piv "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull "•"> <!-- bullet = black small circle,
+ U+2022 ISOpub -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip "…"> <!-- horizontal ellipsis = three dot leader,
+ U+2026 ISOpub -->
+<!ENTITY prime "′"> <!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime "″"> <!-- double prime = seconds = inches,
+ U+2033 ISOtech -->
+<!ENTITY oline "‾"> <!-- overline = spacing overscore,
+ U+203E NEW -->
+<!ENTITY frasl "⁄"> <!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp "℘"> <!-- script capital P = power set
+ = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image "ℑ"> <!-- black-letter capital I = imaginary part,
+ U+2111 ISOamso -->
+<!ENTITY real "ℜ"> <!-- black-letter capital R = real part symbol,
+ U+211C ISOamso -->
+<!ENTITY trade "™"> <!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym "ℵ"> <!-- alef symbol = first transfinite cardinal,
+ U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef,
+ U+05D0 although the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr "←"> <!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr "↑"> <!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr "→"> <!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr "↓"> <!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr "↔"> <!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr "↵"> <!-- downwards arrow with corner leftwards
+ = carriage return, U+21B5 NEW -->
+<!ENTITY lArr "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+ but also does not have any other character for that function. So lArr can
+ be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr "⇒"> <!-- rightwards double arrow,
+ U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have
+ another character with this function so rArr can be used for 'implies'
+ as ISOtech suggests -->
+<!ENTITY dArr "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr "⇔"> <!-- left right double arrow,
+ U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall "∀"> <!-- for all, U+2200 ISOtech -->
+<!ENTITY part "∂"> <!-- partial differential, U+2202 ISOtech -->
+<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty "∅"> <!-- empty set = null set, U+2205 ISOamso -->
+<!ENTITY nabla "∇"> <!-- nabla = backward difference,
+ U+2207 ISOtech -->
+<!ENTITY isin "∈"> <!-- element of, U+2208 ISOtech -->
+<!ENTITY notin "∉"> <!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni "∋"> <!-- contains as member, U+220B ISOtech -->
+<!ENTITY prod "∏"> <!-- n-ary product = product sign,
+ U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+ the same glyph might be used for both -->
+<!ENTITY sum "∑"> <!-- n-ary summation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+ though the same glyph might be used for both -->
+<!ENTITY minus "−"> <!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast "∗"> <!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic "√"> <!-- square root = radical sign,
+ U+221A ISOtech -->
+<!ENTITY prop "∝"> <!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech -->
+<!ENTITY ang "∠"> <!-- angle, U+2220 ISOamso -->
+<!ENTITY and "∧"> <!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or "∨"> <!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap "∩"> <!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup "∪"> <!-- union = cup, U+222A ISOtech -->
+<!ENTITY int "∫"> <!-- integral, U+222B ISOtech -->
+<!ENTITY there4 "∴"> <!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim "∼"> <!-- tilde operator = varies with = similar to,
+ U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+ although the same glyph might be used to represent both -->
+<!ENTITY cong "≅"> <!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp "≈"> <!-- almost equal to = asymptotic to,
+ U+2248 ISOamsr -->
+<!ENTITY ne "≠"> <!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv "≡"> <!-- identical to, U+2261 ISOtech -->
+<!ENTITY le "≤"> <!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge "≥"> <!-- greater-than or equal to,
+ U+2265 ISOtech -->
+<!ENTITY sub "⊂"> <!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup "⊃"> <!-- superset of, U+2283 ISOtech -->
+<!ENTITY nsub "⊄"> <!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube "⊆"> <!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe "⊇"> <!-- superset of or equal to,
+ U+2287 ISOtech -->
+<!ENTITY oplus "⊕"> <!-- circled plus = direct sum,
+ U+2295 ISOamsb -->
+<!ENTITY otimes "⊗"> <!-- circled times = vector product,
+ U+2297 ISOamsb -->
+<!ENTITY perp "⊥"> <!-- up tack = orthogonal to = perpendicular,
+ U+22A5 ISOtech -->
+<!ENTITY sdot "⋅"> <!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil "⌈"> <!-- left ceiling = APL upstile,
+ U+2308 ISOamsc -->
+<!ENTITY rceil "⌉"> <!-- right ceiling, U+2309 ISOamsc -->
+<!ENTITY lfloor "⌊"> <!-- left floor = APL downstile,
+ U+230A ISOamsc -->
+<!ENTITY rfloor "⌋"> <!-- right floor, U+230B ISOamsc -->
+<!ENTITY lang "〈"> <!-- left-pointing angle bracket = bra,
+ U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than sign'
+ or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang "〉"> <!-- right-pointing angle bracket = ket,
+ U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than sign'
+ or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz "◊"> <!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades "♠"> <!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs "♣"> <!-- black club suit = shamrock,
+ U+2663 ISOpub -->
+<!ENTITY hearts "♥"> <!-- black heart suit = valentine,
+ U+2665 ISOpub -->
+<!ENTITY diams "♦"> <!-- black diamond suit, U+2666 ISOpub -->
+
+<!-- Special characters for XHTML -->
+
+<!-- Character entity set. Typical invocation:
+ <!ENTITY % HTMLspecial PUBLIC
+ "-//W3C//ENTITIES Special for XHTML//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+ %HTMLspecial;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+ New names (i.e., not in ISO 8879 list) do not clash with any
+ existing ISO 8879 entity names. ISO 10646 character numbers
+ are given for each character, in hex. values are decimal
+ conversions of the ISO 10646 values and refer to the document
+ character set. Names are Unicode names.
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot """> <!-- quotation mark, U+0022 ISOnum -->
+<!ENTITY amp "&#38;"> <!-- ampersand, U+0026 ISOnum -->
+<!ENTITY lt "&#60;"> <!-- less-than sign, U+003C ISOnum -->
+<!ENTITY gt ">"> <!-- greater-than sign, U+003E ISOnum -->
+<!ENTITY apos "'"> <!-- apostrophe = APL quote, U+0027 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig "Œ"> <!-- latin capital ligature OE,
+ U+0152 ISOlat2 -->
+<!ENTITY oelig "œ"> <!-- latin small ligature oe, U+0153 ISOlat2 -->
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron "Š"> <!-- latin capital letter S with caron,
+ U+0160 ISOlat2 -->
+<!ENTITY scaron "š"> <!-- latin small letter s with caron,
+ U+0161 ISOlat2 -->
+<!ENTITY Yuml "Ÿ"> <!-- latin capital letter Y with diaeresis,
+ U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ "ˆ"> <!-- modifier letter circumflex accent,
+ U+02C6 ISOpub -->
+<!ENTITY tilde "˜"> <!-- small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp " "> <!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp " "> <!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp " "> <!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj "‌"> <!-- zero width non-joiner,
+ U+200C NEW RFC 2070 -->
+<!ENTITY zwj "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash "–"> <!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash "—"> <!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo "‘"> <!-- left single quotation mark,
+ U+2018 ISOnum -->
+<!ENTITY rsquo "’"> <!-- right single quotation mark,
+ U+2019 ISOnum -->
+<!ENTITY sbquo "‚"> <!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo "“"> <!-- left double quotation mark,
+ U+201C ISOnum -->
+<!ENTITY rdquo "”"> <!-- right double quotation mark,
+ U+201D ISOnum -->
+<!ENTITY bdquo "„"> <!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger "†"> <!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger "‡"> <!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil "‰"> <!-- per mille sign, U+2030 ISOtech -->
+<!ENTITY lsaquo "‹"> <!-- single left-pointing angle quotation mark,
+ U+2039 ISO proposed -->
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo "›"> <!-- single right-pointing angle quotation mark,
+ U+203A ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+
+<!-- Currency Symbols -->
+<!ENTITY euro "€"> <!-- euro sign, U+20AC NEW -->
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+ <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+ <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+ <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+ <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+ <!-- a language code, as per [RFC3066] -->
+
+<!ENTITY % Character "CDATA">
+ <!-- a single character, as per section 2.2 of [XML] -->
+
+<!ENTITY % Number "CDATA">
+ <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+ <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+ <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+ <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+ <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+ <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+ <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+ <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+ <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+ <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+ <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+ <!-- pixel, percentage, or relative -->
+
+<!ENTITY % Pixels "CDATA">
+ <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+ <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+ Black = #000000 Green = #008000
+ Silver = #C0C0C0 Lime = #00FF00
+ Gray = #808080 Olive = #808000
+ White = #FFFFFF Yellow = #FFFF00
+ Maroon = #800000 Navy = #000080
+ Red = #FF0000 Blue = #0000FF
+ Purple = #800080 Teal = #008080
+ Fuchsia= #FF00FF Aqua = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id ID #IMPLIED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED"
+ >
+
+<!-- internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #IMPLIED"
+ >
+
+<!-- attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+-->
+<!ENTITY % events
+ "onclick %Script; #IMPLIED
+ ondblclick %Script; #IMPLIED
+ onmousedown %Script; #IMPLIED
+ onmouseup %Script; #IMPLIED
+ onmouseover %Script; #IMPLIED
+ onmousemove %Script; #IMPLIED
+ onmouseout %Script; #IMPLIED
+ onkeypress %Script; #IMPLIED
+ onkeydown %Script; #IMPLIED
+ onkeyup %Script; #IMPLIED"
+ >
+
+<!-- attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey %Character; #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED"
+ >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+ align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right|justify) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special.extra
+ "object | applet | img | map | iframe">
+
+<!ENTITY % special.basic
+ "br | span | bdo">
+
+<!ENTITY % special
+ "%special.basic; | %special.extra;">
+
+<!ENTITY % fontstyle.extra "big | small | font | basefont">
+
+<!ENTITY % fontstyle.basic "tt | i | b | u
+ | s | strike ">
+
+<!ENTITY % fontstyle "%fontstyle.basic; | %fontstyle.extra;">
+
+<!ENTITY % phrase.extra "sub | sup">
+<!ENTITY % phrase.basic "em | strong | dfn | code | q |
+ samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % phrase "%phrase.basic; | %phrase.extra;">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc.inline "ins | del | script">
+
+<!-- these can only occur at block level -->
+<!ENTITY % misc "noscript | %misc.inline;">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc.inline;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
+
+<!ENTITY % block
+ "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
+
+<!-- %Flow; mixes block and inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+ "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc.inline;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+ font, or basefont -->
+
+<!ENTITY % pre.content
+ "(#PCDATA | a | %special.basic; | %fontstyle.basic; | %phrase.basic; |
+ %inline.forms; | %misc.inline;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+ "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+ table | br | span | bdo | object | applet | img | map |
+ %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+ %i18n;
+ id ID #IMPLIED
+ xmlns %URI; #FIXED 'http://www.w3.org/1999/xhtml'
+ >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+ title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+ ((title, %head.misc;, (base, %head.misc;)?) |
+ (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+ %i18n;
+ id ID #IMPLIED
+ profile %URI; #IMPLIED
+ >
+
+<!-- The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title
+ %i18n;
+ id ID #IMPLIED
+ >
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+ id ID #IMPLIED
+ href %URI; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+ %i18n;
+ id ID #IMPLIED
+ http-equiv CDATA #IMPLIED
+ name CDATA #IMPLIED
+ content CDATA #REQUIRED
+ scheme CDATA #IMPLIED
+ >
+
+<!--
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+ %attrs;
+ charset %Charset; #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ type %ContentType; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ media %MediaDesc; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+ %i18n;
+ id ID #IMPLIED
+ type %ContentType; #REQUIRED
+ media %MediaDesc; #IMPLIED
+ title %Text; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+ id ID #IMPLIED
+ charset %Charset; #IMPLIED
+ type %ContentType; #REQUIRED
+ language CDATA #IMPLIED
+ src %URI; #IMPLIED
+ defer (defer) #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+ %attrs;
+ >
+
+<!--======================= Frames =======================================-->
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+ %coreattrs;
+ longdesc %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ src %URI; #IMPLIED
+ frameborder (1|0) "1"
+ marginwidth %Pixels; #IMPLIED
+ marginheight %Pixels; #IMPLIED
+ scrolling (yes|no|auto) "auto"
+ align %ImgAlign; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes %Flow;>
+<!ATTLIST noframes
+ %attrs;
+ >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+ %attrs;
+ onload %Script; #IMPLIED
+ onunload %Script; #IMPLIED
+ background %URI; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ text %Color; #IMPLIED
+ link %Color; #IMPLIED
+ vlink %Color; #IMPLIED
+ alink %Color; #IMPLIED
+ >
+
+<!ELEMENT div %Flow;> <!-- generic language/style container -->
+<!ATTLIST div
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Headings =========================================-->
+
+<!--
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+-->
+
+<!ELEMENT h1 %Inline;>
+<!ATTLIST h1
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+ %attrs;
+ %TextAlign;
+ >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+ %attrs;
+ %TextAlign;
+ >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+ %attrs;
+ type %ULStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ >
+
+<!-- Ordered list numbering style
+
+ 1 arabic numbers 1, 2, 3, ...
+ a lower alpha a, b, c, ...
+ A upper alpha A, B, C, ...
+ i lower roman i, ii, iii, ...
+ I upper roman I, II, III, ...
+
+ The style is applied to the sequence number which by default
+ is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+ %attrs;
+ type %OLStyle; #IMPLIED
+ compact (compact) #IMPLIED
+ start %Number; #IMPLIED
+ >
+
+<!-- single column list (DEPRECATED) -->
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- multiple column list (DEPRECATED) -->
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+ %attrs;
+ type %LIStyle; #IMPLIED
+ value %Number; #IMPLIED
+ >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+ %attrs;
+ compact (compact) #IMPLIED
+ >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+ %attrs;
+ >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+ %attrs;
+ >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address (#PCDATA | %inline; | %misc.inline; | p)*>
+<!ATTLIST address
+ %attrs;
+ >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+ %attrs;
+ align (left|center|right) #IMPLIED
+ noshade (noshade) #IMPLIED
+ size %Pixels; #IMPLIED
+ width %Length; #IMPLIED
+ >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding
+ "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+ %attrs;
+ width %Number; #IMPLIED
+ xml:space (preserve) #FIXED 'preserve'
+ >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+ %attrs;
+ >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+ %attrs;
+ cite %URI; #IMPLIED
+ datetime %Datetime; #IMPLIED
+ >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+ %attrs;
+ %focus;
+ charset %Charset; #IMPLIED
+ type %ContentType; #IMPLIED
+ name NMTOKEN #IMPLIED
+ href %URI; #IMPLIED
+ hreflang %LanguageCode; #IMPLIED
+ rel %LinkTypes; #IMPLIED
+ rev %LinkTypes; #IMPLIED
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+ %attrs;
+ >
+
+<!ELEMENT bdo %Inline;> <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+ %coreattrs;
+ %events;
+ lang %LanguageCode; #IMPLIED
+ xml:lang %LanguageCode; #IMPLIED
+ dir (ltr|rtl) #REQUIRED
+ >
+
+<!ELEMENT br EMPTY> <!-- forced line break -->
+<!ATTLIST br
+ %coreattrs;
+ clear (left|all|right|none) "none"
+ >
+
+<!ELEMENT em %Inline;> <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;> <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;> <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;> <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;> <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;> <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;> <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;> <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;> <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;> <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;> <!-- inlined quote -->
+<!ATTLIST q
+ %attrs;
+ cite %URI; #IMPLIED
+ >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;> <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;> <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;> <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;> <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;> <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;> <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;> <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;> <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY> <!-- base font size -->
+<!ATTLIST basefont
+ id ID #IMPLIED
+ size CDATA #REQUIRED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+ %coreattrs;
+ %i18n;
+ size CDATA #IMPLIED
+ color %Color; #IMPLIED
+ face CDATA #IMPLIED
+ >
+
+<!--==================== Object ======================================-->
+<!--
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+ %attrs;
+ declare (declare) #IMPLIED
+ classid %URI; #IMPLIED
+ codebase %URI; #IMPLIED
+ data %URI; #IMPLIED
+ type %ContentType; #IMPLIED
+ codetype %ContentType; #IMPLIED
+ archive %UriList; #IMPLIED
+ standby %Text; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ name NMTOKEN #IMPLIED
+ tabindex %Number; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Pixels; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ id ID #IMPLIED
+ name CDATA #REQUIRED
+ value CDATA #IMPLIED
+ valuetype (data|ref|object) "data"
+ type %ContentType; #IMPLIED
+ >
+
+<!--=================== Java applet ==================================-->
+<!--
+ One of code or object attributes must be present.
+ Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+ %coreattrs;
+ codebase %URI; #IMPLIED
+ archive CDATA #IMPLIED
+ code CDATA #IMPLIED
+ object CDATA #IMPLIED
+ alt %Text; #IMPLIED
+ name NMTOKEN #IMPLIED
+ width %Length; #REQUIRED
+ height %Length; #REQUIRED
+ align %ImgAlign; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!--=================== Images ===========================================-->
+
+<!--
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+ %attrs;
+ src %URI; #REQUIRED
+ alt %Text; #REQUIRED
+ name NMTOKEN #IMPLIED
+ longdesc %URI; #IMPLIED
+ height %Length; #IMPLIED
+ width %Length; #IMPLIED
+ usemap %URI; #IMPLIED
+ ismap (ismap) #IMPLIED
+ align %ImgAlign; #IMPLIED
+ border %Length; #IMPLIED
+ hspace %Pixels; #IMPLIED
+ vspace %Pixels; #IMPLIED
+ >
+
+<!-- usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+ %i18n;
+ %events;
+ id ID #REQUIRED
+ class CDATA #IMPLIED
+ style %StyleSheet; #IMPLIED
+ title %Text; #IMPLIED
+ name CDATA #IMPLIED
+ >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+ %attrs;
+ %focus;
+ shape %Shape; "rect"
+ coords %Coords; #IMPLIED
+ href %URI; #IMPLIED
+ nohref (nohref) #IMPLIED
+ alt %Text; #REQUIRED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;> <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+ %attrs;
+ action %URI; #REQUIRED
+ method (get|post) "get"
+ name NMTOKEN #IMPLIED
+ enctype %ContentType; "application/x-www-form-urlencoded"
+ onsubmit %Script; #IMPLIED
+ onreset %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ accept-charset %Charsets; #IMPLIED
+ target %FrameTarget; #IMPLIED
+ >
+
+<!--
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+ %attrs;
+ for IDREF #IMPLIED
+ accesskey %Character; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ >
+
+<!ENTITY % InputType
+ "(text | password | checkbox |
+ radio | submit | reset |
+ file | hidden | image | button)"
+ >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY> <!-- form control -->
+<!ATTLIST input
+ %attrs;
+ %focus;
+ type %InputType; "text"
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ checked (checked) #IMPLIED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ size CDATA #IMPLIED
+ maxlength %Number; #IMPLIED
+ src %URI; #IMPLIED
+ alt CDATA #IMPLIED
+ usemap %URI; #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ accept %ContentTypes; #IMPLIED
+ align %ImgAlign; #IMPLIED
+ >
+
+<!ELEMENT select (optgroup|option)+> <!-- option selector -->
+<!ATTLIST select
+ %attrs;
+ name CDATA #IMPLIED
+ size %Number; #IMPLIED
+ multiple (multiple) #IMPLIED
+ disabled (disabled) #IMPLIED
+ tabindex %Number; #IMPLIED
+ onfocus %Script; #IMPLIED
+ onblur %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!ELEMENT optgroup (option)+> <!-- option group -->
+<!ATTLIST optgroup
+ %attrs;
+ disabled (disabled) #IMPLIED
+ label %Text; #REQUIRED
+ >
+
+<!ELEMENT option (#PCDATA)> <!-- selectable choice -->
+<!ATTLIST option
+ %attrs;
+ selected (selected) #IMPLIED
+ disabled (disabled) #IMPLIED
+ label %Text; #IMPLIED
+ value CDATA #IMPLIED
+ >
+
+<!ELEMENT textarea (#PCDATA)> <!-- multi-line text field -->
+<!ATTLIST textarea
+ %attrs;
+ %focus;
+ name CDATA #IMPLIED
+ rows %Number; #REQUIRED
+ cols %Number; #REQUIRED
+ disabled (disabled) #IMPLIED
+ readonly (readonly) #IMPLIED
+ onselect %Script; #IMPLIED
+ onchange %Script; #IMPLIED
+ >
+
+<!--
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+ %attrs;
+ >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;> <!-- fieldset label -->
+<!ATTLIST legend
+ %attrs;
+ accesskey %Character; #IMPLIED
+ align %LAlign; #IMPLIED
+ >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+-->
+<!ELEMENT button %button.content;> <!-- push button -->
+<!ATTLIST button
+ %attrs;
+ %focus;
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED
+ type (button|submit|reset) "submit"
+ disabled (disabled) #IMPLIED
+ >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+ %coreattrs;
+ %i18n;
+ prompt %Text; #IMPLIED
+ >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+-->
+<!ENTITY % cellhalign
+ "align (left|center|right|justify|char) #IMPLIED
+ char %Character; #IMPLIED
+ charoff %Length; #IMPLIED"
+ >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+ "valign (top|middle|bottom|baseline) #IMPLIED"
+ >
+
+<!ELEMENT table
+ (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption %Inline;>
+<!ELEMENT thead (tr)+>
+<!ELEMENT tfoot (tr)+>
+<!ELEMENT tbody (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col EMPTY>
+<!ELEMENT tr (th|td)+>
+<!ELEMENT th %Flow;>
+<!ELEMENT td %Flow;>
+
+<!ATTLIST table
+ %attrs;
+ summary %Text; #IMPLIED
+ width %Length; #IMPLIED
+ border %Pixels; #IMPLIED
+ frame %TFrame; #IMPLIED
+ rules %TRules; #IMPLIED
+ cellspacing %Length; #IMPLIED
+ cellpadding %Length; #IMPLIED
+ align %TAlign; #IMPLIED
+ bgcolor %Color; #IMPLIED
+ >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+ %attrs;
+ align %CAlign; #IMPLIED
+ >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+ %attrs;
+ span %Number; "1"
+ width %MultiLength; #IMPLIED
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!--
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+-->
+<!ATTLIST thead
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tfoot
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tbody
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ >
+
+<!ATTLIST tr
+ %attrs;
+ %cellhalign;
+ %cellvalign;
+ bgcolor %Color; #IMPLIED
+ >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Length; #IMPLIED
+ height %Length; #IMPLIED
+ >
+
+<!ATTLIST td
+ %attrs;
+ abbr %Text; #IMPLIED
+ axis CDATA #IMPLIED
+ headers IDREFS #IMPLIED
+ scope %Scope; #IMPLIED
+ rowspan %Number; "1"
+ colspan %Number; "1"
+ %cellhalign;
+ %cellvalign;
+ nowrap (nowrap) #IMPLIED
+ bgcolor %Color; #IMPLIED
+ width %Length; #IMPLIED
+ height %Length; #IMPLIED
+ >
+
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
+ <xsl:output method="xml" encoding="utf-8" indent="yes"/>
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/>
+ <xsl:output method="xml" encoding="utf-8" indent="yes"/>
+
+ <xsl:param name="use.id.as.filename" select="1" />
+ <xsl:param name="html.stylesheet">docbook.css</xsl:param>
+ <xsl:param name="table.borders.with.css" select="1" />
+ <!--
+ <xsl:param name="header.rule" select="0" />
+ <xsl:param name="footer.rule" select="0" />
+ -->
+
+ <!-- more quiet output of author information -->
+
+ <xsl:template match="authorgroup" mode="titlepage.mode">
+ <ul class="authorgroup">
+ <xsl:apply-templates mode="matita.manual.mode" />
+ </ul>
+ </xsl:template>
+ <xsl:template match="author" mode="matita.manual.mode">
+ <li class="author">
+ <xsl:value-of select="firstname" />
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="surname" />
+ <xsl:text> <</xsl:text>
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:text>mailto:</xsl:text>
+ <xsl:value-of select="affiliation/address/email" />
+ </xsl:attribute>
+ <xsl:value-of select="affiliation/address/email" />
+ </xsl:element>
+ <xsl:text>></xsl:text>
+ </li>
+ </xsl:template>
+
+ <!-- only print the latest revision instead of all of them -->
+ <!-- XXX ZACK: right now it just assumes that only one revision does exist -->
+
+ <xsl:template match="revhistory" mode="titlepage.mode">
+ <div class="revhistory">
+ <xsl:apply-templates mode="matita.manual.mode" />
+ </div>
+ </xsl:template>
+ <xsl:template match="revision" mode="matita.manual.mode">
+ <span class="revision">
+ <xsl:text>Revision: </xsl:text>
+ <span class="revnumber">
+ <xsl:value-of select="revnumber" />
+ </span>
+ <xsl:text>, </xsl:text>
+ <span class="date">
+ <xsl:value-of select="date" />
+ </span>
+ </span>
+ </xsl:template>
+
+ <!-- Matita logo on the top left corner -->
+
+ <xsl:template name="user.header.navigation">
+ <a href="../../../">
+ <div class="matita_logo">
+ <img src="figures/matita.png" alt="Tiny Matita logo" />
+ <span>Matita Home</span>
+ </div>
+ </a>
+ </xsl:template>
+
+</xsl:stylesheet>
+
--- /dev/null
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output
+ method="xml"
+ indent="yes"
+ omit-xml-declaration="yes"
+ />
+
+ <xsl:param name="declarative" value=""/>
+
+ <xsl:template match="/">
+ <table frame="topbot" rowsep="0" colsep="0" role="grammar">
+ <title>tactics</title>
+ <tgroup cols="3">
+ <tbody>
+ <xsl:apply-templates select="//chapter[@id=concat('sec_',$declarative,'tactics')]//varlistentry[@role='tactic.synopsis']">
+ <xsl:sort select="ancestor::sect1/title" />
+ </xsl:apply-templates>
+ </tbody>
+ </tgroup>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="varlistentry">
+
+ <xsl:variable name="tactic">
+ <xsl:value-of select="ancestor::sect1/title" />
+ </xsl:variable>
+
+ <row>
+ <entry>
+ <xsl:choose>
+ <xsl:when test="position()=1">
+ <xsl:attribute name="id">grammar.<xsl:value-of select="$declarative"/>tactic</xsl:attribute>
+ <xsl:text disable-output-escaping='yes'>&tactic;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </entry>
+ <entry>
+ <xsl:choose>
+ <xsl:when test="position()=1">
+ <xsl:text>::=</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>|</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </entry>
+ <entry>
+ <xsl:for-each select="listitem/para/* | listitem/para/child::text()">
+ <xsl:choose>
+
+ <xsl:when test="string(.) = $tactic">
+ <xsl:element name="link">
+ <xsl:attribute name="linkend">
+ <xsl:text>tac_</xsl:text>
+ <xsl:value-of select="$tactic" />
+ </xsl:attribute>
+ <xsl:copy-of select="." />
+ </xsl:element>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:copy-of select="." />
+ </xsl:otherwise>
+
+ </xsl:choose>
+ </xsl:for-each>
+ </entry>
+ </row>
+
+ </xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="389.76376"
+ height="407.48032"
+ id="svg5594"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="igft-CIC-universes.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs5596">
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path3231"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective5602" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.26"
+ inkscape:cx="140.40282"
+ inkscape:cy="191.23857"
+ inkscape:document-units="px"
+ inkscape:current-layer="g3726"
+ showgrid="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="747"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ units="cm"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata5599">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-188.07341,-626.63597)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="488.6709"
+ y="860.62408"
+ id="text5679"><tspan
+ sodipodi:role="line"
+ id="tspan5681"
+ x="488.6709"
+ y="860.62408">Type[0]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5683"
+ width="80.574745"
+ height="33.572811"
+ x="470.01935"
+ y="839.73438" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="489.41693"
+ y="769.97754"
+ id="text5685"><tspan
+ sodipodi:role="line"
+ id="tspan5687"
+ x="489.41693"
+ y="769.97754">Type[1]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5689"
+ width="80.574745"
+ height="33.572811"
+ x="470.76538"
+ y="749.08783" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="488.67093"
+ y="676.71973"
+ id="text5697"><tspan
+ sodipodi:role="line"
+ id="tspan5699"
+ x="488.67093"
+ y="676.71973">Type[2]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5701"
+ width="80.574745"
+ height="33.572811"
+ x="470.01938"
+ y="655.83002" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="252.05559"
+ y="858.94543"
+ id="text5703"><tspan
+ sodipodi:role="line"
+ id="tspan5705"
+ x="252.05559"
+ y="858.94543">CProp[0]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5707"
+ width="80.574745"
+ height="33.572811"
+ x="237.6209"
+ y="838.05573" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="251.5968"
+ y="768.29889"
+ id="text5709"><tspan
+ sodipodi:role="line"
+ id="tspan5711"
+ x="251.5968"
+ y="768.29889">CProp[1]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5713"
+ width="80.574745"
+ height="33.572811"
+ x="238.36693"
+ y="747.40918" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="250.85083"
+ y="675.04108"
+ id="text5715"><tspan
+ sodipodi:role="line"
+ id="tspan5717"
+ x="250.85083"
+ y="675.04108">CProp[2]</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.29999995;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5719"
+ width="80.574745"
+ height="33.572811"
+ x="237.62096"
+ y="654.15137" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 508.81459,838.98832 L 508.81459,783.7797"
+ id="path5721" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01706386px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 508.93607,748.8504 L 508.93607,691.61697"
+ id="path6749" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 318.64978,855.99465 L 469.92296,768.14832"
+ id="path6751"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 318.80446,763.26458 L 470.07764,675.41825"
+ id="path6753"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2,2;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 531.54598,838.44703 L 531.54598,783.23841"
+ id="path6755" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2,2;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 532.06404,748.82285 L 532.06404,693.61423"
+ id="path6757" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2,2;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 276.66103,836.89285 L 276.66103,781.68423"
+ id="path6759" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02127695;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2.0425539,2.0425539;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 277.69711,747.25802 L 277.69711,689.51835"
+ id="path6761" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02127695;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2.0425539,2.0425539;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 319.87901,670.05275 L 469.31509,670.05275"
+ id="path6765"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02127695;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2.0425539,2.0425539;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 320.13803,763.30334 L 469.57411,763.30334"
+ id="path6767"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02127695;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2.0425539,2.0425539;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 318.58386,856.03587 L 468.01994,856.03587"
+ id="path6769"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#828282;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6771"
+ width="183.91089"
+ height="258.51135"
+ x="188.57341"
+ y="633.77063" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1.7, 5.1;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 277.24765,650.76688 L 277.24765,627.48597"
+ id="path2417"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1.7, 5.1;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 511.56739,651.25649 L 511.56739,627.97558"
+ id="path3710"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g3726"
+ transform="translate(-196.38554,-21.460843)">
+ <g
+ id="g3416">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 448.97379,1004.9376 L 504.18241,1004.9376"
+ id="path6777" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:2,2;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 448.9738,1026.178 L 504.18242,1026.178"
+ id="path6779" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="510.66592"
+ y="1007.5103"
+ id="text6781"><tspan
+ sodipodi:role="line"
+ id="tspan6783"
+ x="510.66592"
+ y="1007.5103">Has type</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="510.66592"
+ y="1029.7869"
+ id="text6785"><tspan
+ sodipodi:role="line"
+ x="510.66592"
+ y="1029.7869"
+ id="tspan6789">Is included</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#828282;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:6, 6;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3712"
+ width="102.58569"
+ height="28.993309"
+ x="634.06982"
+ y="1000.0105" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="650.32379"
+ y="1016.7295"
+ id="text3714"><tspan
+ sodipodi:role="line"
+ id="tspan3716"
+ x="650.32379"
+ y="1016.7295">Mirror</tspan></text>
+ <rect
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3718"
+ width="328.91565"
+ height="19.277109"
+ x="426.02521"
+ y="969.02521" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3720"
+ width="333.73495"
+ height="71.084351"
+ x="236.14458"
+ y="339.97961"
+ transform="translate(188.07341,626.63597)" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="430.2421"
+ y="982.2782"
+ id="text3722"><tspan
+ sodipodi:role="line"
+ id="tspan3724"
+ x="430.2421"
+ y="982.2782">Legenda</tspan></text>
+ </g>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 42.344378,282.75069 L 380.72289,281.54587"
+ id="path3741"
+ transform="translate(188.07341,626.63597)"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 219.98181,645.12981 L 218.77699,891.84167"
+ id="path5034"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="719.58075"
+ y="-205.23161"
+ id="text5036"
+ transform="matrix(0,1,-1,0,0,0)"><tspan
+ sodipodi:role="line"
+ id="tspan5038"
+ x="719.58075"
+ y="-205.23161">Impredicativity</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="343.28174"
+ y="920.44342"
+ id="text5040"><tspan
+ sodipodi:role="line"
+ id="tspan5042"
+ x="343.28174"
+ y="920.44342">Axiom of Choice</tspan></text>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="600"
+ height="445"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="igft-minimality-CIC.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path3296"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="StopL"
+ style="overflow:visible">
+ <path
+ id="path3425"
+ d="M 0,5.65 L 0,-5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="CurvyCross"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="CurvyCross"
+ style="overflow:visible">
+ <g
+ id="g3446"
+ transform="scale(0.6,0.6)">
+ <path
+ id="path3448"
+ d="M 4.625493,-5.0456926 C 1.865493,-5.0456926 -0.37450702,-2.8056926 -0.37450702,-0.04569258 C -0.37450702,2.7143074 1.865493,4.9543074 4.625493,4.9543074"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none" />
+ <path
+ id="path3450"
+ d="M -5.4129913,-5.0456926 C -2.6529913,-5.0456926 -0.41299131,-2.8056926 -0.41299131,-0.04569258 C -0.41299131,2.7143074 -2.6529913,4.9543074 -5.4129913,4.9543074"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none" />
+ </g>
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path3255"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(0.8,0,0,0.8,10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path3231"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mend"
+ style="overflow:visible">
+ <path
+ id="path3219"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.9"
+ inkscape:cx="319.47326"
+ inkscape:cy="206.79135"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4115"
+ showgrid="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="747"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:showpageshadow="true"
+ units="cm" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-48.720708,-561.57164)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="366.57452"
+ y="796.92438"
+ id="text3171"><tspan
+ sodipodi:role="line"
+ x="366.57452"
+ y="796.92438"
+ id="tspan6187">CProp impredicative</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="115.37615"
+ y="794.98383"
+ id="text3181"><tspan
+ sodipodi:role="line"
+ x="115.37615"
+ y="794.98383"
+ id="tspan3185">CProp = Type</tspan><tspan
+ sodipodi:role="line"
+ x="115.37615"
+ y="809.98383"
+ id="tspan3250" /></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 228.9477,818.64478 L 187.36847,761.88289"
+ id="path5558"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g3234"
+ transform="translate(1.1070111,-5.1660517)">
+ <text
+ id="text2383"
+ y="839.26465"
+ x="215.35783"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ id="tspan5562"
+ y="839.26465"
+ x="215.35783"
+ sodipodi:role="line"> Matita's CIC</tspan><tspan
+ id="tspan2408"
+ style="font-size:12px"
+ y="854.26465"
+ x="215.35783"
+ sodipodi:role="line" /><tspan
+ style="font-size:10px"
+ id="tspan5564"
+ y="867.27118"
+ x="215.35783"
+ sodipodi:role="line">CProp,Type predicative</tspan><tspan
+ id="tspan5572"
+ style="font-size:10px"
+ y="879.77118"
+ x="215.35783"
+ sodipodi:role="line">No elim CProp toward Type</tspan><tspan
+ id="tspan5566"
+ y="892.27118"
+ x="215.35783"
+ sodipodi:role="line" /></text>
+ <rect
+ transform="translate(100.2483,683.58839)"
+ y="140.10075"
+ x="105.10638"
+ height="64.371376"
+ width="149.86459"
+ id="rect2406"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="translate(100.2483,683.58839)"
+ y="142.61526"
+ x="107.6209"
+ height="19.110252"
+ width="144.83559"
+ id="rect3190"
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g6154"
+ transform="translate(-125.83354,13.837023)">
+ <text
+ id="text3192"
+ y="696.07294"
+ x="497.18042"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ id="tspan3194"
+ y="696.07294"
+ x="497.18042"
+ sodipodi:role="line">Coq's CIC<tspan
+ id="tspan6152"
+ style="font-size:10px"> (work in Prop)</tspan></tspan><tspan
+ id="tspan3196"
+ style="font-size:12px"
+ y="711.07294"
+ x="497.18042"
+ sodipodi:role="line" /><tspan
+ style="font-size:10px"
+ id="tspan3198"
+ y="724.07947"
+ x="497.18042"
+ sodipodi:role="line">Prop impredicative</tspan><tspan
+ id="tspan3200"
+ style="font-size:10px"
+ y="736.57947"
+ x="497.18042"
+ sodipodi:role="line">No elim Prop toward Type</tspan><tspan
+ id="tspan3202"
+ y="749.07947"
+ x="497.18042"
+ sodipodi:role="line" /></text>
+ <rect
+ y="680.49744"
+ x="489.75116"
+ height="64.371376"
+ width="149.86459"
+ id="rect3204"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="683.77209"
+ x="492.26569"
+ height="19.110252"
+ width="144.83559"
+ id="rect3206"
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3224"
+ transform="translate(-432.92324,-78.89799)">
+ <rect
+ y="774.75275"
+ x="485.95056"
+ height="64.371376"
+ width="149.86459"
+ id="rect3220"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="777.26715"
+ x="487.70496"
+ height="19.110252"
+ width="144.83559"
+ id="rect3222"
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ id="text3208"
+ y="790.32825"
+ x="489.87271"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ id="tspan3210"
+ y="790.32825"
+ x="489.87271"
+ sodipodi:role="line">Coq's CIC <tspan
+ style="font-size:10px"
+ id="tspan6150">(work in Type)</tspan></tspan><tspan
+ id="tspan3212"
+ style="font-size:12px"
+ y="805.32825"
+ x="489.87271"
+ sodipodi:role="line" /><tspan
+ style="font-size:10px"
+ id="tspan3214"
+ y="818.33478"
+ x="489.87271"
+ sodipodi:role="line">CProp=Type predicative</tspan><tspan
+ style="font-size:10px"
+ y="830.83478"
+ x="489.87271"
+ sodipodi:role="line"
+ id="tspan3244">Martin Löf Axiom of Choice</tspan><tspan
+ id="tspan3218"
+ y="843.33478"
+ x="489.87271"
+ sodipodi:role="line" /></text>
+ </g>
+ <g
+ id="g6165"
+ transform="translate(-166.99281,-57.42367)">
+ <g
+ id="g6191"
+ transform="translate(38.006151,-48.647873)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="497.47394"
+ y="696.07294"
+ id="text6167"><tspan
+ sodipodi:role="line"
+ x="497.47394"
+ y="696.07294"
+ id="tspan6169"
+ style="font-size:12px"> CIC + EM</tspan><tspan
+ sodipodi:role="line"
+ x="497.47394"
+ y="711.07294"
+ style="font-size:12px"
+ id="tspan6173" /><tspan
+ sodipodi:role="line"
+ x="497.47394"
+ y="724.07947"
+ id="tspan6175"
+ style="font-size:10px">Prop impredicative with EM</tspan><tspan
+ sodipodi:role="line"
+ x="497.47394"
+ y="736.57947"
+ style="font-size:10px"
+ id="tspan6177">No elim Prop toward Type</tspan><tspan
+ sodipodi:role="line"
+ x="497.47394"
+ y="749.07947"
+ id="tspan6179" /></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6181"
+ width="149.86459"
+ height="64.371376"
+ x="489.75116"
+ y="680.49744" />
+ <rect
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6183"
+ width="144.83559"
+ height="19.110252"
+ x="492.26569"
+ y="683.77209" />
+ </g>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 335.0574,817.80062 L 376.63663,761.03873"
+ id="path6201"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 432.71038,693.19009 L 432.75682,640.13071"
+ id="path6203"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="440.85757"
+ y="668.56934"
+ id="text6205"><tspan
+ sodipodi:role="line"
+ x="440.85757"
+ y="668.56934"
+ id="tspan6207">Excluded Middle</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="206.57732"
+ y="603.78223"
+ id="text8395"><tspan
+ sodipodi:role="line"
+ x="206.57732"
+ y="603.78223"
+ id="tspan8397">Where's the content?</tspan><tspan
+ sodipodi:role="line"
+ x="206.57732"
+ y="618.78223"
+ id="tspan8399" /></text>
+ <g
+ id="g4089">
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6211"
+ d="M 203.66203,726.64316 L 361.81923,726.89995"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow2Lstart);marker-mid:none;marker-end:url(#Arrow2Lend);stroke-opacity:1" />
+ <g
+ transform="translate(134.31734,70.443009)"
+ id="g8379">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 80.442804,87.328345 L 102.58303,67.033143"
+ id="path8375"
+ transform="translate(51.420312,579.09195)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 80.073801,66.295135 L 103.32103,88.066353"
+ id="path8377"
+ transform="translate(51.420312,579.09195)" />
+ </g>
+ <text
+ id="text8401"
+ y="747.60999"
+ x="221.84404"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan8407"
+ y="747.60999"
+ x="221.84404"
+ sodipodi:role="line">CProp Impredicative</tspan><tspan
+ id="tspan8405"
+ y="762.60999"
+ x="221.84404"
+ sodipodi:role="line" /></text>
+ <text
+ id="text8411"
+ y="713.23657"
+ x="228.09178"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ id="tspan8413"
+ y="713.23657"
+ x="228.09178"
+ sodipodi:role="line">Girard's paradox</tspan><tspan
+ id="tspan8415"
+ y="728.23657"
+ x="228.09178"
+ sodipodi:role="line" /></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ d="M 359.90647,612.92159 C 359.90647,612.92159 212.45038,602.47727 189.20314,691.03816"
+ id="path8417"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g8429"
+ transform="translate(131.18394,-36.356245)">
+ <path
+ transform="translate(51.420312,579.09195)"
+ id="path8431"
+ d="M 80.442804,87.328345 L 102.58303,67.033143"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="translate(51.420312,579.09195)"
+ id="path8433"
+ d="M 80.073801,66.295135 L 103.32103,88.066353"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="240.21919"
+ y="641.33929"
+ id="text8435"><tspan
+ sodipodi:role="line"
+ x="240.21919"
+ y="641.33929"
+ id="tspan8437">Axiom of Choice</tspan><tspan
+ sodipodi:role="line"
+ x="240.21919"
+ y="656.33929"
+ id="tspan8439" /></text>
+ <g
+ id="g4109"
+ transform="translate(2.9566177,-24.392087)">
+ <text
+ id="text4101"
+ y="670.33813"
+ x="58.440556"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="670.33813"
+ x="58.440556"
+ id="tspan4103"
+ sodipodi:role="line">Bishop</tspan></text>
+ <rect
+ ry="10.717734"
+ transform="translate(52.527322,573.92589)"
+ y="81.629173"
+ x="2.2174623"
+ height="21.435469"
+ width="52.479942"
+ id="rect4105"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="10.717734"
+ y="652.59845"
+ x="46.61409"
+ height="26.609549"
+ width="66.523872"
+ id="rect4107"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4115"
+ transform="translate(25.870392,-51.74079)">
+ <g
+ id="g4125"
+ transform="translate(504.84226,78.35034)">
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="62.136326"
+ y="670.33813"
+ id="text4117"><tspan
+ sodipodi:role="line"
+ id="tspan4119"
+ x="62.136326"
+ y="670.33813">Topos</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4121"
+ width="52.479942"
+ height="21.435469"
+ x="2.2174623"
+ y="81.629173"
+ transform="translate(52.527322,573.92589)"
+ ry="10.717734" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4123"
+ width="66.523872"
+ height="26.609549"
+ x="46.61409"
+ y="652.59845"
+ ry="10.717734" />
+ </g>
+ <g
+ id="g4022"
+ transform="translate(-94.60221,-17.73018)">
+ <g
+ transform="translate(589.84498,-16.261391)"
+ id="g4131">
+ <text
+ id="text4133"
+ y="670.33813"
+ x="65.8321"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ y="670.33813"
+ x="65.8321"
+ id="tspan4135"
+ sodipodi:role="line">ZFC</tspan></text>
+ <rect
+ ry="10.717734"
+ transform="translate(52.527322,573.92589)"
+ y="81.629173"
+ x="2.2174623"
+ height="21.435469"
+ width="52.479942"
+ id="rect4137"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="10.717734"
+ y="652.59845"
+ x="46.61409"
+ height="26.609549"
+ width="66.523872"
+ id="rect4139"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ <g
+ transform="translate(-285.87827,-56.11513)"
+ id="g3416">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 381.23522,752.34128 L 372.13743,713.90527"
+ id="path4016"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 801.07477,775.99422 L 862.93578,756.03706"
+ id="path4018"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 798.11816,659.94701 L 852.58763,642.94646"
+ id="path4020"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g4046"
+ transform="translate(48.888889,-4.4444444)">
+ <path
+ id="path6777"
+ d="M 448.97379,1004.9376 L 504.18241,1004.9376"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-opacity:1"
+ transform="translate(-285.87827,-56.11513)" />
+ <text
+ id="text6781"
+ y="1008.9886"
+ x="595.66864"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ transform="translate(-285.87827,-56.11513)"><tspan
+ y="1008.9886"
+ x="595.66864"
+ id="tspan6783"
+ sodipodi:role="line">becomes</tspan></text>
+ <rect
+ y="969.02521"
+ x="426.02521"
+ height="19.277109"
+ width="328.91565"
+ id="rect3718"
+ style="opacity:0.26612902;fill:#a1a1a1;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="translate(-285.87827,-56.11513)" />
+ <rect
+ transform="translate(-97.804862,570.52084)"
+ y="339.97961"
+ x="236.14458"
+ height="91.780663"
+ width="333.73492"
+ id="rect3720"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ id="text3722"
+ y="982.2782"
+ x="430.2421"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ transform="translate(-285.87827,-56.11513)"><tspan
+ y="982.2782"
+ x="430.2421"
+ id="tspan3724"
+ sodipodi:role="line">Legenda</tspan></text>
+ <path
+ id="path3455"
+ d="M 447.01995,1036.9156 L 502.22857,1036.9156"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ transform="translate(-285.87827,-56.11513)" />
+ <text
+ id="text4008"
+ y="1039.1542"
+ x="594.7403"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ transform="translate(-285.87827,-56.11513)"><tspan
+ y="1039.1542"
+ x="594.7403"
+ id="tspan4010"
+ sodipodi:role="line">good to formalise X</tspan></text>
+ <text
+ id="text4012"
+ y="1039.8546"
+ x="531.95312"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"
+ transform="translate(-285.87827,-56.11513)"><tspan
+ y="1039.8546"
+ x="531.95312"
+ id="tspan4014"
+ sodipodi:role="line">X</tspan></text>
+ <g
+ id="g4029">
+ <g
+ id="g3445"
+ transform="translate(171.37292,313.40134)">
+ <rect
+ ry="10.717734"
+ transform="translate(52.527322,573.92589)"
+ y="81.629173"
+ x="2.2174623"
+ height="21.435469"
+ width="52.479942"
+ id="rect3451"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="10.717734"
+ y="652.59845"
+ x="46.61409"
+ height="26.609549"
+ width="66.523872"
+ id="rect3453"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.70000005;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <style type="text/css">
+pre, code {
+ font-family: monospace;
+}
+
+p code, li code {
+ font-size: 130%;
+ border-style: dashed;
+ border-width: 1px;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ padding-left: 0.3em;
+ padding-right: 0.3em;
+ line-height: 1.8em;
+ border-color: grey;
+}
+
+pre {
+ font-size: 120%;
+ margin-right: 5em;
+ margin-left: 2em;
+}
+
+img, .img {
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+}
+
+date {
+ font-size:60%;
+ text-align:right;
+ width: 100%;
+ display:block;
+}
+
+body {
+ margin-right: 3cm;
+ margin-left: 3cm;
+}
+
+
+p { text-align: justify; }
+ </style>
+ <script type="text/javascript" src="sh_main.js"></script>
+ <script type="text/javascript" src="sh_grafite.js"></script>
+ <link type="text/css" rel="stylesheet" href="sh_gedit.css">
+ <script type="text/javascript">
+ function syntaxon(){
+ var pres=document.getElementsByTagName("pre")
+ for (i=0; i < pres.length; i++) {
+ pres[i].className="sh_grafite";
+ }
+ sh_highlightDocument();
+ }
+ </script>
+ </head>
+ <body onload="syntaxon();">
+<h1>Inductively generated formal topologies in Matita</h1>
+
+<p>This is a not so short introduction to <a href="http://matita.cs.unibo.it">Matita</a>, based on
+the formalization of the paper</p>
+
+<blockquote>
+ <p>Between formal topology and game theory: an
+explicit solution for the conditions for an
+inductive generation of formal topologies</p>
+</blockquote>
+
+<p>by Stefano Berardi and Silvio Valentini. </p>
+
+<p>The tutorial and the formalization are by Enrico Tassi.</p>
+
+<p>The reader should be familiar with inductively generated
+formal topologies and have some basic knowledge of type theory and λ-calculus. </p>
+
+<p>A considerable part of this tutorial is devoted to explain how to define
+notations that resemble the ones used in the original paper. We believe
+this is an important part of every formalization, not only from the aesthetic
+point of view, but also from the practical point of view. Being
+consistent allows to follow the paper in a pedantic way, and hopefully
+to make the formalization (at least the definitions and proved
+statements) readable to the author of the paper. </p>
+
+<p>The formalization uses the "new generation" version of Matita
+(that will be named 1.x when finally released).
+Last stable release of the "old" system is named 0.5.7; the ng system
+is coexisting with the old one in all development release
+(named "nightly builds" in the download page of Matita)
+with a version strictly greater than 0.5.7.</p>
+
+<p>To read this tutorial in HTML format, you need a decent browser
+equipped with a unicode capable font. Use the PDF format if some
+symbols are not displayed correctly.</p>
+
+<h2>Orienteering</h2>
+
+<p>The graphical interface of Matita is composed of three windows:
+the script window, on the left, is where you type; the sequent
+window on the top right is where the system shows you the ongoing proof;
+the error window, on the bottom right, is where the system complains.
+On the top of the script window five buttons drive the processing of
+the proof script. From left to right they request the system to:</p>
+
+<ul>
+<li>go back to the beginning of the script</li>
+<li>go back one step</li>
+<li>go to the current cursor position</li>
+<li>advance one step</li>
+<li>advance to the end of the script</li>
+</ul>
+
+<p>When the system processes a command, it locks the part of the script
+corresponding to the command, such that you cannot edit it anymore
+(without going back). Locked parts are coloured in blue.</p>
+
+<p>The sequent window is hyper textual, i.e. you can click on symbols
+to jump to their definition, or switch between different notations
+for the same expression (for example, equality has two notations,
+one of them makes the type of the arguments explicit). </p>
+
+<p>Everywhere in the script you can use the <code>ncheck (term).</code> command to
+ask for the type a given term. If you do that in the middle of a proof,
+the term is assumed to live in the current proof context (i.e. can use
+variables introduced so far).</p>
+
+<p>To ease the typing of mathematical symbols, the script window
+implements two unusual input facilities:</p>
+
+<ul>
+<li><p>some TeX symbols can be typed using their TeX names, and are
+automatically converted to UTF-8 characters. For a list of
+the supported TeX names, see the menu: View ▹ TeX/UTF-8 Table.
+Moreover some ASCII-art is understood as well, like <code>=></code> and <code>-></code>
+to mean double or single arrows.
+Here we recall some of these "shortcuts":</p>
+
+<ul>
+<li>∀ can be typed with <code>\forall</code></li>
+<li>λ can be typed with <code>\lambda</code></li>
+<li>≝ can be typed with <code>\def</code> or <code>:=</code></li>
+<li>→ can be typed with <code>\to</code> or <code>-></code></li>
+</ul></li>
+<li><p>some symbols have variants, like the ≤ relation and ≼, ≰, ⋠.
+The user can cycle between variants typing one of them and then
+pressing ALT-L. Note that also letters do have variants, for
+example W has Ω, 𝕎 and 𝐖, L has Λ, 𝕃, and 𝐋, F has Φ, …
+Variants are listed in the aforementioned TeX/UTF-8 table. </p></li>
+</ul>
+
+<p>The syntax of terms (and types) is the one of the λ-calculus CIC
+on which Matita is based. The main syntactical difference w.r.t.
+the usual mathematical notation is the function application, written
+<code>(f x y)</code> in place of <code>f(x,y)</code>. </p>
+
+<p>Pressing <code>F1</code> opens the Matita manual.</p>
+
+<h2>CIC (as <a href="http://www.cs.unibo.it/~tassi/smallcc.pdf">implemented in Matita</a>) in a nutshell</h2>
+
+<p>CIC is a full and functional Pure Type System (all products do exist,
+and their sort is is determined by the target) with an impredicative sort
+Prop and a predicative sort Type. It features both dependent types and
+polymorphism like the <a href="http://www.inria.fr/rrrt/rr-0530.html">Calculus of Constructions</a>. Proofs and terms share
+the same syntax, and they can occur in types. </p>
+
+<p>The environment used for in the typing judgement can be populated with
+well typed definitions or theorems, (co)inductive types validating positivity
+conditions and recursive functions provably total by simple syntactical
+analysis (recursive calls are allowed only on structurally smaller subterms).
+Co-recursive
+functions can be defined as well, and must satisfy the dual condition, i.e.
+performing the recursive call only after having generated a constructor (a piece
+of output).</p>
+
+<p>The CIC λ-calculus is equipped with a pattern matching construct (match) on inductive
+types defined in the environment. This construct, together with the possibility to
+definable total recursive functions, allows to define eliminators (or constructors)
+for (co)inductive types. </p>
+
+<p>Types are compare up to conversion. Since types may depend on terms, conversion
+involves β-reduction, δ-reduction (definition unfolding), ζ-reduction (local
+definition unfolding), ι-reduction (pattern matching simplification),
+μ-reduction (recursive function computation) and ν-reduction (co-fixpoint
+computation).</p>
+
+<p>Since we are going to formalize constructive and predicative mathematics
+in an intensional type theory like CIC, we try to establish some terminology.
+Type is the sort of sets equipped with the <code>Id</code> equality (i.e. an intensional,
+not quotiented set). </p>
+
+<p>We write <code>Type[i]</code> to mention a Type in the predicative hierarchy
+of types. To ease the comprehension we will use <code>Type[0]</code> for sets,
+and <code>Type[1]</code> for classes. The index <code>i</code> is just a label: constraints among
+universes are declared by the user. The standard library defines</p>
+
+<blockquote>
+ <p>Type[0] < Type[1] < Type[2]</p>
+</blockquote>
+
+<p>Matita implements a variant of CIC in which constructive and predicative proposition
+are distinguished from predicative data types.</p>
+
+<p><object class="img" data="igft-CIC-universes.svg" type="image/svg+xml" width="400px"/></p>
+
+<p>For every <code>Type[i]</code> there is a corresponding level of predicative
+propositions <code>CProp[i]</code> (the C initial is due to historical reasons, and
+stands for constructive).
+A predicative proposition cannot be eliminated toward
+<code>Type[j]</code> unless it holds no computational content (i.e. it is an inductive proposition
+with 0 or 1 constructors with propositional arguments, like <code>Id</code> and <code>And</code>
+but not like <code>Or</code>). </p>
+
+<p>The distinction between predicative propositions and predicative data types
+is a peculiarity of Matita (for example in CIC as implemented by Coq they are the
+same). The additional restriction of not allowing the elimination of a CProp
+toward a Type makes the theory of Matita minimal in the following sense: </p>
+
+<p><object class="img" data="igft-minimality-CIC.svg" type="image/svg+xml" width="600px"/></p>
+
+<p>Theorems proved in CIC as implemented in Matita can be reused in a classical
+and impredicative framework (i.e. forcing Matita to collapse the hierarchy of
+constructive propositions and assuming the excluded middle on them).
+Alternatively, one can decide to collapse predicative propositions and
+predicative data types recovering the Axiom of Choice in the sense of Martin Löf
+(i.e. ∃ really holds a witness and can be eliminated to inhabit a type).</p>
+
+<p>This implementation of CIC is the result of the collaboration with Maietti M.,
+Sambin G. and Valentini S. of the University of Padua.</p>
+
+<h2>Formalization choices</h2>
+
+<p>There are many different ways of formalizing the same piece of mathematics
+in CIC, depending on what our interests are. There is usually a trade-off
+between the possibility of reuse the formalization we did and its complexity.</p>
+
+<p>In this work, our decisions mainly regarded the following two areas</p>
+
+<ul>
+<li>Axiom of Choice: controlled use or not</li>
+<li>Equality: Id or not</li>
+</ul>
+
+<h3>Axiom of Choice</h3>
+
+<p>In this paper it is clear that the author is interested in using the Axiom
+of Choice, thus choosing to identify ∃ and Σ (i.e. working in the
+leftmost box of the graph "Coq's CIC (work in CProp)") would be a safe decision
+(that is, the author of the paper would not complain we formalized something
+different from what he had in mind).</p>
+
+<p>Anyway, we may benefit from the minimality of CIC as implemented in Matita,
+"asking" the type system to ensure we do no use the Axiom of Choice elsewhere
+in the proof (by mistake or as a shortcut). If we identify ∃ and Σ from the
+very beginning, the system will not complain if we use the Axiom of Choice at all.
+Moreover, the elimination of an inductive type (like ∃) is a so common operation
+that the syntax chosen for the elimination command is very compact and non
+informative, hard to spot for a human being
+(in fact it is just two characters long!). </p>
+
+<p>We decided to formalize the whole paper without identifying
+CProp and Type and assuming the Axiom of Choice as a real axiom
+(i.e. a black hole with no computational content, a function with no body). </p>
+
+<p>It is clear that this approach give us full control on when/where we really use
+the Axiom of Choice. But, what are we loosing? What happens to the computational
+content of the proofs if the Axiom of Choice gives no content back? </p>
+
+<p>It really
+depends on when we actually look at the computational content of the proof and
+we "run" that program. We can extract the content and run it before or after
+informing the system that our propositions are actually code (i.e. identifying
+∃ and Σ). If we run the program before, as soon as the computation reaches the
+Axiom of Choice it stops, giving no output. If we tell the system that CProp and
+Type are the same, we can exhibit a body for the Axiom of Choice (i.e. a projection)
+and the extracted code would compute an output. </p>
+
+<p>Note that the computational
+content is there even if the Axiom of Choice is an axiom, the difference is
+just that we cannot use it (the typing rules inhibit the elimination of the
+existential). This is possible only thanks to the minimality of CIC as implemented
+in Matita. </p>
+
+<h3>Equality</h3>
+
+<p>What we have to decide here is which models we admit. The paper does not
+mention quotiented sets, thus using an intensional equality is enough
+to capture the intended content of the paper. Nevertheless, the formalization
+cannot be reused in a concrete example where the (families of) sets
+that will build the axiom set are quotiented.</p>
+
+<p>Matita gives support for setoid rewriting under a context built with
+non dependent morphisms. As we will detail later, if we assume a generic
+equality over the carrier of our axiom set, a non trivial inductive
+construction over the ordinals has to be proved to respect extensionality
+(i.e. if the input is an extensional set, also the output is).
+The proof requires to rewrite under the context formed by the family of sets
+<code>I</code> and <code>D</code>, that have a dependent type. Declaring them as dependently typed
+morphisms is possible, but Matita does not provide an adequate support for them,
+and would thus need more effort than formalizing the whole paper. </p>
+
+<p>Anyway, in a preliminary attempt of formalization, we tried the setoid approach,
+reaching the end of the formalization, but we had to assume the proof
+of the extensionality of the <code>U_x</code> construction (while there is no
+need to assume the same property for <code>F_x</code>!). </p>
+
+<p>The current version of the formalization uses <code>Id</code>. </p>
+
+<h2>The standard library and the <code>include</code> command</h2>
+
+<p>Some basic notions, like subset, membership, intersection and union
+are part of the standard library of Matita.</p>
+
+<p>These notions come with some standard notation attached to them:</p>
+
+<ul>
+<li>A ∪ B can be typed with <code>A \cup B</code></li>
+<li>A ∩ B can be typed with <code>A \cap B</code> </li>
+<li>A ≬ B can be typed with <code>A \between B</code></li>
+<li>x ∈ A can be typed with <code>x \in A</code> </li>
+<li>Ω^A, that is the type of the subsets of A, can be typed with <code>\Omega ^ A</code> </li>
+</ul>
+
+<p>The <code>include</code> command tells Matita to load a part of the library,
+in particular the part that we will use can be loaded as follows: </p>
+
+<pre><code>include "sets/sets.ma".
+</code></pre>
+
+<p>Some basic results that we will use are also part of the sets library:</p>
+
+<ul>
+<li>subseteq_union_l: ∀A.∀U,V,W:Ω^A.U ⊆ W → V ⊆ W → U ∪ V ⊆ W</li>
+<li>subseteq_intersection_r: ∀A.∀U,V,W:Ω^A.W ⊆ U → W ⊆ V → W ⊆ U ∩ V</li>
+</ul>
+
+<h2>Defining Axiom set</h2>
+
+<p>A set of axioms is made of a set <code>S</code>, a family of sets <code>I</code> and a
+family <code>C</code> of subsets of <code>S</code> indexed by elements <code>a</code> of <code>S</code>
+and elements of <code>I(a)</code>.</p>
+
+<p>It is desirable to state theorems like "for every set of axioms, …"
+without explicitly mentioning S, I and C. To do that, the three
+components have to be grouped into a record (essentially a dependently
+typed tuple). The system is able to generate the projections
+of the record automatically, and they are named as the fields of
+the record. So, given an axiom set <code>A</code> we can obtain the set
+with <code>S A</code>, the family of sets with <code>I A</code> and the family of subsets
+with <code>C A</code>.</p>
+
+<pre><code>nrecord Ax : Type[1] ≝ {
+ S :> Type[0];
+ I : S → Type[0];
+ C : ∀a:S. I a → Ω^S
+}.
+</code></pre>
+
+<p>Forget for a moment the <code>:></code> that will be detailed later, and focus on
+the record definition. It is made of a list of pairs: a name, followed
+by <code>:</code> and the its type. It is a dependently typed tuple, thus
+already defined names (fields) can be used in the types that follow. </p>
+
+<p>Note that the field <code>S</code> was declared with <code>:></code> instead of a simple <code>:</code>.
+This declares the <code>S</code> projection to be a coercion. A coercion is
+a "cast" function the system automatically inserts when it is needed.
+In that case, the projection <code>S</code> has type <code>Ax → setoid</code>, and whenever
+the expected type of a term is <code>setoid</code> while its type is <code>Ax</code>, the
+system inserts the coercion around it, to make the whole term well typed.</p>
+
+<p>When formalizing an algebraic structure, declaring the carrier as a
+coercion is a common practice, since it allows to write statements like</p>
+
+<pre><code>∀G:Group.∀x:G.x * x^-1 = 1
+</code></pre>
+
+<p>The quantification over <code>x</code> of type <code>G</code> is ill-typed, since <code>G</code> is a term
+(of type <code>Group</code>) and thus not a type. Since the carrier projection
+<code>carr</code> is a coercion, that maps a <code>Group</code> into the type of
+its elements, the system automatically inserts <code>carr</code> around <code>G</code>,
+obtaining <code>…∀x: carr G.…</code>. </p>
+
+<p>Coercions are hidden by the system when it displays a term.
+In this particular case, the coercion <code>S</code> allows to write (and read):</p>
+
+<pre><code>∀A:Ax.∀a:A.…
+</code></pre>
+
+<p>Since <code>A</code> is not a type, but it can be turned into a <code>setoid</code> by <code>S</code>
+and a <code>setoid</code> can be turned into a type by its <code>carr</code> projection, the
+composed coercion <code>carr ∘ S</code> is silently inserted.</p>
+
+<h2>Implicit arguments</h2>
+
+<p>Something that is not still satisfactory, is that the dependent type
+of <code>I</code> and <code>C</code> are abstracted over the Axiom set. To obtain the
+precise type of a term, you can use the <code>ncheck</code> command as follows.</p>
+
+<pre><code>(** ncheck I. *) (* shows: ∀A:Ax.A → Type[0] *)
+(** ncheck C. *) (* shows: ∀A:Ax.∀a:A.A → I A a → Ω^A *)
+</code></pre>
+
+<p>One would like to write <code>I a</code> and not <code>I A a</code> under a context where
+<code>A</code> is an axiom set and <code>a</code> has type <code>S A</code> (or thanks to the coercion
+mechanism simply <code>A</code>). In Matita, a question mark represents an implicit
+argument, i.e. a missing piece of information the system is asked to
+infer. Matita performs Hindley-Milner-style type inference, thus writing
+<code>I ? a</code> is enough: since the second argument of <code>I</code> is typed by the
+first one, the first (omitted) argument can be inferred just
+computing the type of <code>a</code> (that is <code>A</code>).</p>
+
+<pre><code>(** ncheck (∀A:Ax.∀a:A.I ? a). *) (* shows: ∀A:Ax.∀a:A.I A a *)
+</code></pre>
+
+<p>This is still not completely satisfactory, since you have always to type
+<code>?</code>; to fix this minor issue we have to introduce the notational
+support built in Matita.</p>
+
+<h2>Notation for I and C</h2>
+
+<p>Matita is quipped with a quite complex notational support,
+allowing the user to define and use mathematical notations
+(<a href="http://upsilon.cc/~zack/research/publications/notation.pdf">From Notation to Semantics: There and Back Again</a>). </p>
+
+<p>Since notations are usually ambiguous (e.g. the frequent overloading of
+symbols) Matita distinguishes between the term level, the
+content level, and the presentation level, allowing multiple
+mappings between the content and the term level. </p>
+
+<p>The mapping between the presentation level (i.e. what is typed on the
+keyboard and what is displayed in the sequent window) and the content
+level is defined with the <code>notation</code> command. When followed by
+<code>></code>, it defines an input (only) notation. </p>
+
+<pre><code>notation > "𝐈 term 90 a" non associative with precedence 70 for @{ 'I $a }.
+notation > "𝐂 term 90 a term 90 i" non associative with precedence 70 for @{ 'C $a $i }.
+</code></pre>
+
+<p>The first notation defines the writing <code>𝐈 a</code> where <code>a</code> is a generic
+term of precedence 90, the maximum one. This high precedence forces
+parentheses around any term of a lower precedence. For example <code>𝐈 x</code>
+would be accepted, since identifiers have precedence 90, but
+<code>𝐈 f x</code> would be interpreted as <code>(𝐈 f) x</code>. In the latter case, parentheses
+have to be put around <code>f x</code>, thus the accepted writing would be <code>𝐈 (f x)</code>.</p>
+
+<p>To obtain the <code>𝐈</code> is enough to type <code>I</code> and then cycle between its
+similar symbols with ALT-L. The same for <code>𝐂</code>. Notations cannot use
+regular letters or the round parentheses, thus their variants (like the
+bold ones) have to be used.</p>
+
+<p>The first notation associates <code>𝐈 a</code> with <code>'I $a</code> where <code>'I</code> is a
+new content element to which a term <code>$a</code> is passed.</p>
+
+<p>Content elements have to be interpreted, and possibly multiple,
+incompatible, interpretations can be defined.</p>
+
+<pre><code>interpretation "I" 'I a = (I ? a).
+interpretation "C" 'C a i = (C ? a i).
+</code></pre>
+
+<p>The <code>interpretation</code> command allows to define the mapping between
+the content level and the terms level. Here we associate the <code>I</code> and
+<code>C</code> projections of the Axiom set record, where the Axiom set is an implicit
+argument <code>?</code> to be inferred by the system.</p>
+
+<p>Interpretation are bi-directional, thus when displaying a term like
+<code>C _ a i</code>, the system looks for a presentation for the content element
+<code>'C a i</code>. </p>
+
+<pre><code>notation < "𝐈 \sub( ❨a❩ )" non associative with precedence 70 for @{ 'I $a }.
+notation < "𝐂 \sub( ❨a,\emsp i❩ )" non associative with precedence 70 for @{ 'C $a $i }.
+</code></pre>
+
+<p>For output purposes we can define more complex notations, for example
+we can put bold parentheses around the arguments of <code>𝐈</code> and <code>𝐂</code>, decreasing
+the size of the arguments and lowering their baseline (i.e. putting them
+as subscript), separating them with a comma followed by a little space.</p>
+
+<h2>The first (technical) definition</h2>
+
+<p>Before defining the cover relation as an inductive predicate, one
+has to notice that the infinity rule uses, in its hypotheses, the
+cover relation between two subsets, while the inductive predicate
+we are going to define relates an element and a subset.</p>
+
+<pre><code> a ∈ U i ∈ I(a) C(a,i) ◃ U
+(reflexivity) ⎼⎼⎼⎼⎼⎼⎼⎼⎼ (infinity) ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ a ◃ U a ◃ U
+</code></pre>
+
+<p>An option would be to unfold the definition of cover between subsets,
+but we prefer to define the abstract notion of cover between subsets
+(so that we can attach a (ambiguous) notation to it).</p>
+
+<p>Anyway, to ease the understanding of the definition of the cover relation
+between subsets, we first define the inductive predicate unfolding the
+definition, and we later refine it with.</p>
+
+<pre><code>ninductive xcover (A : Ax) (U : Ω^A) : A → CProp[0] ≝
+| xcreflexivity : ∀a:A. a ∈ U → xcover A U a
+| xcinfinity : ∀a:A.∀i:𝐈 a. (∀y.y ∈ 𝐂 a i → xcover A U y) → xcover A U a.
+</code></pre>
+
+<p>We defined the xcover (x will be removed in the final version of the
+definition) as an inductive predicate. The arity of the inductive
+predicate has to be carefully analyzed:</p>
+
+<blockquote>
+ <p>(A : Ax) (U : Ω^A) : A → CProp[0]</p>
+</blockquote>
+
+<p>The syntax separates with <code>:</code> abstractions that are fixed for every
+constructor (introduction rule) and abstractions that can change. In that
+case the parameter <code>U</code> is abstracted once and for all in front of every
+constructor, and every occurrence of the inductive predicate is applied to
+<code>U</code> in a consistent way. Arguments abstracted on the right of <code>:</code> are not
+constant, for example the xcinfinity constructor introduces <code>a ◃ U</code>,
+but under the assumption that (for every y) <code>y ◃ U</code>. In that rule, the left
+had side of the predicate changes, thus it has to be abstracted (in the arity
+of the inductive predicate) on the right of <code>:</code>.</p>
+
+<p>The intuition Valentini suggests is that we are defining the unary predicate
+"being covered by U" (i.e. <code>_ ◃ U</code>) and not "being covered" (i.e. <code>_ ◃ _</code>).
+Unluckily, the syntax of Matita forces us to abstract <code>U</code> first, and
+we will make it the second argument of the predicate using
+the notational support Matita offers.</p>
+
+<pre><code>(** ncheck xcreflexivity. *) (* shows: ∀A:Ax.∀U:Ω^A.∀a:A.a∈U → xcover A U a *)
+</code></pre>
+
+<p>We want now to abstract out <code>(∀y.y ∈ 𝐂 a i → xcover A U y)</code> and define
+a notion <code>cover_set</code> to which a notation <code>𝐂 a i ◃ U</code> can be attached.</p>
+
+<p>This notion has to be abstracted over the cover relation (whose
+type is the arity of the inductive <code>xcover</code> predicate just defined).</p>
+
+<p>Then it has to be abstracted over the arguments of that cover relation,
+i.e. the axiom set and the set <code>U</code>, and the subset (in that case <code>𝐂 a i</code>)
+sitting on the left hand side of <code>◃</code>. </p>
+
+<pre><code>ndefinition cover_set :
+ ∀cover: ∀A:Ax.Ω^A → A → CProp[0]. ∀A:Ax.∀C,U:Ω^A. CProp[0]
+≝
+ λcover. λA, C,U. ∀y.y ∈ C → cover A U y.
+</code></pre>
+
+<p>The <code>ndefinition</code> command takes a name, a type and body (of that type).
+The type can be omitted, and in that case it is inferred by the system.
+If the type is given, the system uses it to infer implicit arguments
+of the body. In that case all types are left implicit in the body.</p>
+
+<p>We now define the notation <code>a ◃ b</code>. Here the keywork <code>hvbox</code>
+and <code>break</code> tell the system how to wrap text when it does not
+fit the screen (they can be safely ignored for the scope of
+this tutorial). We also add an interpretation for that notation,
+where the (abstracted) cover relation is implicit. The system
+will not be able to infer it from the other arguments <code>C</code> and <code>U</code>
+and will thus prompt the user for it. This is also why we named this
+interpretation <code>covers set temp</code>: we will later define another
+interpretation in which the cover relation is the one we are going to
+define.</p>
+
+<pre><code>notation "hvbox(a break ◃ b)" non associative with precedence 45
+for @{ 'covers $a $b }.
+
+interpretation "covers set temp" 'covers C U = (cover_set ?? C U).
+</code></pre>
+
+<h2>The cover relation</h2>
+
+<p>We can now define the cover relation using the <code>◃</code> notation for
+the premise of infinity. </p>
+
+<pre><code>ninductive cover (A : Ax) (U : Ω^A) : A → CProp[0] ≝
+| creflexivity : ∀a. a ∈ U → cover A U a
+| cinfinity : ∀a. ∀i. 𝐂 a i ◃ U → cover A U a.
+</code></pre>
+
+<p><img src="cover.png" alt="cover" /></p>
+
+<pre><code>napply cover;
+nqed.
+</code></pre>
+
+<p>Note that the system accepts the definition
+but prompts the user for the relation the <code>cover_set</code> notion is
+abstracted on.</p>
+
+<p>The horizontal line separates the hypotheses from the conclusion.
+The <code>napply cover</code> command tells the system that the relation
+it is looking for is exactly our first context entry (i.e. the inductive
+predicate we are defining, up to α-conversion); while the <code>nqed</code> command
+ends a definition or proof.</p>
+
+<p>We can now define the interpretation for the cover relation between an
+element and a subset first, then between two subsets (but this time
+we fix the relation <code>cover_set</code> is abstracted on).</p>
+
+<pre><code>interpretation "covers" 'covers a U = (cover ? U a).
+interpretation "covers set" 'covers a U = (cover_set cover ? a U).
+</code></pre>
+
+<p>We will proceed similarly for the fish relation, but before going
+on it is better to give a short introduction to the proof mode of Matita.
+We define again the <code>cover_set</code> term, but this time we build
+its body interactively. In the λ-calculus Matita is based on, CIC, proofs
+and terms share the same syntax, and it is thus possible to use the
+commands devoted to build proof term also to build regular definitions.
+A tentative semantics for the proof mode commands (called tactics)
+in terms of sequent calculus rules are given in the
+<a href="#appendix">appendix</a>.</p>
+
+<pre><code>ndefinition xcover_set :
+ ∀c: ∀A:Ax.Ω^A → A → CProp[0]. ∀A:Ax.∀C,U:Ω^A. CProp[0].
+</code></pre>
+
+<p><img src="xcover-set-1.png" alt="xcover-set-1" /></p>
+
+<p>The system asks for a proof of the full statement, in an empty context.</p>
+
+<p>The <code>#</code> command is the ∀-introduction rule, it gives a name to an
+assumption putting it in the context, and generates a λ-abstraction
+in the proof term.</p>
+
+<pre><code>#cover; #A; #C; #U;
+</code></pre>
+
+<p><img src="xcover-set-2.png" alt="xcover-set-2" /></p>
+
+<p>We have now to provide a proposition, and we exhibit it. We left
+a part of it implicit; since the system cannot infer it it will
+ask for it later.
+Note that the type of <code>∀y:A.y ∈ C → ?</code> is a proposition
+whenever <code>?</code> is a proposition.</p>
+
+<pre><code>napply (∀y:A.y ∈ C → ?);
+</code></pre>
+
+<p><img src="xcover-set-3.png" alt="xcover-set-3" /></p>
+
+<p>The proposition we want to provide is an application of the
+cover relation we have abstracted in the context. The command
+<code>napply</code>, if the given term has not the expected type (in that
+case it is a product versus a proposition) it applies it to as many
+implicit arguments as necessary (in that case <code>? ? ?</code>).</p>
+
+<pre><code>napply cover;
+</code></pre>
+
+<p><img src="xcover-set-4.png" alt="xcover-set-4" /></p>
+
+<p>The system will now ask in turn the three implicit arguments
+passed to cover. The syntax <code>##[</code> allows to start a branching
+to tackle every sub proof individually, otherwise every command
+is applied to every subproof. The command <code>##|</code> switches to the next
+subproof and <code>##]</code> ends the branching. </p>
+
+<pre><code>##[ napply A;
+##| napply U;
+##| napply y;
+##]
+nqed.
+</code></pre>
+
+<h2>The fish relation</h2>
+
+<p>The definition of fish works exactly the same way as for cover, except
+that it is defined as a coinductive proposition.</p>
+
+<pre><code>ndefinition fish_set ≝ λf:∀A:Ax.Ω^A → A → CProp[0].
+ λA,U,V.
+ ∃a.a ∈ V ∧ f A U a.
+
+(* a \ltimes b *)
+notation "hvbox(a break ⋉ b)" non associative with precedence 45
+for @{ 'fish $a $b }.
+
+interpretation "fish set temp" 'fish A U = (fish_set ?? U A).
+
+ncoinductive fish (A : Ax) (F : Ω^A) : A → CProp[0] ≝
+| cfish : ∀a. a ∈ F → (∀i:𝐈 a .𝐂 a i ⋉ F) → fish A F a.
+napply fish;
+nqed.
+
+interpretation "fish set" 'fish A U = (fish_set fish ? U A).
+interpretation "fish" 'fish a U = (fish ? U a).
+</code></pre>
+
+<h2>Introduction rule for fish</h2>
+
+<p>Matita is able to generate elimination rules for inductive types</p>
+
+<pre><code>(** ncheck cover_rect_CProp0. *)
+</code></pre>
+
+<p>but not introduction rules for the coinductive case. </p>
+
+<pre><code> P ⊆ U (∀x,j.x ∈ P → C(x,j) ≬ P) a ∈ P
+(fish intro) ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ a ⋉ U
+</code></pre>
+
+<p>We thus have to define the introduction rule for fish by co-recursion.
+Here we again use the proof mode of Matita to exhibit the body of the
+corecursive function.</p>
+
+<pre><code>nlet corec fish_rec (A:Ax) (U: Ω^A)
+ (P: Ω^A) (H1: P ⊆ U)
+ (H2: ∀a:A. a ∈ P → ∀j: 𝐈 a. 𝐂 a j ≬ P): ∀a:A. ∀p: a ∈ P. a ⋉ U ≝ ?.
+</code></pre>
+
+<p><img src="def-fish-rec-1.png" alt="def-fish-rec-1" /></p>
+
+<p>Note the first item of the context, it is the corecursive function we are
+defining. This item allows to perform the recursive call, but we will be
+allowed to do such call only after having generated a constructor of
+the fish coinductive type.</p>
+
+<p>We introduce <code>a</code> and <code>p</code>, and then return the fish constructor <code>cfish</code>.
+Since the constructor accepts two arguments, the system asks for them.</p>
+
+<pre><code>#a; #a_in_P; napply cfish;
+</code></pre>
+
+<p><img src="def-fish-rec-2.png" alt="def-fish-rec-2" /></p>
+
+<p>The first one is a proof that <code>a ∈ U</code>. This can be proved using <code>H1</code> and <code>p</code>.
+With the <code>nchange</code> tactic we change <code>H1</code> into an equivalent form (this step
+can be skipped, since the system would be able to unfold the definition
+of inclusion by itself)</p>
+
+<pre><code>##[ nchange in H1 with (∀b.b∈P → b∈U);
+</code></pre>
+
+<p><img src="def-fish-rec-2-1.png" alt="def-fish-rec-2-1" /></p>
+
+<p>It is now clear that <code>H1</code> can be applied. Again <code>napply</code> adds two
+implicit arguments to <code>H1 ? ?</code>, obtaining a proof of <code>? ∈ U</code> given a proof
+that <code>? ∈ P</code>. Thanks to unification, the system understands that <code>?</code> is actually
+<code>a</code>, and it asks a proof that <code>a ∈ P</code>.</p>
+
+<pre><code> napply H1;
+</code></pre>
+
+<p><img src="def-fish-rec-3.png" alt="def-fish-rec-3" /></p>
+
+<p>The <code>nassumption</code> tactic looks for the required proof in the context, and in
+that cases finds it in the last context position. </p>
+
+<p>We move now to the second branch of the proof, corresponding to the second
+argument of the <code>cfish</code> constructor.</p>
+
+<p>We introduce <code>i</code> and then we destruct <code>H2 a p i</code>, that being a proof
+of an overlap predicate, give as an element and a proof that it is
+both in <code>𝐂 a i</code> and <code>P</code>.</p>
+
+<pre><code> nassumption;
+##| #i; ncases (H2 a a_in_P i);
+</code></pre>
+
+<p><img src="def-fish-rec-5.png" alt="def-fish-rec-5" /></p>
+
+<p>We then introduce <code>x</code>, break the conjunction (the <code>*;</code> command is the
+equivalent of <code>ncases</code> but operates on the first hypothesis that can
+be introduced). We then introduce the two sides of the conjunction.</p>
+
+<pre><code> #x; *; #xC; #xP;
+</code></pre>
+
+<p><img src="def-fish-rec-5-1.png" alt="def-fish-rec-5-1" /></p>
+
+<p>The goal is now the existence of a point in <code>𝐂 a i</code> fished by <code>U</code>.
+We thus need to use the introduction rule for the existential quantifier.
+In CIC it is a defined notion, that is an inductive type with just
+one constructor (one introduction rule) holding the witness and the proof
+that the witness satisfies a proposition.</p>
+
+<blockquote>
+ <p>ncheck Ex. </p>
+</blockquote>
+
+<p>Instead of trying to remember the name of the constructor, that should
+be used as the argument of <code>napply</code>, we can ask the system to find by
+itself the constructor name and apply it with the <code>@</code> tactic.
+Note that some inductive predicates, like the disjunction, have multiple
+introduction rules, and thus <code>@</code> can be followed by a number identifying
+the constructor.</p>
+
+<pre><code> @;
+</code></pre>
+
+<p><img src="def-fish-rec-6.png" alt="def-fish-rec-6" /></p>
+
+<p>After choosing <code>x</code> as the witness, we have to prove a conjunction,
+and we again apply the introduction rule for the inductively defined
+predicate <code>∧</code>.</p>
+
+<pre><code> ##[ napply x
+ ##| @;
+</code></pre>
+
+<p><img src="def-fish-rec-7.png" alt="def-fish-rec-7" /></p>
+
+<p>The left hand side of the conjunction is trivial to prove, since it
+is already in the context. The right hand side needs to perform
+the co-recursive call.</p>
+
+<pre><code> ##[ napply xC;
+ ##| napply (fish_rec ? U P);
+</code></pre>
+
+<p><img src="def-fish-rec-9.png" alt="def-fish-rec-9" /></p>
+
+<p>The co-recursive call needs some arguments, but all of them are
+in the context. Instead of explicitly mention them, we use the
+<code>nassumption</code> tactic, that simply tries to apply every context item.</p>
+
+<pre><code> nassumption;
+ ##]
+ ##]
+##]
+nqed.
+</code></pre>
+
+<h2>Subset of covered/fished points</h2>
+
+<p>We now have to define the subset of <code>S</code> of points covered by <code>U</code>.
+We also define a prefix notation for it. Remember that the precedence
+of the prefix form of a symbol has to be higher than the precedence
+of its infix form.</p>
+
+<pre><code>ndefinition coverage : ∀A:Ax.∀U:Ω^A.Ω^A ≝ λA,U.{ a | a ◃ U }.
+
+notation "◃U" non associative with precedence 55 for @{ 'coverage $U }.
+
+interpretation "coverage cover" 'coverage U = (coverage ? U).
+</code></pre>
+
+<p>Here we define the equation characterizing the cover relation.
+Even if it is not part of the paper, we proved that <code>◃(U)</code> is
+the minimum solution for
+such equation, the interested reader should be able to reply the proof
+with Matita.</p>
+
+<pre><code>ndefinition cover_equation : ∀A:Ax.∀U,X:Ω^A.CProp[0] ≝ λA,U,X.
+ ∀a.a ∈ X ↔ (a ∈ U ∨ ∃i:𝐈 a.∀y.y ∈ 𝐂 a i → y ∈ X).
+
+ntheorem coverage_cover_equation : ∀A,U. cover_equation A U (◃U).
+#A; #U; #a; @; #H;
+##[ nelim H; #b;
+ ##[ #bU; @1; nassumption;
+ ##| #i; #CaiU; #IH; @2; @ i; #c; #cCbi; ncases (IH ? cCbi);
+ ##[ #E; @; napply E;
+ ##| #_; napply CaiU; nassumption; ##] ##]
+##| ncases H; ##[ #E; @; nassumption]
+ *; #j; #Hj; @2 j; #w; #wC; napply Hj; nassumption;
+##]
+nqed.
+
+ntheorem coverage_min_cover_equation :
+ ∀A,U,W. cover_equation A U W → ◃U ⊆ W.
+#A; #U; #W; #H; #a; #aU; nelim aU; #b;
+##[ #bU; ncases (H b); #_; #H1; napply H1; @1; nassumption;
+##| #i; #CbiU; #IH; ncases (H b); #_; #H1; napply H1; @2; @i; napply IH;
+##]
+nqed.
+</code></pre>
+
+<p>We similarly define the subset of points "fished" by <code>F</code>, the
+equation characterizing <code>⋉(F)</code> and prove that fish is
+the biggest solution for such equation.</p>
+
+<pre><code>notation "⋉F" non associative with precedence 55
+for @{ 'fished $F }.
+
+ndefinition fished : ∀A:Ax.∀F:Ω^A.Ω^A ≝ λA,F.{ a | a ⋉ F }.
+
+interpretation "fished fish" 'fished F = (fished ? F).
+
+ndefinition fish_equation : ∀A:Ax.∀F,X:Ω^A.CProp[0] ≝ λA,F,X.
+ ∀a. a ∈ X ↔ a ∈ F ∧ ∀i:𝐈 a.∃y.y ∈ 𝐂 a i ∧ y ∈ X.
+
+ntheorem fished_fish_equation : ∀A,F. fish_equation A F (⋉F).
+#A; #F; #a; @; (* *; non genera outtype che lega a *) #H; ncases H;
+##[ #b; #bF; #H2; @ bF; #i; ncases (H2 i); #c; *; #cC; #cF; @c; @ cC;
+ napply cF;
+##| #aF; #H1; @ aF; napply H1;
+##]
+nqed.
+
+ntheorem fished_max_fish_equation : ∀A,F,G. fish_equation A F G → G ⊆ ⋉F.
+#A; #F; #G; #H; #a; #aG; napply (fish_rec … aG);
+#b; ncases (H b); #H1; #_; #bG; ncases (H1 bG); #E1; #E2; nassumption;
+nqed.
+</code></pre>
+
+<h2>Part 2, the new set of axioms</h2>
+
+<p>Since the name of defined objects (record included) has to be unique
+within the same file, we prefix every field name
+in the new definition of the axiom set with <code>n</code>.</p>
+
+<pre><code>nrecord nAx : Type[1] ≝ {
+ nS:> Type[0];
+ nI: nS → Type[0];
+ nD: ∀a:nS. nI a → Type[0];
+ nd: ∀a:nS. ∀i:nI a. nD a i → nS
+}.
+</code></pre>
+
+<p>We again define a notation for the projections, making the
+projected record an implicit argument. Note that, since we already have
+a notation for <code>𝐈</code>, we just add another interpretation for it. The
+system, looking at the argument of <code>𝐈</code>, will be able to choose
+the correct interpretation. </p>
+
+<pre><code>notation "𝐃 \sub ( ❨a,\emsp i❩ )" non associative with precedence 70 for @{ 'D $a $i }.
+notation "𝐝 \sub ( ❨a,\emsp i,\emsp j❩ )" non associative with precedence 70 for @{ 'd $a $i $j}.
+
+notation > "𝐃 term 90 a term 90 i" non associative with precedence 70 for @{ 'D $a $i }.
+notation > "𝐝 term 90 a term 90 i term 90 j" non associative with precedence 70 for @{ 'd $a $i $j}.
+
+interpretation "D" 'D a i = (nD ? a i).
+interpretation "d" 'd a i j = (nd ? a i j).
+interpretation "new I" 'I a = (nI ? a).
+</code></pre>
+
+<p>The first result the paper presents to motivate the new formulation
+of the axiom set is the possibility to define and old axiom set
+starting from a new one and vice versa. The key definition for
+such construction is the image of d(a,i).
+The paper defines the image as</p>
+
+<blockquote>
+ <p>Im[d(a,i)] = { d(a,i,j) | j : D(a,i) }</p>
+</blockquote>
+
+<p>but this not so formal notation poses some problems. The image is
+often used as the left hand side of the ⊆ predicate</p>
+
+<blockquote>
+ <p>Im[d(a,i)] ⊆ V</p>
+</blockquote>
+
+<p>Of course this writing is interpreted by the authors as follows </p>
+
+<blockquote>
+ <p>∀j:D(a,i). d(a,i,j) ∈ V</p>
+</blockquote>
+
+<p>If we need to use the image to define <code>𝐂</code> (a subset of <code>S</code>) we are obliged to
+form a subset, i.e. to place a single variable <code>{ here | … }</code> of type <code>S</code>.</p>
+
+<blockquote>
+ <p>Im[d(a,i)] = { y | ∃j:D(a,i). y = d(a,i,j) }</p>
+</blockquote>
+
+<p>This poses no theoretical problems, since <code>S</code> is a Type and thus
+equipped with the <code>Id</code> equality. If <code>S</code> was a setoid, here the equality
+would have been the one of the setoid.</p>
+
+<p>Unless we define two different images, one for stating that the image is ⊆ of
+something and another one to define <code>𝐂</code>, we end up using always the latter.
+Thus the statement <code>Im[d(a,i)] ⊆ V</code> unfolds to</p>
+
+<blockquote>
+ <p>∀x:S. ( ∃j.x = d(a,i,j) ) → x ∈ V</p>
+</blockquote>
+
+<p>That, up to rewriting with the equation defining <code>x</code>, is what we mean.
+Since we decided to use <code>Id</code> the rewriting always work (the elimination
+principle for <code>Id</code> is Leibnitz's equality, that is quantified over
+the context. </p>
+
+<p>The problem that arises if we decide to make <code>S</code> a setoid is that
+<code>V</code> has to be extensional w.r.t. the equality of <code>S</code> (i.e. the characteristic
+functional proposition has to quotient its input with a relation bigger
+than the one of <code>S</code>.</p>
+
+<blockquote>
+ <p>∀x,y:S. x = y → x ∈ V → y ∈ V</p>
+</blockquote>
+
+<p>If <code>V</code> is a complex construction, the proof may not be trivial.</p>
+
+<pre><code>include "logic/equality.ma".
+
+ndefinition image ≝ λA:nAx.λa:A.λi. { x | ∃j:𝐃 a i. x = 𝐝 a i j }.
+
+notation > "𝐈𝐦 [𝐝 term 90 a term 90 i]" non associative with precedence 70 for @{ 'Im $a $i }.
+notation < "𝐈𝐦 [𝐝 \sub ( ❨a,\emsp i❩ )]" non associative with precedence 70 for @{ 'Im $a $i }.
+
+interpretation "image" 'Im a i = (image ? a i).
+</code></pre>
+
+<p>Thanks to our definition of image, we can define a function mapping a
+new axiom set to an old one and vice versa. Note that in the second
+definition, when we give the <code>𝐝</code> component, the projection of the
+Σ-type is inlined (constructed on the fly by <code>*;</code>)
+while in the paper it was named <code>fst</code>.</p>
+
+<pre><code>ndefinition Ax_of_nAx : nAx → Ax.
+#A; @ A (nI ?); #a; #i; napply (𝐈𝐦 [𝐝 a i]);
+nqed.
+
+ndefinition nAx_of_Ax : Ax → nAx.
+#A; @ A (I ?);
+##[ #a; #i; napply (Σx:A.x ∈ 𝐂 a i);
+##| #a; #i; *; #x; #_; napply x;
+##]
+nqed.
+</code></pre>
+
+<p>We now prove that the two function above form a retraction pair for
+the <code>C</code> component of the axiom set. To prove that we face a little
+problem since CIC is not equipped with η-conversion. This means that
+the followin does not hold (where <code>A</code> is an axiom set).</p>
+
+<blockquote>
+ <p>A = (S A, I A, C A)</p>
+</blockquote>
+
+<p>This can be proved only under a pattern mach over <code>A</code>, that means
+that the resulting computation content of the proof is a program
+that computes something only if <code>A</code> is a concrete axiom set.</p>
+
+<p>To state the lemma we have to drop notation, and explicitly
+give the axiom set in input to the <code>C</code> projection.</p>
+
+<pre><code>nlemma Ax_nAx_equiv :
+ ∀A:Ax. ∀a,i. C (Ax_of_nAx (nAx_of_Ax A)) a i ⊆ C A a i ∧
+ C A a i ⊆ C (Ax_of_nAx (nAx_of_Ax A)) a i.
+#A; #a; #i; @; #b; #H;
+</code></pre>
+
+<p><img src="retr-1.png" alt="retr-1" /></p>
+
+<p>Look for example the type of <code>a</code>. The command <code>nchange in a with A</code>
+would fail because of the missing η-conversion rule. We have thus
+to pattern match over <code>A</code> and introduce its pieces.</p>
+
+<pre><code>##[ ncases A in a i b H; #S; #I; #C; #a; #i; #b; #H;
+</code></pre>
+
+<p><img src="retr-2.png" alt="retr-2" /></p>
+
+<p>Now the system accepts that the type of <code>a</code> is the fist component
+of the axiom set, now called <code>S</code>. Unfolding definitions in <code>H</code> we discover
+there is still some work to do.</p>
+
+<pre><code> nchange in a with S; nwhd in H;
+</code></pre>
+
+<p><img src="retr-3.png" alt="retr-3" /></p>
+
+<p>To use the equation defining <code>b</code> we have to eliminate <code>H</code>. Unfolding
+definitions in <code>x</code> tell us there is still something to do. The <code>nrewrite</code>
+tactic is a shortcut for the elimination principle of the equality.
+It accepts an additional argument <code><</code> or <code>></code> to rewrite left-to-right
+or right-to-left. </p>
+
+<pre><code> ncases H; #x; #E; nrewrite > E; nwhd in x;
+</code></pre>
+
+<p><img src="retr-4.png" alt="retr-4" /></p>
+
+<p>We defined <code>𝐝</code> to be the first projection of <code>x</code>, thus we have to
+eliminate <code>x</code> to actually compute <code>𝐝</code>. </p>
+
+<p>The remaining part of the proof it not interesting and poses no
+new problems.</p>
+
+<pre><code> ncases x; #b; #Hb; nnormalize; nassumption;
+##| ncases A in a i b H; #S; #I; #C; #a; #i; #b; #H; @;
+ ##[ @ b; nassumption;
+ ##| nnormalize; @; ##]
+##]
+nqed.
+</code></pre>
+
+<p>We then define the inductive type of ordinals, parametrized over an axiom
+set. We also attach some notations to the constructors.</p>
+
+<pre><code>ninductive Ord (A : nAx) : Type[0] ≝
+ | oO : Ord A
+ | oS : Ord A → Ord A
+ | oL : ∀a:A.∀i.∀f:𝐃 a i → Ord A. Ord A.
+
+notation "0" non associative with precedence 90 for @{ 'oO }.
+notation "x+1" non associative with precedence 50 for @{'oS $x }.
+notation "Λ term 90 f" non associative with precedence 50 for @{ 'oL $f }.
+
+interpretation "ordinals Zero" 'oO = (oO ?).
+interpretation "ordinals Succ" 'oS x = (oS ? x).
+interpretation "ordinals Lambda" 'oL f = (oL ? ? ? f).
+</code></pre>
+
+<p>The definition of <code>U⎽x</code> is by recursion over the ordinal <code>x</code>.
+We thus define a recursive function using the <code>nlet rec</code> command.
+The <code>on x</code> directive tells
+the system on which argument the function is (structurally) recursive.</p>
+
+<p>In the <code>oS</code> case we use a local definition to name the recursive call
+since it is used twice.</p>
+
+<p>Note that Matita does not support notation in the left hand side
+of a pattern match, and thus the names of the constructors have to
+be spelled out verbatim.</p>
+
+<pre><code>nlet rec famU (A : nAx) (U : Ω^A) (x : Ord A) on x : Ω^A ≝
+ match x with
+ [ oO ⇒ U
+ | oS y ⇒ let U_n ≝ famU A U y in U_n ∪ { x | ∃i.𝐈𝐦[𝐝 x i] ⊆ U_n}
+ | oL a i f ⇒ { x | ∃j.x ∈ famU A U (f j) } ].
+
+notation < "term 90 U \sub (term 90 x)" non associative with precedence 50 for @{ 'famU $U $x }.
+notation > "U ⎽ term 90 x" non associative with precedence 50 for @{ 'famU $U $x }.
+
+interpretation "famU" 'famU U x = (famU ? U x).
+</code></pre>
+
+<p>We attach as the input notation for U_x the similar <code>U⎽x</code> where underscore,
+that is a character valid for identifier names, has been replaced by <code>⎽</code> that is
+not. The symbol <code>⎽</code> can act as a separator, and can be typed as an alternative
+for <code>_</code> (i.e. pressing ALT-L after <code>_</code>). </p>
+
+<p>The notion ◃(U) has to be defined as the subset of elements <code>y</code> <br />
+belonging to <code>U⎽x</code> for some <code>x</code>. Moreover, we have to define the notion
+of cover between sets again, since the one defined at the beginning
+of the tutorial works only for the old axiom set.</p>
+
+<pre><code>ndefinition ord_coverage : ∀A:nAx.∀U:Ω^A.Ω^A ≝
+ λA,U.{ y | ∃x:Ord A. y ∈ famU ? U x }.
+
+ndefinition ord_cover_set ≝ λc:∀A:nAx.Ω^A → Ω^A.λA,C,U.
+ ∀y.y ∈ C → y ∈ c A U.
+
+interpretation "coverage new cover" 'coverage U = (ord_coverage ? U).
+interpretation "new covers set" 'covers a U = (ord_cover_set ord_coverage ? a U).
+interpretation "new covers" 'covers a U = (mem ? (ord_coverage ? U) a).
+</code></pre>
+
+<p>Before proving that this cover relation validates the reflexivity and infinity
+rules, we prove this little technical lemma that is used in the proof for the
+infinity rule.</p>
+
+<pre><code>nlemma ord_subset: ∀A:nAx.∀a:A.∀i,f,U.∀j:𝐃 a i. U⎽(f j) ⊆ U⎽(Λ f).
+#A; #a; #i; #f; #U; #j; #b; #bUf; @ j; nassumption;
+nqed.
+</code></pre>
+
+<p>The proof of infinity uses the following form of the Axiom of Choice,
+that cannot be proved inside Matita, since the existential quantifier
+lives in the sort of predicative propositions while the sigma in the conclusion
+lives in the sort of data types, and thus the former cannot be eliminated
+to provide the witness for the second.</p>
+
+<pre><code>naxiom AC : ∀A,a,i,U.
+ (∀j:𝐃 a i.∃x:Ord A.𝐝 a i j ∈ U⎽x) → (Σf.∀j:𝐃 a i.𝐝 a i j ∈ U⎽(f j)).
+</code></pre>
+
+<p>Note that, if we will decide later to identify ∃ and Σ, <code>AC</code> is
+trivially provable</p>
+
+<pre><code>nlemma AC_exists_is_sigma : ∀A,a,i,U.
+ (∀j:𝐃 a i.Σx:Ord A.𝐝 a i j ∈ U⎽x) → (Σf.∀j:𝐃 a i.𝐝 a i j ∈ U⎽(f j)).
+#A; #a; #i; #U; #H; @;
+##[ #j; ncases (H j); #x; #_; napply x;
+##| #j; ncases (H j); #x; #Hx; napply Hx; ##]
+nqed.
+</code></pre>
+
+<p>In case we made <code>S</code> a setoid, the following property has to be proved</p>
+
+<blockquote>
+ <p>nlemma U<em>x</em>is_ext: ∀A:nAx.∀a,b:A.∀x.∀U. a = b → b ∈ U⎽x → a ∈ U⎽x.</p>
+</blockquote>
+
+<p>Anyway this proof is a non trivial induction over x, that requires <code>𝐈</code> and <code>𝐃</code> to be
+declared as morphisms. </p>
+
+<p>The reflexivity proof is trivial, it is enough to provide the ordinal <code>0</code>
+as a witness, then <code>◃(U)</code> reduces to <code>U</code> by definition,
+hence the conclusion. Note that <code>0</code> is between <code>(</code> and <code>)</code> to
+make it clear that it is a term (an ordinal) and not the number
+of the constructor we want to apply (that is the first and only one
+of the existential inductive type).</p>
+
+<pre><code>ntheorem new_coverage_reflexive: ∀A:nAx.∀U:Ω^A.∀a. a ∈ U → a ◃ U.
+#A; #U; #a; #H; @ (0); napply H;
+nqed.
+</code></pre>
+
+<p>We now proceed with the proof of the infinity rule.</p>
+
+<pre><code>alias symbol "covers" (instance 3) = "new covers set".
+ntheorem new_coverage_infinity:
+ ∀A:nAx.∀U:Ω^A.∀a:A. (∃i:𝐈 a. 𝐈𝐦[𝐝 a i] ◃ U) → a ◃ U.
+#A; #U; #a;
+</code></pre>
+
+<p><img src="n-cov-inf-1.png" alt="n-cov-inf-1" /></p>
+
+<p>We eliminate the existential, obtaining an <code>i</code> and a proof that the
+image of <code>𝐝 a i</code> is covered by U. The <code>nnormalize</code> tactic computes the normal
+form of <code>H</code>, thus expands the definition of cover between sets.</p>
+
+<pre><code>*; #i; #H; nnormalize in H;
+</code></pre>
+
+<p><img src="n-cov-inf-2.png" alt="n-cov-inf-2" /></p>
+
+<p>When the paper proof considers <code>H</code>, it implicitly substitutes assumed
+equation defining <code>y</code> in its conclusion.
+In Matita this step is not completely trivial.
+We thus assert (<code>ncut</code>) the nicer form of <code>H</code> and prove it.</p>
+
+<pre><code>ncut (∀y:𝐃 a i.∃x:Ord A.𝐝 a i y ∈ U⎽x); ##[
+</code></pre>
+
+<p><img src="n-cov-inf-3.png" alt="n-cov-inf-3" /></p>
+
+<p>After introducing <code>z</code>, <code>H</code> can be applied (choosing <code>𝐝 a i z</code> as <code>y</code>).
+What is the left to prove is that <code>∃j: 𝐃 a j. 𝐝 a i z = 𝐝 a i j</code>, that
+becomes trivial if <code>j</code> is chosen to be <code>z</code>. </p>
+
+<pre><code> #z; napply H; @ z; @; ##] #H';
+</code></pre>
+
+<p><img src="n-cov-inf-4.png" alt="n-cov-inf-4" /></p>
+
+<p>Under <code>H'</code> the axiom of choice <code>AC</code> can be eliminated, obtaining the <code>f</code> and
+its property. Note that the axiom <code>AC</code> was abstracted over <code>A,a,i,U</code> before
+assuming <code>(∀j:𝐃 a i.∃x:Ord A.𝐝 a i j ∈ U⎽x)</code>. Thus the term that can be eliminated
+is <code>AC ???? H'</code> where the system is able to infer every <code>?</code>. Matita provides
+a facility to specify a number of <code>?</code> in a compact way, i.e. <code>…</code>. The system
+expand <code>…</code> first to zero, then one, then two, three and finally four question
+marks, "guessing" how may of them are needed. </p>
+
+<pre><code>ncases (AC … H'); #f; #Hf;
+</code></pre>
+
+<p><img src="n-cov-inf-5.png" alt="n-cov-inf-5" /></p>
+
+<p>The paper proof does now a forward reasoning step, deriving (by the ord_subset
+lemma we proved above) <code>Hf'</code> i.e. 𝐝 a i j ∈ U⎽(Λf).</p>
+
+<pre><code>ncut (∀j.𝐝 a i j ∈ U⎽(Λ f));
+ ##[ #j; napply (ord_subset … f … (Hf j));##] #Hf';
+</code></pre>
+
+<p><img src="n-cov-inf-6.png" alt="n-cov-inf-6" /></p>
+
+<p>To prove that <code>a◃U</code> we have to exhibit the ordinal x such that <code>a ∈ U⎽x</code>.</p>
+
+<pre><code>@ (Λ f+1);
+</code></pre>
+
+<p><img src="n-cov-inf-7.png" alt="n-cov-inf-7" /></p>
+
+<p>The definition of <code>U⎽(…+1)</code> expands to the union of two sets, and proving
+that <code>a ∈ X ∪ Y</code> is, by definition, equivalent to prove that <code>a</code> is in <code>X</code> or <code>Y</code>.
+Applying the second constructor <code>@2;</code> of the disjunction,
+we are left to prove that <code>a</code> belongs to the right hand side of the union.</p>
+
+<pre><code>@2;
+</code></pre>
+
+<p><img src="n-cov-inf-8.png" alt="n-cov-inf-8" /></p>
+
+<p>We thus provide <code>i</code> as the witness of the existential, introduce the
+element being in the image and we are
+left to prove that it belongs to <code>U⎽(Λf)</code>. In the meanwhile, since belonging
+to the image means that there exists an object in the domain …, we eliminate the
+existential, obtaining <code>d</code> (of type <code>𝐃 a i</code>) and the equation defining <code>x</code>. </p>
+
+<pre><code>@i; #x; *; #d; #Hd;
+</code></pre>
+
+<p><img src="n-cov-inf-9.png" alt="n-cov-inf-9" /></p>
+
+<p>We just need to use the equational definition of <code>x</code> to obtain a conclusion
+that can be proved with <code>Hf'</code>. We assumed that <code>U⎽x</code> is extensional for
+every <code>x</code>, thus we are allowed to use <code>Hd</code> and close the proof.</p>
+
+<pre><code>nrewrite > Hd; napply Hf';
+nqed.
+</code></pre>
+
+<p>The next proof is that ◃(U) is minimal. The hardest part of the proof
+is to prepare the goal for the induction. The desiderata is to prove
+<code>U⎽o ⊆ V</code> by induction on <code>o</code>, but the conclusion of the lemma is,
+unfolding all definitions:</p>
+
+<blockquote>
+ <p>∀x. x ∈ { y | ∃o:Ord A.y ∈ U⎽o } → x ∈ V</p>
+</blockquote>
+
+<pre><code>nlemma new_coverage_min :
+ ∀A:nAx.∀U:Ω^A.∀V.U ⊆ V → (∀a:A.∀i.𝐈𝐦[𝐝 a i] ⊆ V → a ∈ V) → ◃U ⊆ V.
+#A; #U; #V; #HUV; #Im;#b;
+</code></pre>
+
+<p><img src="n-cov-min-2.png" alt="n-cov-min-2" /></p>
+
+<p>After all the introductions, event the element hidden in the ⊆ definition,
+we have to eliminate the existential quantifier, obtaining the ordinal <code>o</code></p>
+
+<pre><code>*; #o;
+</code></pre>
+
+<p><img src="n-cov-min-3.png" alt="n-cov-min-3" /></p>
+
+<p>What is left is almost right, but the element <code>b</code> is already in the
+context. We thus generalize every occurrence of <code>b</code> in
+the current goal, obtaining <code>∀c.c ∈ U⎽o → c ∈ V</code> that is <code>U⎽o ⊆ V</code>.</p>
+
+<pre><code>ngeneralize in match b; nchange with (U⎽o ⊆ V);
+</code></pre>
+
+<p><img src="n-cov-min-4.png" alt="n-cov-min-4" /></p>
+
+<p>We then proceed by induction on <code>o</code> obtaining the following goals</p>
+
+<pre><code>nelim o;
+</code></pre>
+
+<p><img src="n-cov-min-5.png" alt="n-cov-min-5" /></p>
+
+<p>All of them can be proved using simple set theoretic arguments,
+the induction hypothesis and the assumption <code>Im</code>.</p>
+
+<pre><code>##[ napply HUV;
+##| #p; #IH; napply subseteq_union_l; ##[ nassumption; ##]
+ #x; *; #i; #H; napply (Im ? i); napply (subseteq_trans … IH); napply H;
+##| #a; #i; #f; #IH; #x; *; #d; napply IH; ##]
+nqed.
+</code></pre>
+
+<p>The notion <code>F⎽x</code> is again defined by recursion over the ordinal <code>x</code>.</p>
+
+<pre><code>nlet rec famF (A: nAx) (F : Ω^A) (x : Ord A) on x : Ω^A ≝
+ match x with
+ [ oO ⇒ F
+ | oS o ⇒ let F_o ≝ famF A F o in F_o ∩ { x | ∀i:𝐈 x.∃j:𝐃 x i.𝐝 x i j ∈ F_o }
+ | oL a i f ⇒ { x | ∀j:𝐃 a i.x ∈ famF A F (f j) }
+ ].
+
+interpretation "famF" 'famU U x = (famF ? U x).
+
+ndefinition ord_fished : ∀A:nAx.∀F:Ω^A.Ω^A ≝ λA,F.{ y | ∀x:Ord A. y ∈ F⎽x }.
+
+interpretation "fished new fish" 'fished U = (ord_fished ? U).
+interpretation "new fish" 'fish a U = (mem ? (ord_fished ? U) a).
+</code></pre>
+
+<p>The proof of compatibility uses this little result, that we
+proved outside the main proof. </p>
+
+<pre><code>nlemma co_ord_subset: ∀A:nAx.∀F:Ω^A.∀a,i.∀f:𝐃 a i → Ord A.∀j. F⎽(Λ f) ⊆ F⎽(f j).
+#A; #F; #a; #i; #f; #j; #x; #H; napply H;
+nqed.
+</code></pre>
+
+<p>We assume the dual of the axiom of choice, as in the paper proof.</p>
+
+<pre><code>naxiom AC_dual: ∀A:nAx.∀a:A.∀i,F.
+ (∀f:𝐃 a i → Ord A.∃x:𝐃 a i.𝐝 a i x ∈ F⎽(f x))
+ → ∃j:𝐃 a i.∀x:Ord A.𝐝 a i j ∈ F⎽x.
+</code></pre>
+
+<p>Proving the anti-reflexivity property is simple, since the
+assumption <code>a ⋉ F</code> states that for every ordinal <code>x</code> (and thus also 0)
+<code>a ∈ F⎽x</code>. If <code>x</code> is choose to be <code>0</code>, we obtain the thesis.</p>
+
+<pre><code>ntheorem new_fish_antirefl: ∀A:nAx.∀F:Ω^A.∀a. a ⋉ F → a ∈ F.
+#A; #F; #a; #H; nlapply (H 0); #aFo; napply aFo;
+nqed.
+</code></pre>
+
+<p>We now prove the compatibility property for the new fish relation.</p>
+
+<pre><code>ntheorem new_fish_compatible:
+ ∀A:nAx.∀F:Ω^A.∀a. a ⋉ F → ∀i:𝐈 a.∃j:𝐃 a i.𝐝 a i j ⋉ F.
+#A; #F; #a; #aF; #i; nnormalize;
+</code></pre>
+
+<p><img src="n-f-compat-1.png" alt="n-f-compat-1" /></p>
+
+<p>After reducing to normal form the goal, we observe it is exactly the conclusion of
+the dual axiom of choice we just assumed. We thus apply it ad introduce the
+fcuntion <code>f</code>.</p>
+
+<pre><code>napply AC_dual; #f;
+</code></pre>
+
+<p><img src="n-f-compat-2.png" alt="n-f-compat-2" /></p>
+
+<p>The hypothesis <code>aF</code> states that <code>a⋉F⎽x</code> for every <code>x</code>, and we choose <code>Λf+1</code>.</p>
+
+<pre><code>nlapply (aF (Λf+1)); #aLf;
+</code></pre>
+
+<p><img src="n-f-compat-3.png" alt="n-f-compat-3" /></p>
+
+<p>Since F_(Λf+1) is defined by recursion and we actually have a concrete input
+<code>Λf+1</code> for that recursive function, it can be computed.
+Anyway, using the <code>nnormalize</code>
+tactic would reduce too much (both the <code>+1</code> and the <code>Λf</code> steps would be performed);
+we thus explicitly give a convertible type for that hypothesis, corresponding
+the computation of the <code>+1</code> step, plus the unfolding the definition of
+the intersection.</p>
+
+<pre><code>nchange in aLf with
+ (a ∈ F⎽(Λ f) ∧ ∀i:𝐈 a.∃j:𝐃 a i.𝐝 a i j ∈ F⎽(Λ f));
+</code></pre>
+
+<p><img src="n-f-compat-4.png" alt="n-f-compat-4" /></p>
+
+<p>We are interested in the right hand side of <code>aLf</code>, an in particular to
+its intance where the generic index in <code>𝐈 a</code> is <code>i</code>.</p>
+
+<pre><code>ncases aLf; #_; #H; nlapply (H i);
+</code></pre>
+
+<p><img src="n-f-compat-5.png" alt="n-f-compat-5" /></p>
+
+<p>We then eliminate the existential, obtaining <code>j</code> and its property <code>Hj</code>. We provide
+the same witness </p>
+
+<pre><code>*; #j; #Hj; @j;
+</code></pre>
+
+<p><img src="n-f-compat-6.png" alt="n-f-compat-6" /></p>
+
+<p>What is left to prove is exactly the <code>co_ord_subset</code> lemma we factored out
+of the main proof.</p>
+
+<pre><code>napply (co_ord_subset … Hj);
+nqed.
+</code></pre>
+
+<p>The proof that <code>⋉(F)</code> is maximal is exactly the dual one of the
+minimality of <code>◃(U)</code>. Thus the main problem is to obtain <code>G ⊆ F⎽o</code>
+before doing the induction over <code>o</code>.</p>
+
+<pre><code>ntheorem max_new_fished:
+ ∀A:nAx.∀G:Ω^A.∀F:Ω^A.G ⊆ F → (∀a.a ∈ G → ∀i.𝐈𝐦[𝐝 a i] ≬ G) → G ⊆ ⋉F.
+#A; #G; #F; #GF; #H; #b; #HbG; #o;
+ngeneralize in match HbG; ngeneralize in match b;
+nchange with (G ⊆ F⎽o);
+nelim o;
+##[ napply GF;
+##| #p; #IH; napply (subseteq_intersection_r … IH);
+ #x; #Hx; #i; ncases (H … Hx i); #c; *; *; #d; #Ed; #cG;
+ @d; napply IH;
+</code></pre>
+
+<p><img src="n-f-max-1.png" alt="n-f-max-1" /></p>
+
+<p>Note that here the right hand side of <code>∈</code> is <code>G</code> and not <code>F⎽p</code> as
+in the dual proof. If <code>S</code> was declare to be a setoid, to finish this proof
+would be enough to assume <code>G</code> extensional, and no proof of the
+extensionality of <code>F⎽p</code> is required. </p>
+
+<div id="appendix" class="anchor"></div>
+
+<h2>Appendix: tactics explanation</h2>
+
+<p>In this appendix we try to give a description of tactics
+in terms of sequent calculus rules annotated with proofs.
+The <code>:</code> separator has to be read as <em>is a proof of</em>, in the spirit
+of the Curry-Howard isomorphism.</p>
+
+<pre><code> Γ ⊢ f : A_1 → … → A_n → B Γ ⊢ ?_i : A_i
+napply f; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ (f ?_1 … ?_n ) : B
+
+ Γ ⊢ ? : F → B Γ ⊢ f : F
+nlapply f; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ (? f) : B
+
+
+ Γ; x : T ⊢ ? : P(x)
+#x; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ λx:T.? : ∀x:T.P(x)
+
+
+ Γ ⊢ ?_i : args_i → P(k_i args_i)
+ncases x; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ match x with [ k1 args1 ⇒ ?_1 | … | kn argsn ⇒ ?_n ] : P(x)
+
+
+ Γ ⊢ ?i : ∀t. P(t) → P(k_i … t …)
+nelim x; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ (T_rect_CProp0 ?_1 … ?_n) : P(x)
+</code></pre>
+
+<p>Where <code>T_rect_CProp0</code> is the induction principle for the
+inductive type <code>T</code>.</p>
+
+<pre><code> Γ ⊢ ? : Q Q ≡ P
+nchange with Q; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ ? : P
+</code></pre>
+
+<p>Where the equivalence relation between types <code>≡</code> keeps into account
+β-reduction, δ-reduction (definition unfolding), ζ-reduction (local
+definition unfolding), ι-reduction (pattern matching simplification),
+μ-reduction (recursive function computation) and ν-reduction (co-fixpoint
+computation).</p>
+
+<pre><code> Γ; H : Q; Δ ⊢ ? : G Q ≡ P
+nchange in H with Q; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ; H : P; Δ ⊢ ? : G
+
+
+ Γ; H : Q; Δ ⊢ ? : G P →* Q
+nnormalize in H; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ; H : P; Δ ⊢ ? : G
+</code></pre>
+
+<p>Where <code>Q</code> is the normal form of <code>P</code> considering βδζιμν-reduction steps.</p>
+
+<pre><code> Γ ⊢ ? : Q P →* Q
+nnormalize; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ ? : P
+
+
+ Γ ⊢ ?_2 : T → G Γ ⊢ ?_1 : T
+ncut T; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ (?_2 ?_1) : G
+
+
+ Γ ⊢ ? : ∀x.P(x)
+ngeneralize in match t; ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
+ Γ ⊢ (? t) : P(t)
+
+
+ nrewrite < Ed; napply cG;
+##| #a; #i; #f; #Hf; nchange with (G ⊆ { y | ∀x. y ∈ F⎽(f x) });
+ #b; #Hb; #d; napply (Hf d); napply Hb;
+##]
+nqed.
+</code></pre>
+
+<p><date>
+Last updated: $Date: 2009-10-28 15:46:19 +0100 (Wed, 28 Oct 2009) $
+</date></p>
+ </body>
+</html>
--- /dev/null
+pre.sh_sourceCode {\r
+ background-color: white;\r
+ color: black;\r
+ font-style: normal;\r
+ font-weight: normal;\r
+}\r
+\r
+pre.sh_sourceCode .sh_keyword { color: brown; font-weight: bold; } /* language keywords */\r
+pre.sh_sourceCode .sh_type { color: darkgreen; font-weight: bold; } /* basic types */\r
+pre.sh_sourceCode .sh_usertype { color: teal; } /* user defined types */\r
+pre.sh_sourceCode .sh_string { color: magenta; font-family: monospace; } /* strings and chars */\r
+pre.sh_sourceCode .sh_regexp { color: orange; font-family: monospace; } /* regular expressions */\r
+pre.sh_sourceCode .sh_specialchar { color: pink; font-family: monospace; } /* e.g., \n, \t, \\ */\r
+pre.sh_sourceCode .sh_comment { color: blue; } /* comments */\r
+pre.sh_sourceCode .sh_number { color: black; } /* literal numbers */\r
+pre.sh_sourceCode .sh_preproc { color: MediumSeaGreen; } /* e.g., #include, import */\r
+pre.sh_sourceCode .sh_symbol { color:brown; font-weight: bold; } /* e.g., <, >, + */\r
+pre.sh_sourceCode .sh_function { color: black; font-weight: bold; } /* function calls and declarations */\r
+pre.sh_sourceCode .sh_cbracket { color: red; } /* block brackets (e.g., {, }) */\r
+pre.sh_sourceCode .sh_todo { font-weight: bold; background-color: cyan; } /* TODO and FIXME */\r
+\r
+/* Predefined variables and functions (for instance glsl) */\r
+pre.sh_sourceCode .sh_predef_var { color: darkblue; }\r
+pre.sh_sourceCode .sh_predef_func { color: darkblue; font-weight: bold; }\r
+\r
+/* for OOP */\r
+pre.sh_sourceCode .sh_classname { color: teal; }\r
+\r
+/* line numbers (not yet implemented) */\r
+pre.sh_sourceCode .sh_linenum { color: black; font-family: monospace; }\r
+\r
+/* Internet related */\r
+pre.sh_sourceCode .sh_url { color: blue; text-decoration: underline; font-family: monospace; }\r
+\r
+/* for ChangeLog and Log files */\r
+pre.sh_sourceCode .sh_date { color: blue; font-weight: bold; }\r
+pre.sh_sourceCode .sh_time, pre.sh_sourceCode .sh_file { color: darkblue; font-weight: bold; }\r
+pre.sh_sourceCode .sh_ip, pre.sh_sourceCode .sh_name { color: darkgreen; }\r
+\r
+/* for Prolog, Perl... */\r
+pre.sh_sourceCode .sh_variable { color: darkgreen; }\r
+\r
+/* for LaTeX */\r
+pre.sh_sourceCode .sh_italics { color: darkgreen; font-style: italic; }\r
+pre.sh_sourceCode .sh_bold { color: darkgreen; font-weight: bold; }\r
+pre.sh_sourceCode .sh_underline { color: darkgreen; text-decoration: underline; }\r
+pre.sh_sourceCode .sh_fixed { color: green; font-family: monospace; }\r
+pre.sh_sourceCode .sh_argument { color: darkgreen; }\r
+pre.sh_sourceCode .sh_optionalargument { color: purple; }\r
+pre.sh_sourceCode .sh_math { color: orange; }\r
+pre.sh_sourceCode .sh_bibtex { color: blue; }\r
+\r
+/* for diffs */\r
+pre.sh_sourceCode .sh_oldfile { color: orange; }\r
+pre.sh_sourceCode .sh_newfile { color: darkgreen; }\r
+pre.sh_sourceCode .sh_difflines { color: blue; }\r
+\r
+/* for css */\r
+pre.sh_sourceCode .sh_selector { color: purple; }\r
+pre.sh_sourceCode .sh_property { color: blue; }\r
+pre.sh_sourceCode .sh_value { color: darkgreen; font-style: italic; }\r
+\r
+/* other */\r
+pre.sh_sourceCode .sh_section { color: black; font-weight: bold; }\r
+pre.sh_sourceCode .sh_paren { color: red; }\r
+pre.sh_sourceCode .sh_attribute { color: darkgreen; }\r
--- /dev/null
+if (! this.sh_languages) {
+ this.sh_languages = {};
+}
+sh_languages['grafite'] = [
+ [
+ [
+ /\b(?:napply|ncases|nelim|nletin|ncut|nauto|nwhd|nnormalize|nassumption|ngeneralize|nchange|nrewrite|nlapply)\b/g,
+ 'sh_preproc',
+ -1
+ ],
+ [
+ /\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,
+ 'sh_number',
+ -1
+ ],
+ [
+ /"/g,
+ 'sh_string',
+ 1
+ ],
+ [
+ /\b(?:match|with|in|naxiom|nlemma|ntheorem|nrecord|for|ninductive|ncoinductive|ndefinition|nlet|rec|corec|notation|interpretation|nqed|include)\b/g,
+ 'sh_keyword',
+ -1
+ ],
+ [
+ /\(\*/g,
+ 'sh_comment',
+ 2
+ ],
+ [
+ /\b(?:CProp|Type|Prop)\b/g,
+ 'sh_type',
+ -1
+ ],
+ [
+ /\[|\]|\||\$|@|\{|\}/g,
+ 'sh_symbol',
+ -1
+ ]
+ ],
+ [
+ [
+ /$/g,
+ null,
+ -2
+ ],
+ [
+ /\\(?:\\|")/g,
+ null,
+ -1
+ ],
+ [
+ /"/g,
+ 'sh_string',
+ -2
+ ]
+ ],
+ [
+ [
+ /\*\)/g,
+ 'sh_comment',
+ -2
+ ],
+ [
+ /\(\*/g,
+ 'sh_comment',
+ 2
+ ]
+ ]
+];
--- /dev/null
+/*\r
+SHJS - Syntax Highlighting in JavaScript\r
+Copyright (C) 2007, 2008 gnombat@users.sourceforge.net\r
+License: http://shjs.sourceforge.net/doc/gplv3.html\r
+*/\r
+\r
+if (! this.sh_languages) {\r
+ this.sh_languages = {};\r
+}\r
+var sh_requests = {};\r
+\r
+function sh_isEmailAddress(url) {\r
+ if (/^mailto:/.test(url)) {\r
+ return false;\r
+ }\r
+ return url.indexOf('@') !== -1;\r
+}\r
+\r
+function sh_setHref(tags, numTags, inputString) {\r
+ var url = inputString.substring(tags[numTags - 2].pos, tags[numTags - 1].pos);\r
+ if (url.length >= 2 && url.charAt(0) === '<' && url.charAt(url.length - 1) === '>') {\r
+ url = url.substr(1, url.length - 2);\r
+ }\r
+ if (sh_isEmailAddress(url)) {\r
+ url = 'mailto:' + url;\r
+ }\r
+ tags[numTags - 2].node.href = url;\r
+}\r
+\r
+/*\r
+Konqueror has a bug where the regular expression /$/g will not match at the end\r
+of a line more than once:\r
+\r
+ var regex = /$/g;\r
+ var match;\r
+\r
+ var line = '1234567890';\r
+ regex.lastIndex = 10;\r
+ match = regex.exec(line);\r
+\r
+ var line2 = 'abcde';\r
+ regex.lastIndex = 5;\r
+ match = regex.exec(line2); // fails\r
+*/\r
+function sh_konquerorExec(s) {\r
+ var result = [''];\r
+ result.index = s.length;\r
+ result.input = s;\r
+ return result;\r
+}\r
+\r
+/**\r
+Highlights all elements containing source code in a text string. The return\r
+value is an array of objects, each representing an HTML start or end tag. Each\r
+object has a property named pos, which is an integer representing the text\r
+offset of the tag. Every start tag also has a property named node, which is the\r
+DOM element started by the tag. End tags do not have this property.\r
+@param inputString a text string\r
+@param language a language definition object\r
+@return an array of tag objects\r
+*/\r
+function sh_highlightString(inputString, language) {\r
+ if (/Konqueror/.test(navigator.userAgent)) {\r
+ if (! language.konquered) {\r
+ for (var s = 0; s < language.length; s++) {\r
+ for (var p = 0; p < language[s].length; p++) {\r
+ var r = language[s][p][0];\r
+ if (r.source === '$') {\r
+ r.exec = sh_konquerorExec;\r
+ }\r
+ }\r
+ }\r
+ language.konquered = true;\r
+ }\r
+ }\r
+\r
+ var a = document.createElement('a');\r
+ var span = document.createElement('span');\r
+\r
+ // the result\r
+ var tags = [];\r
+ var numTags = 0;\r
+\r
+ // each element is a pattern object from language\r
+ var patternStack = [];\r
+\r
+ // the current position within inputString\r
+ var pos = 0;\r
+\r
+ // the name of the current style, or null if there is no current style\r
+ var currentStyle = null;\r
+\r
+ var output = function(s, style) {\r
+ var length = s.length;\r
+ // this is more than just an optimization - we don't want to output empty <span></span> elements\r
+ if (length === 0) {\r
+ return;\r
+ }\r
+ if (! style) {\r
+ var stackLength = patternStack.length;\r
+ if (stackLength !== 0) {\r
+ var pattern = patternStack[stackLength - 1];\r
+ // check whether this is a state or an environment\r
+ if (! pattern[3]) {\r
+ // it's not a state - it's an environment; use the style for this environment\r
+ style = pattern[1];\r
+ }\r
+ }\r
+ }\r
+ if (currentStyle !== style) {\r
+ if (currentStyle) {\r
+ tags[numTags++] = {pos: pos};\r
+ if (currentStyle === 'sh_url') {\r
+ sh_setHref(tags, numTags, inputString);\r
+ }\r
+ }\r
+ if (style) {\r
+ var clone;\r
+ if (style === 'sh_url') {\r
+ clone = a.cloneNode(false);\r
+ }\r
+ else {\r
+ clone = span.cloneNode(false);\r
+ }\r
+ clone.className = style;\r
+ tags[numTags++] = {node: clone, pos: pos};\r
+ }\r
+ }\r
+ pos += length;\r
+ currentStyle = style;\r
+ };\r
+\r
+ var endOfLinePattern = /\r\n|\r|\n/g;\r
+ endOfLinePattern.lastIndex = 0;\r
+ var inputStringLength = inputString.length;\r
+ while (pos < inputStringLength) {\r
+ var start = pos;\r
+ var end;\r
+ var startOfNextLine;\r
+ var endOfLineMatch = endOfLinePattern.exec(inputString);\r
+ if (endOfLineMatch === null) {\r
+ end = inputStringLength;\r
+ startOfNextLine = inputStringLength;\r
+ }\r
+ else {\r
+ end = endOfLineMatch.index;\r
+ startOfNextLine = endOfLinePattern.lastIndex;\r
+ }\r
+\r
+ var line = inputString.substring(start, end);\r
+\r
+ var matchCache = [];\r
+ for (;;) {\r
+ var posWithinLine = pos - start;\r
+\r
+ var stateIndex;\r
+ var stackLength = patternStack.length;\r
+ if (stackLength === 0) {\r
+ stateIndex = 0;\r
+ }\r
+ else {\r
+ // get the next state\r
+ stateIndex = patternStack[stackLength - 1][2];\r
+ }\r
+\r
+ var state = language[stateIndex];\r
+ var numPatterns = state.length;\r
+ var mc = matchCache[stateIndex];\r
+ if (! mc) {\r
+ mc = matchCache[stateIndex] = [];\r
+ }\r
+ var bestMatch = null;\r
+ var bestPatternIndex = -1;\r
+ for (var i = 0; i < numPatterns; i++) {\r
+ var match;\r
+ if (i < mc.length && (mc[i] === null || posWithinLine <= mc[i].index)) {\r
+ match = mc[i];\r
+ }\r
+ else {\r
+ var regex = state[i][0];\r
+ regex.lastIndex = posWithinLine;\r
+ match = regex.exec(line);\r
+ mc[i] = match;\r
+ }\r
+ if (match !== null && (bestMatch === null || match.index < bestMatch.index)) {\r
+ bestMatch = match;\r
+ bestPatternIndex = i;\r
+ if (match.index === posWithinLine) {\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (bestMatch === null) {\r
+ output(line.substring(posWithinLine), null);\r
+ break;\r
+ }\r
+ else {\r
+ // got a match\r
+ if (bestMatch.index > posWithinLine) {\r
+ output(line.substring(posWithinLine, bestMatch.index), null);\r
+ }\r
+\r
+ var pattern = state[bestPatternIndex];\r
+\r
+ var newStyle = pattern[1];\r
+ var matchedString;\r
+ if (newStyle instanceof Array) {\r
+ for (var subexpression = 0; subexpression < newStyle.length; subexpression++) {\r
+ matchedString = bestMatch[subexpression + 1];\r
+ output(matchedString, newStyle[subexpression]);\r
+ }\r
+ }\r
+ else {\r
+ matchedString = bestMatch[0];\r
+ output(matchedString, newStyle);\r
+ }\r
+\r
+ switch (pattern[2]) {\r
+ case -1:\r
+ // do nothing\r
+ break;\r
+ case -2:\r
+ // exit\r
+ patternStack.pop();\r
+ break;\r
+ case -3:\r
+ // exitall\r
+ patternStack.length = 0;\r
+ break;\r
+ default:\r
+ // this was the start of a delimited pattern or a state/environment\r
+ patternStack.push(pattern);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ // end of the line\r
+ if (currentStyle) {\r
+ tags[numTags++] = {pos: pos};\r
+ if (currentStyle === 'sh_url') {\r
+ sh_setHref(tags, numTags, inputString);\r
+ }\r
+ currentStyle = null;\r
+ }\r
+ pos = startOfNextLine;\r
+ }\r
+\r
+ return tags;\r
+}\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+// DOM-dependent functions\r
+\r
+function sh_getClasses(element) {\r
+ var result = [];\r
+ var htmlClass = element.className;\r
+ if (htmlClass && htmlClass.length > 0) {\r
+ var htmlClasses = htmlClass.split(' ');\r
+ for (var i = 0; i < htmlClasses.length; i++) {\r
+ if (htmlClasses[i].length > 0) {\r
+ result.push(htmlClasses[i]);\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+}\r
+\r
+function sh_addClass(element, name) {\r
+ var htmlClasses = sh_getClasses(element);\r
+ for (var i = 0; i < htmlClasses.length; i++) {\r
+ if (name.toLowerCase() === htmlClasses[i].toLowerCase()) {\r
+ return;\r
+ }\r
+ }\r
+ htmlClasses.push(name);\r
+ element.className = htmlClasses.join(' ');\r
+}\r
+\r
+/**\r
+Extracts the tags from an HTML DOM NodeList.\r
+@param nodeList a DOM NodeList\r
+@param result an object with text, tags and pos properties\r
+*/\r
+function sh_extractTagsFromNodeList(nodeList, result) {\r
+ var length = nodeList.length;\r
+ for (var i = 0; i < length; i++) {\r
+ var node = nodeList.item(i);\r
+ switch (node.nodeType) {\r
+ case 1:\r
+ if (node.nodeName.toLowerCase() === 'br') {\r
+ var terminator;\r
+ if (/MSIE/.test(navigator.userAgent)) {\r
+ terminator = '\r';\r
+ }\r
+ else {\r
+ terminator = '\n';\r
+ }\r
+ result.text.push(terminator);\r
+ result.pos++;\r
+ }\r
+ else {\r
+ result.tags.push({node: node.cloneNode(false), pos: result.pos});\r
+ sh_extractTagsFromNodeList(node.childNodes, result);\r
+ result.tags.push({pos: result.pos});\r
+ }\r
+ break;\r
+ case 3:\r
+ case 4:\r
+ result.text.push(node.data);\r
+ result.pos += node.length;\r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+/**\r
+Extracts the tags from the text of an HTML element. The extracted tags will be\r
+returned as an array of tag objects. See sh_highlightString for the format of\r
+the tag objects.\r
+@param element a DOM element\r
+@param tags an empty array; the extracted tag objects will be returned in it\r
+@return the text of the element\r
+@see sh_highlightString\r
+*/\r
+function sh_extractTags(element, tags) {\r
+ var result = {};\r
+ result.text = [];\r
+ result.tags = tags;\r
+ result.pos = 0;\r
+ sh_extractTagsFromNodeList(element.childNodes, result);\r
+ return result.text.join('');\r
+}\r
+\r
+/**\r
+Merges the original tags from an element with the tags produced by highlighting.\r
+@param originalTags an array containing the original tags\r
+@param highlightTags an array containing the highlighting tags - these must not overlap\r
+@result an array containing the merged tags\r
+*/\r
+function sh_mergeTags(originalTags, highlightTags) {\r
+ var numOriginalTags = originalTags.length;\r
+ if (numOriginalTags === 0) {\r
+ return highlightTags;\r
+ }\r
+\r
+ var numHighlightTags = highlightTags.length;\r
+ if (numHighlightTags === 0) {\r
+ return originalTags;\r
+ }\r
+\r
+ var result = [];\r
+ var originalIndex = 0;\r
+ var highlightIndex = 0;\r
+\r
+ while (originalIndex < numOriginalTags && highlightIndex < numHighlightTags) {\r
+ var originalTag = originalTags[originalIndex];\r
+ var highlightTag = highlightTags[highlightIndex];\r
+\r
+ if (originalTag.pos <= highlightTag.pos) {\r
+ result.push(originalTag);\r
+ originalIndex++;\r
+ }\r
+ else {\r
+ result.push(highlightTag);\r
+ if (highlightTags[highlightIndex + 1].pos <= originalTag.pos) {\r
+ highlightIndex++;\r
+ result.push(highlightTags[highlightIndex]);\r
+ highlightIndex++;\r
+ }\r
+ else {\r
+ // new end tag\r
+ result.push({pos: originalTag.pos});\r
+\r
+ // new start tag\r
+ highlightTags[highlightIndex] = {node: highlightTag.node.cloneNode(false), pos: originalTag.pos};\r
+ }\r
+ }\r
+ }\r
+\r
+ while (originalIndex < numOriginalTags) {\r
+ result.push(originalTags[originalIndex]);\r
+ originalIndex++;\r
+ }\r
+\r
+ while (highlightIndex < numHighlightTags) {\r
+ result.push(highlightTags[highlightIndex]);\r
+ highlightIndex++;\r
+ }\r
+\r
+ return result;\r
+}\r
+\r
+/**\r
+Inserts tags into text.\r
+@param tags an array of tag objects\r
+@param text a string representing the text\r
+@return a DOM DocumentFragment representing the resulting HTML\r
+*/\r
+function sh_insertTags(tags, text) {\r
+ var doc = document;\r
+\r
+ var result = document.createDocumentFragment();\r
+ var tagIndex = 0;\r
+ var numTags = tags.length;\r
+ var textPos = 0;\r
+ var textLength = text.length;\r
+ var currentNode = result;\r
+\r
+ // output one tag or text node every iteration\r
+ while (textPos < textLength || tagIndex < numTags) {\r
+ var tag;\r
+ var tagPos;\r
+ if (tagIndex < numTags) {\r
+ tag = tags[tagIndex];\r
+ tagPos = tag.pos;\r
+ }\r
+ else {\r
+ tagPos = textLength;\r
+ }\r
+\r
+ if (tagPos <= textPos) {\r
+ // output the tag\r
+ if (tag.node) {\r
+ // start tag\r
+ var newNode = tag.node;\r
+ currentNode.appendChild(newNode);\r
+ currentNode = newNode;\r
+ }\r
+ else {\r
+ // end tag\r
+ currentNode = currentNode.parentNode;\r
+ }\r
+ tagIndex++;\r
+ }\r
+ else {\r
+ // output text\r
+ currentNode.appendChild(doc.createTextNode(text.substring(textPos, tagPos)));\r
+ textPos = tagPos;\r
+ }\r
+ }\r
+\r
+ return result;\r
+}\r
+\r
+/**\r
+Highlights an element containing source code. Upon completion of this function,\r
+the element will have been placed in the "sh_sourceCode" class.\r
+@param element a DOM <pre> element containing the source code to be highlighted\r
+@param language a language definition object\r
+*/\r
+function sh_highlightElement(element, language) {\r
+ sh_addClass(element, 'sh_sourceCode');\r
+ var originalTags = [];\r
+ var inputString = sh_extractTags(element, originalTags);\r
+ var highlightTags = sh_highlightString(inputString, language);\r
+ var tags = sh_mergeTags(originalTags, highlightTags);\r
+ var documentFragment = sh_insertTags(tags, inputString);\r
+ while (element.hasChildNodes()) {\r
+ element.removeChild(element.firstChild);\r
+ }\r
+ element.appendChild(documentFragment);\r
+}\r
+\r
+function sh_getXMLHttpRequest() {\r
+ if (window.ActiveXObject) {\r
+ return new ActiveXObject('Msxml2.XMLHTTP');\r
+ }\r
+ else if (window.XMLHttpRequest) {\r
+ return new XMLHttpRequest();\r
+ }\r
+ throw 'No XMLHttpRequest implementation available';\r
+}\r
+\r
+function sh_load(language, element, prefix, suffix) {\r
+ if (language in sh_requests) {\r
+ sh_requests[language].push(element);\r
+ return;\r
+ }\r
+ sh_requests[language] = [element];\r
+ var request = sh_getXMLHttpRequest();\r
+ var url = prefix + 'sh_' + language + suffix;\r
+ request.open('GET', url, true);\r
+ request.onreadystatechange = function () {\r
+ if (request.readyState === 4) {\r
+ try {\r
+ if (! request.status || request.status === 200) {\r
+ eval(request.responseText);\r
+ var elements = sh_requests[language];\r
+ for (var i = 0; i < elements.length; i++) {\r
+ sh_highlightElement(elements[i], sh_languages[language]);\r
+ }\r
+ }\r
+ else {\r
+ throw 'HTTP error: status ' + request.status;\r
+ }\r
+ }\r
+ finally {\r
+ request = null;\r
+ }\r
+ }\r
+ };\r
+ request.send(null);\r
+}\r
+\r
+/**\r
+Highlights all elements containing source code on the current page. Elements\r
+containing source code must be "pre" elements with a "class" attribute of\r
+"sh_LANGUAGE", where LANGUAGE is a valid language identifier; e.g., "sh_java"\r
+identifies the element as containing "java" language source code.\r
+*/\r
+function sh_highlightDocument(prefix, suffix) {\r
+ var nodeList = document.getElementsByTagName('pre');\r
+ for (var i = 0; i < nodeList.length; i++) {\r
+ var element = nodeList.item(i);\r
+ var htmlClasses = sh_getClasses(element);\r
+ for (var j = 0; j < htmlClasses.length; j++) {\r
+ var htmlClass = htmlClasses[j].toLowerCase();\r
+ if (htmlClass === 'sh_sourcecode') {\r
+ continue;\r
+ }\r
+ if (htmlClass.substr(0, 3) === 'sh_') {\r
+ var language = htmlClass.substring(3);\r
+ if (language in sh_languages) {\r
+ sh_highlightElement(element, sh_languages[language]);\r
+ }\r
+ else if (typeof(prefix) === 'string' && typeof(suffix) === 'string') {\r
+ sh_load(language, element, prefix, suffix);\r
+ }\r
+ else {\r
+ throw 'Found <pre> element with class="' + htmlClass + '", but no such language exists';\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ }\r
+}\r
trivial, we thus suggest that you try the live DVD instead.</dd>
</dl>
- <h2>Old releases (unsupported)<a name="releases"></a></h2>
+ <h2>Old releases (unsupported, but still used for teaching at the University of Bologna)<a name="releases"></a></h2>
<p>
- Version is 0.5.8, released on January 8, 2010. Here the
- <a href="http://helm.cs.unibo.it/websvn/filedetails.php?repname=helm&path=%2Ftrunk%2Fhelm%2Fsoftware%2Fmatita%2Fdist%2FChangeLog&rev=0&sc=0">ChangeLog</a>.
+ Version is 0.5.9, released on December 23, 2014.
+ It is an update of version 0.5.8 to compile with the latter OCaml version
+ and libraries.
+ <!-- Here the
+ <a href="http://helm.cs.unibo.it/websvn/filedetails.php?repname=helm&path=%2Ftrunk%2Fhelm%2Fsoftware%2Fmatita%2Fdist%2FChangeLog&rev=0&sc=0">ChangeLog</a>. -->
</p>
<dl>
<dt>Live CD</dt>
<dd>The <a href="FILES/matita-0.5.8.iso">live CD</a> (around 530
MB, md5sum:
9a6912765eacaaa7f96d7d6d6b34add5
- )
+ ) for Matita version 0.5.8
is the easiest way to try Matita. You can burn the CD image
and boot you computer from the CD, or install a free emulator like <a
href="http://virtualbox.org">virtualbox</a> and boot a virtual
machine from the CD image. Virtualbox is available for Mac OS X,
Windows and Linux. A short guide to VirtualBox is part of the
- <a href="docs/manual/html">Matita manual</a><br/>
+ <a href="docs/manual-0.5.9">Matita manual</a><br/>
</dd>
<dt>.deb package</dt>
+
+ <dd>We provide the Debian packages for <a href="FILES/matita_0.5.9_amd64.deb">matita</a> (md5sum 1f7ff2c99fcf73380e6137ba4e6b537e) and its <a href="FILES/matita-doc_0.5.9_all.deb">doc</a> (md5sum 14b255f5dfd984acda2ffd7ab154ac8f) for Wheezy amd64.</dd>
- <dd>Matita is part of the <a
+ <!-- <dd>Matita is part of the <a
href="http://packages.debian.org/source/matita"> Debian archive</a>, you can
install it with the following command:<pre>aptitude install matita</pre>
- </dd>
+ </dd> -->
<dt>Sources</dt>
<dd>You can download the <a
- href="FILES/matita-0.5.8.orig.tar.gz">sources</a> of Matita (around 6 MB, md5sum:
-125223d3dc522c4ac063a66f5d46df69
+ href="FILES/matita-0.5.9.tar.gz">sources</a> of Matita (around 6 MB, md5sum:
+0f2f66a4a8acc5f48b2cd77cfd8d824e
)
and
build it by yourself, following the <a
- href="docs/manual/html/sec_install.html">installation instructions</a>.
+ href="docs/manual-0.5.9/sec_install.html">installation instructions</a>.
The build process, due to the high number of external dependency is not
trivial, we thus suggest you to try the live CD or the .deb package
first.</dd>
<p>The CerCo project is a FET Open IST project funded by the EU
community in the 7th Framework Programme. More informations on the
project and the code of the Matita formalization can be found
- on the <a href="cerco.cs.unibo.it">CerCo Web site</a>
+ on the <a href="http://cerco.cs.unibo.it">CerCo Web site</a>
</p>
<h2>The Basic Picture<a name="sambin"></a></h2>
<div class="news">
<div class="newsheader">News</div>
<ul class="news">
+ <li><span class="date">23 December 2014</span><br />
+ Legacy matita release 0.5.9 available for <a href="download.shtml">download</a>.
+ </li>
<li><span class="date">13 March 2012</span><br />
The <a href="matitaweb.shtml">Matita web app</a> is now publicly accessible
online (<a href="http://pandemia.helm.cs.unibo.it/login.html">go</a>).