286 |
286 |
287 |
287 |
288 |
288 |
289 \subsection{Proof methods}\label{sec:syn-meth} |
289 \subsection{Proof methods}\label{sec:syn-meth} |
290 |
290 |
291 Proof methods are either basic ones, or expressions composed of methods via |
291 Proof methods are either basic ones, or expressions composed of |
292 ``\texttt{,}'' (sequential composition), ``\texttt{|}'' (alternative choices), |
292 methods via ``\texttt{,}'' (sequential composition), ``\texttt{|}'' |
293 ``\texttt{?}'' (try), ``\texttt{+}'' (repeat at least once). In practice, |
293 (alternative choices), ``\texttt{?}'' (try), ``\texttt{+}'' (repeat at |
294 proof methods are usually just a comma separated list of |
294 least once), ``\texttt{[$n$]}'' (restriction to first $n$ sub-goals). |
295 \railqtok{nameref}~\railnonterm{args} specifications. Note that parentheses |
295 In practice, proof methods are usually just a comma separated list of |
296 may be dropped for single method specifications (with no arguments). |
296 \railqtok{nameref}~\railnonterm{args} specifications. Note that |
|
297 parentheses may be dropped for single method specifications (with no |
|
298 arguments). |
297 |
299 |
298 \indexouternonterm{method} |
300 \indexouternonterm{method} |
299 \begin{rail} |
301 \begin{rail} |
300 method: (nameref | '(' methods ')') (() | '?' | '+') |
302 method: (nameref | '(' methods ')') (() | '?' | '+' | '[' nat ']') |
301 ; |
303 ; |
302 methods: (nameref args | method) + (',' | '|') |
304 methods: (nameref args | method) + (',' | '|') |
303 ; |
305 ; |
304 \end{rail} |
306 \end{rail} |
305 |
307 |