- <para>The tactic <command>contradiction</command> </para>
- </sect2>
- <sect2 id="tac_cut">
- <title>cut <term> [as <id>]</title>
- <para>The tactic <command>cut</command> </para>
- </sect2>
- <sect2 id="tac_decide_equality">
- <title>decide</title>
- <para>The tactic <command>decide equality</command> </para>
- </sect2>
- <sect2 id="tac_decompose">
- <title>decompose [<ident list>] <ident> [<intros_spec>]</title>
- <para>The tactic <command>decompose</command> </para>
- </sect2>
- <sect2 id="tac_discriminate">
- <title>discriminate <term></title>
- <para>The tactic <command>discriminate</command> </para>
- </sect2>
- <sect2 id="tac_elim">
- <title>elim <term> [using <term>] [<intros_spec>]</title>
- <para>The tactic <command>elim</command> </para>
- </sect2>
- <sect2 id="tac_elimType">
- <title>elimType <term> [using <term>]</title>
- <para>The tactic <command>elimType</command> </para>
- </sect2>
- <sect2 id="tac_exact">
- <title>exact <term></title>
- <para>The tactic <command>exact</command> </para>
- </sect2>
- <sect2 id="tac_exists">
+ <titleabbrev>contradiction</titleabbrev>
+ <para><userinput>contradiction </userinput></para>
+ <para>
+ <variablelist>
+ <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 &sterm; [as &id;]</title>
+ <titleabbrev>cut</titleabbrev>
+ <para><userinput>cut P as H</userinput></para>
+ <para>
+ <variablelist>
+ <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 &id; [&id;]… [<intros_spec>]</title>
+ <titleabbrev>decompose</titleabbrev>
+ <para><userinput>decompose ???</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para>TODO.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>TODO.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>New sequents to prove:</term>
+ <listitem>
+ <para>TODO.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect1>
+ <sect1 id="tac_discriminate">
+ <title>discriminate &sterm;</title>
+ <titleabbrev>discriminate</titleabbrev>
+ <para><userinput>discriminate p</userinput></para>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>Pre-conditions:</term>
+ <listitem>
+ <para><command>p</command> must have type <command>K t<subscript>1</subscript> ... t<subscript>n</subscript> = K' t'<subscript>1</subscript> ... t'<subscript>m</subscript></command> where <command>K</command> and <command>K'</command> must be different constructors of the same inductive type and each argument list can be empty if
+its constructor takes no arguments.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Action:</term>
+ <listitem>
+ <para>It closes the current sequent by proving the absurdity of
+ <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_elim">
+ <title>elim &sterm; [using &sterm;] [<intros_spec>]</title>
+ <titleabbrev>elim</titleabbrev>
+ <para><userinput>elim t using th hyps</userinput></para>
+ <para>
+ <variablelist>
+ <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>.
+ </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 &sterm; [using &sterm;] [<intros_spec>]</title>
+ <titleabbrev>elimType</titleabbrev>
+ <para><userinput>elimType T using th hyps</userinput></para>
+ <para>
+ <variablelist>
+ <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 &sterm;</title>
+ <titleabbrev>exact</titleabbrev>
+ <para><userinput>exact p</userinput></para>
+ <para>
+ <variablelist>
+ <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">