aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc
diff options
context:
space:
mode:
authorGravatar Arnaud Spiwack <arnaud@spiwack.net>2014-10-31 12:39:26 +0100
committerGravatar Arnaud Spiwack <arnaud@spiwack.net>2014-11-01 22:43:57 +0100
commitc717bf2896fbff9361eeefce965dbbea0af0a9ad (patch)
tree171dd38eaec4d790a3d3d372797cbb63cb2c00ac /doc
parent674f353d32ec2dc957a2402e528290c4695e761b (diff)
Document [Info] command.
Diffstat (limited to 'doc')
-rw-r--r--doc/refman/RefMan-ltac.tex54
1 files changed, 52 insertions, 2 deletions
diff --git a/doc/refman/RefMan-ltac.tex b/doc/refman/RefMan-ltac.tex
index ce2cb277c..7e6c0bd12 100644
--- a/doc/refman/RefMan-ltac.tex
+++ b/doc/refman/RefMan-ltac.tex
@@ -503,7 +503,7 @@ $v_2$ and so on. It fails if there is no solving tactic.
\ErrMsg \errindex{Cannot solve the goal}
-\subsubsection[Identity]{Identity\tacindex{idtac}
+\subsubsection[Identity]{Identity\label{ltac:idtac}\tacindex{idtac}
\index{Tacticals!idtac@{\tt idtac}}}
The constant {\tt idtac} is the identity tactic: it leaves any goal
@@ -1028,7 +1028,57 @@ Defined {\ltac} functions can be displayed using the command
{\tt Print Ltac {\qualid}.}
\end{quote}
-\section[Debugging {\ltac} tactics]{Debugging {\ltac} tactics\comindex{Set Ltac Debug}
+\section{Debugging {\ltac} tactics}
+
+\subsection[Info trace]{Info trace\comindex{Info}\comindex{Set Info Level}
+\comindex{Unset Info Level}
+\comindex{Test Info Level}}
+
+It is possible to print the trace of the path eventually taken by an {\ltac} script. That is, the list of executed tactics, discarding all the branches which have failed. To that end the {\tt Info} command can be used with the following syntax.
+
+\begin{quote}
+{\tt Info} {\num} {\tacexpr}.
+\end{quote}
+
+The number {\num} is the unfolding level of tactics in the trace. At level $0$, the trace contains a sequence of tactics in the actual script, at level $1$, the trace will be the concatenation of the traces of these tactics, etc\ldots
+
+\begin{coq_eval}
+Reset Initial.
+\end{coq_eval}
+\begin{coq_example*}
+Ltac t x := exists x; reflexivity.
+
+Goal exists n, n=0.
+\end{coq_example*}
+\begin{coq_example}
+Info 0 t 1||t 0.
+\end{coq_example}
+\begin{coq_example*}
+Undo.
+\end{coq_example*}
+\begin{coq_example}
+Info 1 t 1||t 0.
+\end{coq_example}
+
+The trace produced by {\tt Info} tries its best to be a reparsable {\ltac} script, but this goal is not achievable in all generality. So some of the output traces will contain oddities.
+
+As an additional help for debugging, the trace produced by {\tt Info} contains (in comments) the messages produced by the {\tt idtac} tacticals~\ref{ltac:idtac} at the right possition in the script. In particular, the calls to {\tt idtac} in branches which failed are not printed.
+
+An alternative to the {\tt Info} command is to use the {\tt Info Level} option as follows:
+
+\begin{quote}
+{\tt Set Info Level} \num.
+\end{quote}
+
+This will automatically print the same trace as {\tt Info \num} at each tactic call. The unfolding level can be overridden by a call to the {\tt Info} command. And this option can be turned off with:
+
+\begin{quote}
+{\tt Unset Info Level} \num.
+\end{quote}
+
+The current value for the {\tt Info Level} option can be checked using the {\tt Test Info Level} command.
+
+\subsection[Interactive debugger]{Interactive debugger\comindex{Set Ltac Debug}
\comindex{Unset Ltac Debug}
\comindex{Test Ltac Debug}}