<title>cases</title>
<titleabbrev>cases</titleabbrev>
<para><userinput>
- cases t hyps
+ cases t pattern hyps
</userinput></para>
<para>
<variablelist>
<listitem>
<para>
<emphasis role="bold">cases</emphasis>
- &term; [<emphasis role="bold">(</emphasis>[&id;]…<emphasis role="bold">)</emphasis>]
+ &term; &pattern; [<emphasis role="bold">(</emphasis>[&id;]…<emphasis role="bold">)</emphasis>]
</para>
</listitem>
</varlistentry>
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>
<!-- ============ User Notation ====================== -->
<chapter id="sec_usernotation">
<title>Extending the syntax</title>
- Introduction: TODO
+ 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">
- notation: &TODO;
+ <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">left</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>&TODO;</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>&TODO;</entry>
+ <entry>&TODO;</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
</para>
</sect1>
<sect1>
<listitem>
<para><emphasis role="bold">interpretation</emphasis>
&qstring; &csymbol; [&interpretation_argument;]…
- <emphasis role="bol">=</emphasis>
+ <emphasis role="bold">=</emphasis>
&interpretation_rhs;
</para>
</listitem>