Skip to content
Snippets Groups Projects
Commit db678d4e authored by Loïc Correnson's avatar Loïc Correnson
Browse files

[wp] improved manual for using Why-3

parent 5fc42da8
No related branches found
No related tags found
No related merge requests found
...@@ -988,7 +988,7 @@ controlled by the following options: ...@@ -988,7 +988,7 @@ controlled by the following options:
(default is: \texttt{1000}). (default is: \texttt{1000}).
\end{description} \end{description}
\subsection{Decision Procedures Interface} \subsection{Prover Selection}
\label{wp-provers} \label{wp-provers}
The generated proof obligations are submitted to external decision The generated proof obligations are submitted to external decision
...@@ -1103,41 +1103,69 @@ then save the proof scripts in order to replay them in batch mode. ...@@ -1103,41 +1103,69 @@ then save the proof scripts in order to replay them in batch mode.
\item[\tt -wp-coq-project='<name>'] override the \verb+_CoqProject+ file name \item[\tt -wp-coq-project='<name>'] override the \verb+_CoqProject+ file name
for Emacs and Proof General. for Emacs and Proof General.
\end{description} \end{description}
\hrule \hrule
\paragraph{Why3.}
Since \textsf{WP} version \verb+0.7+ (Fluorine), native support for \textsf{Why3} \pagebreak
and \textsf{Why3-Ide} are provided. The older system \textsf{Why} \paragraph{Why-3.}
\verb+2.x+ is \emph{no} longer supported. Native support for \textsf{Why-3} is provided (for versions 1.0 and newer).
\\
Support for \textsf{Why-3 IDE} is no longer provided.
\begin{description} \begin{description}
\item[\tt -wp-prover "why3ide"] runs \textsf{Why3-Ide} with all \item[\tt -wp-prover "why3:<p>"] runs a \textsf{Why-3} prover named \texttt{<p>}, and
generated goals. On exit, the \textsf{WP} plug-in reads back your exactly behaves like invoking \verb+why3 prover -P <p>+. The list of prover
\textsf{Why3} session and updates the proof obligation status accordingly. names \verb+<p>+ must be extracted from the \verb+[alias]+ section of your \textsf{Why-3}
\item[\tt -wp-prover "<p>"] runs a \textsf{Why3} prover named \texttt{<p>}. configuration, which \verb+frama-c -wp-detect+ does for you (see below).
\item[\tt -wp-prover "why3:<p>"] useful alias when \texttt{"<p>"} can \item[\tt -wp-prover "<p>"] can also be used instead of \verb+-wp-prover "why3:<p>"+
be ambiguous. It is actually different to run \texttt{alt-ergo} or \texttt{coq} when \verb+<p>+ is not natively supported by \textsf{WP}, like \texttt{alt-ergo},
directly from \textsf{WP} or through \textsf{Why3}. \texttt{altgr-ergo}, \texttt{coq}, \texttt{coqide}, \texttt{script} and \texttt{tip}.
\item[\tt -wp-detect] lists the provers available with \textsf{Why3}. \item[\tt -wp-detect] lists the provers available for \textsf{Why-3}.
This command calls \texttt{why3 --list-provers} but you have to This command can only work if \textsf{why3} API was installed before building and
configure \textsf{Why3} on your own before, for instance by using installing \textsf{Frama-C}.
\texttt{why3config}. Consult the \textsf{Why3} user manual for details. The option reads your \textsf{Why-3} configuration and prints the available
The listed prover names can be directly used with the \texttt{-wp-prover} option. provers with their \verb+-wp-prover <p>+ code names.
\item[\tt -wp-why3='<cmd>'] override the \verb+why3+ command. \item[\tt -wp-why3='<cmd>'] overrides the path to the \verb+why3+ command.
\end{description} \end{description}
\paragraph{Sessions.} \paragraph{Example of using Why-3.}
Your \textsf{Why3} session is saved in the \texttt{"project.session"} Suppose you have the following configuration:
sub-directory of \texttt{-wp-out}. You may run
\texttt{why3ide} by hand by issuing the following command: \begin{logs}
\begin{shell} # frama-c -wp-detect
# why3ide -I <frama-c-share>/wp <out>/project.session [wp] Why3 provers detected:
\end{shell} - Alt-Ergo 2.0.0 [why3:alt-ergo,altergo]
- CVC4 1.6 [cvc4]
- CVC4 1.6 (counterexamples) [cvc4-ce]
- Coq 8.9.0 [why3:coq]
- Z3 4.6.0 [z3]
- Z3 4.6.0 (counterexamples) [z3-ce]
- Z3 4.6.0 (noBV) [z3-nobv]
\end{logs}
Proof recovering features of \textsf{Why3} are fully available, and Then, to use (for instance) \textsf{CVC4 1.6},
you can interleave proving from \textsf{WP} with manual runs of you can use \verb+-wp-prover cvc4+ (since this name is not conflicting
\texttt{why3ide}. Interactive proofs with \textsf{Why3} are completely with any native prover). Alternatively, you can also use the less ambiguous
separated from those managed by the native \textsf{WP} interface with name \verb+-wp-prover why3:cvc4+ if you prefer.
\textsf{Coq}. Similarly, if you want to use \textsf{Z3 4.6.0} without bitvectors, you can use \verb+-wp-prover z3-nobv+
or \verb+-wp-prover why3:z3-nobv+.
However, to use \textsf{Alt-Ergo 2.0.0} \emph{via} \textsf{Why-3}, you shall use
\verb+-wp-prover why3:alt-ergo+, since \verb+-wp-prover alt-ergo+ would select
the native support of \textsf{Alt-Ergo} prover. Finally, since \textsf{Why-3} also provides the alias
\verb+altergo+ for this prover, \verb+-wp-prover altergo+ will also run it \emph{via} \textsf{Why-3}.
%% \paragraph{Sessions.}
%% Your \textsf{Why3} session is saved in the \texttt{"project.session"}
%% sub-directory of \texttt{-wp-out}. You may run
%% \texttt{why3ide} by hand by issuing the following command:
%% \begin{shell}
%% # why3ide -I <frama-c-share>/wp <out>/project.session
%% \end{shell}
%% Proof recovering features of \textsf{Why3} are fully available, and
%% you can interleave proving from \textsf{WP} with manual runs of
%% \texttt{why3ide}. Interactive proofs with \textsf{Why3} are completely
%% separated from those managed by the native \textsf{WP} interface with
%% \textsf{Coq}.
\subsection{Generated Proof Obligations} \subsection{Generated Proof Obligations}
Your proof obligations are generated and saved to several text Your proof obligations are generated and saved to several text
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment