<term>Pre-conditions:</term>
<listitem>
<para><command>t</command> must have type
- <command>T<subscript>1</subscript> → ... →
+ <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>
<varlistentry role="tactic.synopsis">
<term>Synopsis:</term>
<listitem>
- <para><emphasis role="bold">auto</emphasis> &autoparams;</para>
+ <para><emphasis role="bold">auto</emphasis> &autoparams;. </para>
+ <para><emphasis role="bold">autobatch</emphasis> &autoparams;</para>
</listitem>
</varlistentry>
<varlistentry>
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 ...&TODO;</para>
+ a sequent is essentially the set of constats appearing in it.
+ </para>
</listitem>
</varlistentry>
<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>
</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>
<title>decompose</title>
<titleabbrev>decompose</titleabbrev>
<para><userinput>
- decompose (T<subscript>1</subscript> ... T<subscript>n</subscript>)
- H as H<subscript>1</subscript> ... H<subscript>m</subscript>
+ decompose as H<subscript>1</subscript> ... H<subscript>m</subscript>
</userinput></para>
<para>
<variablelist>
<listitem>
<para>
<emphasis role="bold">decompose</emphasis>
- [<emphasis role="bold">(</emphasis>
- &id;…
- <emphasis role="bold">)</emphasis>]
- [&id;]
[<emphasis role="bold">as</emphasis> &id;…]
</para>
</listitem>
<varlistentry>
<term>Pre-conditions:</term>
<listitem>
- <para>
- <command>H</command> must inhabit one inductive type among
- <command>
- T<subscript>1</subscript> ... T<subscript>n</subscript>
- </command>
- and the types of a predefined list.
- </para>
+ <para>None.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Action:</term>
<listitem>
<para>
- Runs <command>
- elim H H<subscript>1</subscript> ... H<subscript>m</subscript>
- </command>, clears <command>H</command> and tries to run itself
- recursively on each new identifier introduced by
+ 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.
- If <command>H</command> is not provided tries this operation on
- each premise in the current context.
</para>
</listitem>
</varlistentry>
<sect1 id="tac_demodulate">
<title>demodulate</title>
<titleabbrev>demodulate</titleabbrev>
- <para><userinput>demodulate</userinput></para>
+ <para><userinput>demodulate auto_params</userinput></para>
<para>
<variablelist>
<varlistentry role="tactic.synopsis">
<term>Synopsis:</term>
<listitem>
- <para><emphasis role="bold">demodulate</emphasis></para>
+ <para><emphasis role="bold">demodulate</emphasis> &autoparams;</para>
</listitem>
</varlistentry>
<varlistentry>
<sect1 id="tac_elim">
<title>elim</title>
<titleabbrev>elim</titleabbrev>
- <para><userinput>elim t using th hyps</userinput></para>
+ <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; [<emphasis role="bold">using</emphasis> &sterm;] &intros-spec;</para>
+ <para><emphasis role="bold">elim</emphasis> &sterm; &pattern; [<emphasis role="bold">using</emphasis> &sterm;] &intros-spec;</para>
</listitem>
</varlistentry>
<varlistentry>
<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>
</variablelist>
</para>
</sect1>
- <sect1 id="tac_reduce">
- <title>reduce</title>
- <titleabbrev>reduce</titleabbrev>
- <para><userinput>reduce patt</userinput></para>
- <para>
- <variablelist>
- <varlistentry role="tactic.synopsis">
- <term>Synopsis:</term>
- <listitem>
- <para><emphasis role="bold">reduce</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>