\documentclass[a4paper,11pt,twoside,openright]{memoir} % rubber: module index \usepackage[T1]{fontenc} %\usepackage{url} \usepackage[a4paper,pdftex,colorlinks=true,urlcolor=blue,pdfstartview=FitH]{hyperref} \usepackage{graphicx} \usepackage{xspace} \setulmarginsandblock{30mm}{30mm}{*} \setlrmarginsandblock{30mm}{30mm}{*} \setheadfoot{15pt}{38pt} \checkandfixthelayout % placement of figures \renewcommand{\textfraction}{0.01} \renewcommand{\topfraction}{0.99} \renewcommand{\bottomfraction}{0.99} \setcounter{topnumber}{4} \setcounter{bottomnumber}{4} \setcounter{totalnumber}{8} %\usepackage[toc,nonumberlist]{glossaries} %\makeglossaries % for ocamldoc generated pages %\usepackage{ocamldoc} \let\tt\ttfamily \let\bf\bfseries \usepackage{ifthen} \input{./macros.tex} \input{./replayer_macros.tex} \input{./version.tex} \makeindex \begin{document} \sloppy \hbadness=1000 \thispagestyle{empty} \begin{center} \rule\textwidth{0.8mm} \vfill {\fontsize{40}{40pt}\selectfont\bfseries\sffamily The Why3 platform} \vfill \rule\textwidth{0.8mm} \vfill \begin{LARGE} Version \whyversion{}, October 2011 \end{LARGE} \vfill \begin{Large} \begin{tabular}{c} Fran\c{c}ois Bobot$^{1,2}$ \\ Jean-Christophe Filli\^atre$^{1,2}$ \\ Claude March\'e$^{2,1}$ \\ Andrei Paskevich$^{1,2}$ \end{tabular} \end{Large} \vfill \begin{flushleft} \begin{tabular}{l} $^1$ LRI, CNRS, Univ Paris-Sud, Orsay, F-91405 \\ $^2$ INRIA Saclay - \^Ile-de-France, ProVal, Orsay, F-91893 \end{tabular} \bigskip \textcopyright 2010-2011 Univ Paris-Sud, CNRS, INRIA This work has been partly supported by the `U3CAT' national ANR project (ANR-08-SEGI-021-08, \url{http://frama-c.cea.fr/u3cat}) and by the Hi-Lite (\url{http://www.open-do.org/projects/hi-lite/}) FUI project of the System@tic competitivity cluster. \end{flushleft} \end{center} \chapter*{Foreword} This is the manual for the Why platform version 3, or \why for short. \why is a complete reimplementation~\cite{boogie11why3} of the former Why platform~\cite{filliatre07cav} for program verification. Among the new features are: numerous extensions to the input language, a new architecture for calling external provers, and a well-designed API, allowing to use \why as a software library. An important emphasis is put on modularity and genericity, giving the end user a possibility to easily reuse \why formalizations or to add support for a new external prover if wanted. \subsection*{Availability} \why project page is \url{http://why3.lri.fr/}. The last distribution is available there, in source format, together with this documentation and several examples. \why is distributed as open source and freely available under the terms of the GNU LGPL 2.1. See the file \texttt{LICENSE}. See the file \texttt{INSTALL} for quick installation instructions, and Section~\ref{sec:install} of this document for more detailed instructions. \subsection*{Contact} There is a public mailing list for users' discussions: \url{http://lists.gforge.inria.fr/mailman/listinfo/why3-club}. Report any bug to the \why Bug Tracking System: \url{https://gforge.inria.fr/tracker/?atid=10293&group_id=2990&func=browse}. \subsection*{Acknowledgements} We gratefully thank the people who contributed to \why, directly or indirectly: Romain Bardou, Simon Cruanes, Johannes Kanig, St\'ephane Lescuyer, Sim\~ao Melo de Sousa, Guillaume Melquiond, Benjamin Monate, Asma Tafat. \subsection*{Summary of Changes w.r.t. Why 2} The main new features with respect to Why 2.xx are the following. \begin{enumerate} \item Completely redesigned input syntax for logic declarations \begin{itemize} \item new syntax for terms and formulas \item enumerated and algebraic data types, pattern matching \item recursive definitions of logic functions and predicates, with termination checking \item inductive definitions of predicates \item declarations are structured in components called "theories", which can be reused and instantiated \end{itemize} \item More generic handling of goals and lemmas to prove \begin{itemize} \item concept of proof task \item generic concept of task transformation \item generic approach for communicating with external provers \end{itemize} \item Source code organized as a library with a documented API, to allow access to \why features programmatically. \item GUI with new features w.r.t. the former GWhy \begin{itemize} \item session save and restore \item prover calls in parallel \item splitting, and more generally applying task transformations, on demand \item ability to edit proofs for interactive provers (Coq only for the moment) on any subtask \end{itemize} \item Extensible architecture via plugins \begin{itemize} \item users can define new transformations \item users can add connections to additional provers \end{itemize} \end{enumerate} % \begin{itemize} % \item New syntax for terms and formulas % \item Algebraic data types, pattern matching % \item Recursive definitions % \item Inductive predicates % \item Declaration encapsulated in theories. Using and cloning theories. % \item Concept of proof task transformation % \item Generic communication with provers % \item OCaml library with documented API % \item New GUI with session save and restore % % \item New syntax for programs, new VC generator, intentionaly left *) % % undocumented, since the syntax is likely to evolve significantly in *) % % the future. Examples are available in \texttt{examples/programs}. *) % \end{itemize} \cleardoublepage \tableofcontents %\input{intro.tex} \part{Tutorial} \input{starting.tex} \input{syntax.tex} % \input{ide.tex} \input{whyml.tex} \input{api.tex} \part{Reference Manual} % \input{glossary.tex} \input{syntaxref.tex} \input{library.tex} \input{manpages.tex} % \chapter{Complete API documentation} *) % \label{chap:apidoc} *) % \input{./apidoc.tex} *) \bibliographystyle{abbrv} \bibliography{manual} %\input{biblio-demons} \cleardoublepage \listoffigures \cleardoublepage \printindex \end{document} %%% Local Variables: %%% mode: latex %%% TeX-PDF-mode: t %%% TeX-master: t %%% End: