263 |
263 |
264 \subsection{Proof methods}\label{sec:syn-meth} |
264 \subsection{Proof methods}\label{sec:syn-meth} |
265 |
265 |
266 Proof methods are either basic ones, or expressions composed of methods via |
266 Proof methods are either basic ones, or expressions composed of methods via |
267 ``\texttt{,}'' (sequential composition), ``\texttt{|}'' (alternative choices), |
267 ``\texttt{,}'' (sequential composition), ``\texttt{|}'' (alternative choices), |
268 ``\texttt{?}'' (try), ``\texttt{*}'' (repeat ${} \ge 0$ times), ``\texttt{+}'' |
268 ``\texttt{?}'' (try), ``\texttt{+}'' (at least once). In practice, proof |
269 (repeat ${} > 0$ times). In practice, proof methods are usually just a comma |
269 methods are usually just a comma separated list of |
270 separated list of \railqtoken{nameref}~\railnonterm{args} specifications. |
270 \railqtoken{nameref}~\railnonterm{args} specifications. Thus the syntax is |
271 Thus the syntax is similar to that of attributes, with plain parentheses |
271 similar to that of attributes, with plain parentheses instead of square |
272 instead of square brackets. Note that parentheses may be dropped for single |
272 brackets. Note that parentheses may be dropped for single method |
273 method specifications without arguments. |
273 specifications without arguments. |
274 |
274 |
275 \indexouternonterm{method} |
275 \indexouternonterm{method} |
276 \begin{rail} |
276 \begin{rail} |
277 method: (nameref | '(' methods ')') (() | '?' | '*' | '+') |
277 method: (nameref | '(' methods ')') (() | '?' | '+') |
278 ; |
278 ; |
279 methods: (nameref args | method) + (',' | '|') |
279 methods: (nameref args | method) + (',' | '|') |
280 ; |
280 ; |
281 \end{rail} |
281 \end{rail} |
282 |
282 |