| author | haftmann | 
| Tue, 20 Mar 2018 09:27:39 +0000 | |
| changeset 67905 | fe0f4eeceeb7 | 
| parent 67021 | 41f1f8c4259b | 
| child 68250 | c45067867860 | 
| permissions | -rw-r--r-- | 
| 36926 | 1 | \documentclass[a4paper,12pt]{article}
 | 
| 60185 
cc71f01f9fde
prefer lmodern, which produces scalable T1 fonts even with Debian-ized TeXLive;
 wenzelm parents: 
59963diff
changeset | 2 | \usepackage{lmodern}
 | 
| 36926 | 3 | \usepackage[T1]{fontenc}
 | 
| 4 | \usepackage{amsmath}
 | |
| 5 | \usepackage{amssymb}
 | |
| 53091 | 6 | \usepackage[english]{babel}
 | 
| 36926 | 7 | \usepackage{color}
 | 
| 8 | \usepackage{footmisc}
 | |
| 9 | \usepackage{graphicx}
 | |
| 10 | %\usepackage{mathpazo}
 | |
| 11 | \usepackage{multicol}
 | |
| 12 | \usepackage{stmaryrd}
 | |
| 13 | %\usepackage[scaled=.85]{beramono}
 | |
| 48962 
a1acc1cb0271
more standard document preparation within session context;
 wenzelm parents: 
48803diff
changeset | 14 | \usepackage{isabelle,iman,pdfsetup}
 | 
| 36926 | 15 | |
| 50929 | 16 | \newcommand\download{\url{http://isabelle.in.tum.de/components/}}
 | 
| 46242 | 17 | |
| 57040 | 18 | \let\oldS=\S | 
| 19 | \def\S{\oldS\,}
 | |
| 20 | ||
| 43216 | 21 | \def\qty#1{\ensuremath{\left<\mathit{#1\/}\right>}}
 | 
| 22 | \def\qtybf#1{$\mathbf{\left<\textbf{\textit{#1\/}}\right>}$}
 | |
| 23 | ||
| 45516 | 24 | \newcommand\const[1]{\textsf{#1}}
 | 
| 25 | ||
| 36926 | 26 | %\oddsidemargin=4.6mm | 
| 27 | %\evensidemargin=4.6mm | |
| 28 | %\textwidth=150mm | |
| 29 | %\topmargin=4.6mm | |
| 30 | %\headheight=0mm | |
| 31 | %\headsep=0mm | |
| 32 | %\textheight=234mm | |
| 33 | ||
| 34 | \def\Colon{\mathord{:\mkern-1.5mu:}}
 | |
| 35 | %\def\lbrakk{\mathopen{\lbrack\mkern-3.25mu\lbrack}}
 | |
| 36 | %\def\rbrakk{\mathclose{\rbrack\mkern-3.255mu\rbrack}}
 | |
| 37 | \def\lparr{\mathopen{(\mkern-4mu\mid}}
 | |
| 38 | \def\rparr{\mathclose{\mid\mkern-4mu)}}
 | |
| 39 | ||
| 40 | \def\unk{{?}}
 | |
| 41 | \def\undef{(\lambda x.\; \unk)}
 | |
| 42 | %\def\unr{\textit{others}}
 | |
| 43 | \def\unr{\ldots}
 | |
| 44 | \def\Abs#1{\hbox{\rm{\flqq}}{\,#1\,}\hbox{\rm{\frqq}}}
 | |
| 45 | \def\Q{{\smash{\lower.2ex\hbox{$\scriptstyle?$}}}}
 | |
| 46 | ||
| 47 | \urlstyle{tt}
 | |
| 48 | ||
| 55290 | 49 | \renewcommand\_{\hbox{\textunderscore\kern-.05ex}}
 | 
| 50 | ||
| 36926 | 51 | \begin{document}
 | 
| 52 | ||
| 45516 | 53 | %%% TYPESETTING | 
| 54 | %\renewcommand\labelitemi{$\bullet$}
 | |
| 55 | \renewcommand\labelitemi{\raise.065ex\hbox{\small\textbullet}}
 | |
| 56 | ||
| 36926 | 57 | \title{\includegraphics[scale=0.5]{isabelle_sledgehammer} \\[4ex]
 | 
| 58 | Hammering Away \\[\smallskipamount] | |
| 59 | \Large A User's Guide to Sledgehammer for Isabelle/HOL} | |
| 60 | \author{\hbox{} \\
 | |
| 61 | Jasmin Christian Blanchette \\ | |
| 43002 
e88fde86e4c2
mention contributions from LCP and explain metis and metisFT encodings
 blanchet parents: 
42996diff
changeset | 62 | {\normalsize Institut f\"ur Informatik, Technische Universit\"at M\"unchen} \\[4\smallskipamount]
 | 
| 
e88fde86e4c2
mention contributions from LCP and explain metis and metisFT encodings
 blanchet parents: 
42996diff
changeset | 63 | {\normalsize with contributions from} \\[4\smallskipamount]
 | 
| 
e88fde86e4c2
mention contributions from LCP and explain metis and metisFT encodings
 blanchet parents: 
42996diff
changeset | 64 | Lawrence C. Paulson \\ | 
| 
e88fde86e4c2
mention contributions from LCP and explain metis and metisFT encodings
 blanchet parents: 
42996diff
changeset | 65 | {\normalsize Computer Laboratory, University of Cambridge} \\
 | 
| 36926 | 66 | \hbox{}}
 | 
| 67 | ||
| 68 | \maketitle | |
| 69 | ||
| 70 | \tableofcontents | |
| 71 | ||
| 72 | \setlength{\parskip}{.7em plus .2em minus .1em}
 | |
| 73 | \setlength{\parindent}{0pt}
 | |
| 74 | \setlength{\abovedisplayskip}{\parskip}
 | |
| 75 | \setlength{\abovedisplayshortskip}{.9\parskip}
 | |
| 76 | \setlength{\belowdisplayskip}{\parskip}
 | |
| 77 | \setlength{\belowdisplayshortskip}{.9\parskip}
 | |
| 78 | ||
| 52078 | 79 | % general-purpose enum environment with correct spacing | 
| 36926 | 80 | \newenvironment{enum}%
 | 
| 81 |     {\begin{list}{}{%
 | |
| 82 |         \setlength{\topsep}{.1\parskip}%
 | |
| 83 |         \setlength{\partopsep}{.1\parskip}%
 | |
| 84 |         \setlength{\itemsep}{\parskip}%
 | |
| 85 | \advance\itemsep by-\parsep}} | |
| 86 |     {\end{list}}
 | |
| 87 | ||
| 88 | \def\pre{\begingroup\vskip0pt plus1ex\advance\leftskip by\leftmargin
 | |
| 89 | \advance\rightskip by\leftmargin} | |
| 90 | \def\post{\vskip0pt plus1ex\endgroup}
 | |
| 91 | ||
| 92 | \def\prew{\pre\advance\rightskip by-\leftmargin}
 | |
| 93 | \def\postw{\post}
 | |
| 94 | ||
| 95 | \section{Introduction}
 | |
| 96 | \label{introduction}
 | |
| 97 | ||
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 98 | Sledgehammer is a tool that applies automatic theorem provers (ATPs) | 
| 47561 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 99 | and satisfiability-modulo-theories (SMT) solvers on the current goal.% | 
| 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 100 | \footnote{The distinction between ATPs and SMT solvers is convenient but mostly
 | 
| 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 101 | historical. The two communities are converging, with more and more ATPs | 
| 47672 | 102 | supporting typical SMT features such as arithmetic and sorts, and a few SMT | 
| 47561 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 103 | solvers parsing ATP syntaxes. There is also a strong technological connection | 
| 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 104 | between instantiation-based ATPs (such as iProver and iProver-Eq) and SMT | 
| 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 105 | solvers.} | 
| 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 106 | % | 
| 55334 
5f5104069b33
agsyHOL is also called AgsyHOL by Lindblad himself, so let's follow this convention
 blanchet parents: 
55297diff
changeset | 107 | The supported ATPs are AgsyHOL \cite{agsyHOL}, Alt-Ergo \cite{alt-ergo}, E
 | 
| 52078 | 108 | \cite{schulz-2002}, E-SInE \cite{sine}, E-ToFoF \cite{tofof}, iProver
 | 
| 109 | \cite{korovin-2009}, iProver-Eq \cite{korovin-sticksel-2010}, LEO-II
 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 110 | \cite{leo2}, Leo-III \cite{leo3}, Satallax \cite{satallax}, SNARK \cite{snark}, SPASS
 | 
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 111 | \cite{weidenbach-et-al-2009}, Vampire \cite{riazanov-voronkov-2002},
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 112 | Waldmeister \cite{waldmeister}, and Zipperposition \cite{cruanes-2014}.
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 113 | The ATPs are run either locally or remotely via the System\-On\-TPTP web service | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 114 | \cite{sutcliffe-2000}. The supported SMT solvers are CVC3 \cite{cvc3}, CVC4
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 115 | \cite{cvc4}, veriT \cite{bouton-et-al-2009}, and Z3 \cite{z3}. These are always
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 116 | run locally. | 
| 36926 | 117 | |
| 57241 | 118 | The problem passed to the external provers (or solvers) consists of your current | 
| 119 | goal together with a heuristic selection of hundreds of facts (theorems) from the | |
| 52078 | 120 | current theory context, filtered by relevance. | 
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 121 | |
| 40073 | 122 | The result of a successful proof search is some source text that usually (but | 
| 123 | not always) reconstructs the proof within Isabelle. For ATPs, the reconstructed | |
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 124 | proof typically relies on the general-purpose \textit{metis} proof method, which
 | 
| 45380 | 125 | integrates the Metis ATP in Isabelle/HOL with explicit inferences going through | 
| 126 | the kernel. Thus its results are correct by construction. | |
| 36926 | 127 | |
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 128 | For Isabelle/jEdit users, Sledgehammer provides an automatic mode that can be | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 129 | enabled via the ``Auto Sledgehammer'' option under ``Plugins > Plugin Options > | 
| 54114 | 130 | Isabelle > General.'' In this mode, a reduced version of Sledgehammer is run on | 
| 131 | every newly entered theorem for a few seconds. | |
| 39320 | 132 | |
| 36926 | 133 | \newbox\boxA | 
| 46298 | 134 | \setbox\boxA=\hbox{\texttt{NOSPAM}}
 | 
| 36926 | 135 | |
| 46298 | 136 | \newcommand\authoremail{\texttt{blan{\color{white}NOSPAM}\kern-\wd\boxA{}chette@\allowbreak
 | 
| 42763 | 137 | in.\allowbreak tum.\allowbreak de}} | 
| 138 | ||
| 40689 | 139 | To run Sledgehammer, you must make sure that the theory \textit{Sledgehammer} is
 | 
| 140 | imported---this is rarely a problem in practice since it is part of | |
| 141 | \textit{Main}. Examples of Sledgehammer use can be found in Isabelle's
 | |
| 36926 | 142 | \texttt{src/HOL/Metis\_Examples} directory.
 | 
| 143 | Comments and bug reports concerning Sledgehammer or this manual should be | |
| 42883 | 144 | directed to the author at \authoremail. | 
| 36926 | 145 | |
| 53759 
a198ce71de11
took out Waldmeister from list of default provers -- it's usually just visual noise, and its integration in Sledgehammer leaves much to be desired
 blanchet parents: 
53757diff
changeset | 146 | %\vskip2.5\smallskipamount | 
| 
a198ce71de11
took out Waldmeister from list of default provers -- it's usually just visual noise, and its integration in Sledgehammer leaves much to be desired
 blanchet parents: 
53757diff
changeset | 147 | % | 
| 36926 | 148 | %\textbf{Acknowledgment.} The author would like to thank Mark Summerfield for
 | 
| 149 | %suggesting several textual improvements. | |
| 150 | ||
| 151 | \section{Installation}
 | |
| 152 | \label{installation}
 | |
| 153 | ||
| 48387 | 154 | Sledgehammer is part of Isabelle, so you do not need to install it. However, it | 
| 46242 | 155 | relies on third-party automatic provers (ATPs and SMT solvers). | 
| 42763 | 156 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 157 | Among the ATPs, AgsyHOL, Alt-Ergo, E, LEO-II, Leo-III, Satallax, SPASS, Vampire, and | 
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 158 | Zipperposition can be run locally; in addition, AgsyHOL, E, E-SInE, E-ToFoF, | 
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 159 | iProver, iProver-Eq, LEO-II, Leo-III, Satallax, SNARK, Vampire, and Waldmeister are | 
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 160 | available remotely via System\-On\-TPTP \cite{sutcliffe-2000}. The SMT solvers
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 161 | CVC3, CVC4, veriT, and Z3 can be run locally. | 
| 36926 | 162 | |
| 46242 | 163 | There are three main ways to install automatic provers on your machine: | 
| 36926 | 164 | |
| 46242 | 165 | \begin{sloppy}
 | 
| 166 | \begin{enum}
 | |
| 167 | \item[\labelitemi] If you installed an official Isabelle package, it should | |
| 66735 | 168 | already include properly setup executables for CVC4, E, SPASS, veriT, and Z3, ready to use. | 
| 46242 | 169 | |
| 59510 | 170 | \item[\labelitemi] Alternatively, you can download the Isabelle-aware CVC3, | 
| 171 | CVC4, E, SPASS, and Z3 binary packages from \download. Extract the archives, | |
| 172 | then add a line to your \texttt{\$ISABELLE\_HOME\_USER\slash etc\slash
 | |
| 173 | components}% | |
| 41747 
f58d4d202924
fix path to etc/settings and etc/components in doc
 blanchet parents: 
41740diff
changeset | 174 | \footnote{The variable \texttt{\$ISABELLE\_HOME\_USER} is set by Isabelle at
 | 
| 46242 | 175 | startup. Its value can be retrieved by executing \texttt{isabelle}
 | 
| 41747 
f58d4d202924
fix path to etc/settings and etc/components in doc
 blanchet parents: 
41740diff
changeset | 176 | \texttt{getenv} \texttt{ISABELLE\_HOME\_USER} on the command line.}
 | 
| 59510 | 177 | file with the absolute path to CVC3, CVC4, E, SPASS, or Z3. For example, if the | 
| 46242 | 178 | \texttt{components} file does not exist yet and you extracted SPASS to
 | 
| 47577 | 179 | \texttt{/usr/local/spass-3.8ds}, create it with the single line
 | 
| 36926 | 180 | |
| 181 | \prew | |
| 47577 | 182 | \texttt{/usr/local/spass-3.8ds}
 | 
| 36926 | 183 | \postw | 
| 184 | ||
| 47561 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 185 | in it. | 
| 38043 | 186 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 187 | \item[\labelitemi] If you prefer to build AgsyHOL, Alt-Ergo, E, LEO-II, Leo-III, or | 
| 66735 | 188 | Satallax manually, or found a Vampire executable somewhere (e.g., | 
| 52078 | 189 | \url{http://www.vprover.org/}), set the environment variable
 | 
| 190 | \texttt{AGSYHOL\_HOME}, \texttt{E\_HOME}, \texttt{LEO2\_HOME},
 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 191 | \texttt{LEO3\_HOME}, \texttt{SATALLAX\_HOME}, or
 | 
| 52757 | 192 | \texttt{VAMPIRE\_HOME} to the directory that contains the \texttt{agsyHOL},
 | 
| 193 | \texttt{eprover} (and/or \texttt{eproof} or \texttt{eproof\_ram}),
 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 194 | \texttt{leo}, \texttt{leo3}, \texttt{satallax}, or \texttt{vampire} executable;
 | 
| 52078 | 195 | for Alt-Ergo, set the | 
| 196 | environment variable \texttt{WHY3\_HOME} to the directory that contains the
 | |
| 197 | \texttt{why3} executable.
 | |
| 66363 | 198 | Sledgehammer has been tested with AgsyHOL 1.0, Alt-Ergo 0.95.2, E 1.6 to 2.0, | 
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 199 | LEO-II 1.3.4, Leo-III 1.1, Satallax 2.2 to 2.7, and Vampire 0.6 to 4.0.% | 
| 38063 | 200 | \footnote{Following the rewrite of Vampire, the counter for version numbers was
 | 
| 52996 | 201 | reset to 0; hence the (new) Vampire versions 0.6, 1.0, 1.8, 2.6, and 3.0 are more | 
| 48652 | 202 | recent than 9.0 or 11.5.}% | 
| 48006 | 203 | Since the ATPs' output formats are neither documented nor stable, other | 
| 47577 | 204 | versions might not work well with Sledgehammer. Ideally, | 
| 205 | you should also set \texttt{E\_VERSION}, \texttt{LEO2\_VERSION},
 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 206 | \texttt{LEO3\_VERSION}, \texttt{SATALLAX\_VERSION}, or
 | 
| 66363 | 207 | \texttt{VAMPIRE\_VERSION} to the prover's version number (e.g., ``4.0'').
 | 
| 36926 | 208 | |
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 209 | Similarly, if you want to install CVC3, CVC4, veriT, or Z3, set the environment | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 210 | variable \texttt{CVC3\_\allowbreak SOLVER}, \texttt{CVC4\_\allowbreak SOLVER},
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 211 | \texttt{VERIT\_\allowbreak SOLVER}, or \texttt{Z3\_SOLVER} to the complete path
 | 
| 57241 | 212 | of the executable, \emph{including the file name}. Sledgehammer has been tested
 | 
| 59034 | 213 | with CVC3 2.2 and 2.4.1, CVC4 1.5-prerelease, veriT smtcomp2014, and Z3 4.3.2. | 
| 214 | Since Z3's output format is somewhat unstable, other versions of the solver | |
| 215 | might not work well with Sledgehammer. Ideally, also set | |
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 216 | \texttt{CVC3\_VERSION}, \texttt{CVC4\_VERSION}, \texttt{VERIT\_VERSION}, or
 | 
| 59961 | 217 | \texttt{Z3\_VERSION} to the solver's version number (e.g., ``4.4.0'').
 | 
| 46242 | 218 | \end{enum}
 | 
| 219 | \end{sloppy}
 | |
| 36926 | 220 | |
| 66735 | 221 | To check whether the provers are successfully installed, try out the example | 
| 222 | in \S\ref{first-steps}. If the remote versions of any of these provers is used
 | |
| 223 | (identified by the prefix ``\textit{remote\_\/}''), or if the local versions
 | |
| 224 | fail to solve the easy goal presented there, something must be wrong with the | |
| 225 | installation. | |
| 46242 | 226 | |
| 227 | Remote prover invocation requires Perl with the World Wide Web Library | |
| 228 | (\texttt{libwww-perl}) installed. If you must use a proxy server to access the
 | |
| 229 | Internet, set the \texttt{http\_proxy} environment variable to the proxy, either
 | |
| 230 | in the environment in which Isabelle is launched or in your | |
| 47561 
92d88c89efff
update documentation (mostly based on feedback by Makarius)
 blanchet parents: 
47530diff
changeset | 231 | \texttt{\$ISABELLE\_HOME\_USER/etc/settings} file. Here are a few
 | 
| 46242 | 232 | examples: | 
| 39152 
f09b378cb252
make remote ATP invocation work for those people who need to go through a proxy;
 blanchet parents: 
38997diff
changeset | 233 | |
| 
f09b378cb252
make remote ATP invocation work for those people who need to go through a proxy;
 blanchet parents: 
38997diff
changeset | 234 | \prew | 
| 39153 | 235 | \texttt{http\_proxy=http://proxy.example.org} \\
 | 
| 236 | \texttt{http\_proxy=http://proxy.example.org:8080} \\
 | |
| 237 | \texttt{http\_proxy=http://joeblow:pAsSwRd@proxy.example.org}
 | |
| 39152 
f09b378cb252
make remote ATP invocation work for those people who need to go through a proxy;
 blanchet parents: 
38997diff
changeset | 238 | \postw | 
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 239 | |
| 36926 | 240 | \section{First Steps}
 | 
| 241 | \label{first-steps}
 | |
| 242 | ||
| 243 | To illustrate Sledgehammer in context, let us start a theory file and | |
| 244 | attempt to prove a simple lemma: | |
| 245 | ||
| 246 | \prew | |
| 247 | \textbf{theory}~\textit{Scratch} \\
 | |
| 248 | \textbf{imports}~\textit{Main} \\
 | |
| 249 | \textbf{begin} \\[2\smallskipamount]
 | |
| 250 | % | |
| 42945 | 251 | \textbf{lemma} ``$[a] = [b] \,\Longrightarrow\, a = b$'' \\
 | 
| 36926 | 252 | \textbf{sledgehammer}
 | 
| 253 | \postw | |
| 254 | ||
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 255 | Instead of issuing the \textbf{sledgehammer} command, you can also use the
 | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 256 | Sledgehammer panel in Isabelle/jEdit. Sledgehammer produces the following output | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 257 | after a few seconds: | 
| 36926 | 258 | |
| 259 | \prew | |
| 260 | \slshape | |
| 62737 | 261 | Proof found\ldots \\ | 
| 63729 | 262 | ``\textit{e\/}'': Try this: \textbf{by} \textit{simp} (0.3 ms) \\
 | 
| 42945 | 263 | % | 
| 63729 | 264 | ``\textit{cvc4\/}'': Try this: \textbf{by} \textit{simp} (0.4 ms) \\
 | 
| 46242 | 265 | % | 
| 63729 | 266 | ``\textit{z3\/}'': Try this: \textbf{by} \textit{simp} (0.5 ms) \\
 | 
| 60568 
a9b71c82647b
put E before (typically remote, hence less reliable) Vampire
 blanchet parents: 
60306diff
changeset | 267 | % | 
| 63729 | 268 | ``\textit{spass\/}'': Try this: \textbf{by} \textit{simp} (0.3 ms)
 | 
| 62737 | 269 | % | 
| 36926 | 270 | \postw | 
| 271 | ||
| 60568 
a9b71c82647b
put E before (typically remote, hence less reliable) Vampire
 blanchet parents: 
60306diff
changeset | 272 | Sledgehammer ran CVC4, E, SPASS, and Z3 in parallel. Depending on which | 
| 59963 | 273 | provers are installed and how many processor cores are available, some of the | 
| 274 | provers might be missing or present with a \textit{remote\_} prefix.
 | |
| 36926 | 275 | |
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 276 | For each successful prover, Sledgehammer gives a one-line \textit{metis} or
 | 
| 61283 | 277 | \textit{smt} method call. Rough timings are shown in parentheses, indicating how
 | 
| 48387 | 278 | fast the call is. You can click the proof to insert it into the theory text. | 
| 36926 | 279 | |
| 51190 
2654b3965c8d
made "isar_proofs" a 3-way option, to provide a way to totally disable isar_proofs if desired
 blanchet parents: 
51189diff
changeset | 280 | In addition, you can ask Sledgehammer for an Isar text proof by enabling the | 
| 49919 | 281 | \textit{isar\_proofs} option (\S\ref{output-format}):
 | 
| 36926 | 282 | |
| 283 | \prew | |
| 49919 | 284 | \textbf{sledgehammer} [\textit{isar\_proofs}]
 | 
| 36926 | 285 | \postw | 
| 286 | ||
| 287 | When Isar proof construction is successful, it can yield proofs that are more | |
| 61283 | 288 | readable and also faster than the \textit{metis} or \textit{smt} one-line
 | 
| 56120 
04c37dfef684
updated Sledgehammer docs w.r.t. 'smt2' and 'z3_new'
 blanchet parents: 
56119diff
changeset | 289 | proofs. This feature is experimental and is only available for ATPs. | 
| 36926 | 290 | |
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 291 | \section{Hints}
 | 
| 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 292 | \label{hints}
 | 
| 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 293 | |
| 42884 | 294 | This section presents a few hints that should help you get the most out of | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 295 | Sledgehammer. Frequently asked questions are answered in | 
| 45380 | 296 | \S\ref{frequently-asked-questions}.
 | 
| 42884 | 297 | |
| 46242 | 298 | %\newcommand\point[1]{\medskip\par{\sl\bfseries#1}\par\nopagebreak}
 | 
| 299 | \newcommand\point[1]{\subsection{\emph{#1}}}
 | |
| 42763 | 300 | |
| 301 | \point{Presimplify the goal}
 | |
| 302 | ||
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 303 | For best results, first simplify your problem by calling \textit{auto} or at
 | 
| 42945 | 304 | least \textit{safe} followed by \textit{simp\_all}. The SMT solvers provide
 | 
| 305 | arithmetic decision procedures, but the ATPs typically do not (or if they do, | |
| 306 | Sledgehammer does not use it yet). Apart from Waldmeister, they are not | |
| 53759 
a198ce71de11
took out Waldmeister from list of default provers -- it's usually just visual noise, and its integration in Sledgehammer leaves much to be desired
 blanchet parents: 
53757diff
changeset | 307 | particularly good at heavy rewriting, but because they regard equations as | 
| 42945 | 308 | undirected, they often prove theorems that require the reverse orientation of a | 
| 309 | \textit{simp} rule. Higher-order problems can be tackled, but the success rate
 | |
| 310 | is better for first-order problems. Hence, you may get better results if you | |
| 311 | first simplify the problem to remove higher-order features. | |
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 312 | |
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 313 | \point{Familiarize yourself with the main options}
 | 
| 42763 | 314 | |
| 315 | Sledgehammer's options are fully documented in \S\ref{command-syntax}. Many of
 | |
| 316 | the options are very specialized, but serious users of the tool should at least | |
| 317 | familiarize themselves with the following options: | |
| 318 | ||
| 319 | \begin{enum}
 | |
| 45516 | 320 | \item[\labelitemi] \textbf{\textit{provers}} (\S\ref{mode-of-operation}) specifies
 | 
| 42884 | 321 | the automatic provers (ATPs and SMT solvers) that should be run whenever | 
| 322 | Sledgehammer is invoked (e.g., ``\textit{provers}~= \textit{e spass
 | |
| 46242 | 323 | remote\_vampire\/}''). For convenience, you can omit ``\textit{provers}~=''
 | 
| 43014 | 324 | and simply write the prover names as a space-separated list (e.g., ``\textit{e
 | 
| 46242 | 325 | spass remote\_vampire\/}''). | 
| 42763 | 326 | |
| 48294 | 327 | \item[\labelitemi] \textbf{\textit{max\_facts}} (\S\ref{relevance-filter})
 | 
| 42884 | 328 | specifies the maximum number of facts that should be passed to the provers. By | 
| 48294 | 329 | default, the value is prover-dependent but varies between about 50 and 1000. If | 
| 330 | the provers time out, you can try lowering this value to, say, 25 or 50 and see | |
| 42884 | 331 | if that helps. | 
| 42763 | 332 | |
| 49919 | 333 | \item[\labelitemi] \textbf{\textit{isar\_proofs}} (\S\ref{output-format}) specifies
 | 
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 334 | that Isar proofs should be generated, in addition to one-line \textit{metis} or
 | 
| 61283 | 335 | \textit{smt} proofs. The length of the Isar proofs can be controlled by setting
 | 
| 57245 | 336 | \textit{compress} (\S\ref{output-format}).
 | 
| 43038 | 337 | |
| 45516 | 338 | \item[\labelitemi] \textbf{\textit{timeout}} (\S\ref{timeouts}) controls the
 | 
| 61317 | 339 | provers' time limit. It is set to 30 seconds by default. | 
| 42763 | 340 | \end{enum}
 | 
| 341 | ||
| 42884 | 342 | Options can be set globally using \textbf{sledgehammer\_params}
 | 
| 43010 
a14cf580a5a5
readded Waldmeister as default to the documentation and other minor changes
 blanchet parents: 
43008diff
changeset | 343 | (\S\ref{command-syntax}). The command also prints the list of all available
 | 
| 
a14cf580a5a5
readded Waldmeister as default to the documentation and other minor changes
 blanchet parents: 
43008diff
changeset | 344 | options with their current value. Fact selection can be influenced by specifying | 
| 
a14cf580a5a5
readded Waldmeister as default to the documentation and other minor changes
 blanchet parents: 
43008diff
changeset | 345 | ``$(\textit{add}{:}~\textit{my\_facts})$'' after the \textbf{sledgehammer} call
 | 
| 
a14cf580a5a5
readded Waldmeister as default to the documentation and other minor changes
 blanchet parents: 
43008diff
changeset | 346 | to ensure that certain facts are included, or simply ``$(\textit{my\_facts})$''
 | 
| 58090 | 347 | to force Sledgehammer to run only with $\textit{my\_facts}$ (and any facts
 | 
| 348 | chained into the goal). | |
| 42763 | 349 | |
| 350 | \section{Frequently Asked Questions}
 | |
| 351 | \label{frequently-asked-questions}
 | |
| 352 | ||
| 42945 | 353 | This sections answers frequently (and infrequently) asked questions about | 
| 48387 | 354 | Sledgehammer. It is a good idea to skim over it now even if you do not have any | 
| 42945 | 355 | questions at this stage. And if you have any further questions not listed here, | 
| 356 | send them to the author at \authoremail. | |
| 357 | ||
| 43008 
bb212c2ad238
renamed "minimize" to "min" to make Sledgehammer output a little bit more concise
 blanchet parents: 
43007diff
changeset | 358 | \point{Which facts are passed to the automatic provers?}
 | 
| 42883 | 359 | |
| 48387 | 360 | Sledgehammer heuristically selects a few hundred relevant lemmas from the | 
| 361 | currently loaded libraries. The component that performs this selection is | |
| 61043 | 362 | called \emph{relevance filter} (\S\ref{relevance-filter}).
 | 
| 48387 | 363 | |
| 364 | \begin{enum}
 | |
| 365 | \item[\labelitemi] | |
| 48388 | 366 | The traditional relevance filter, called \emph{MePo}
 | 
| 367 | (\underline{Me}ng--\underline{Pau}lson), assigns a score to every available fact
 | |
| 368 | (lemma, theorem, definition, or axiom) based upon how many constants that fact | |
| 369 | shares with the conjecture. This process iterates to include facts relevant to | |
| 370 | those just accepted. The constants are weighted to give unusual ones greater | |
| 371 | significance. MePo copes best when the conjecture contains some unusual | |
| 372 | constants; if all the constants are common, it is unable to discriminate among | |
| 373 | the hundreds of facts that are picked up. The filter is also memoryless: It has | |
| 374 | no information about how many times a particular fact has been used in a proof, | |
| 375 | and it cannot learn. | |
| 48387 | 376 | |
| 377 | \item[\labelitemi] | |
| 57272 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 378 | An alternative to MePo is \emph{MaSh} (\underline{Ma}chine Learner for
 | 
| 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 379 | \underline{S}ledge\underline{h}ammer). It applies machine learning to the
 | 
| 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 380 | problem of finding relevant facts. | 
| 48387 | 381 | |
| 61043 | 382 | \item[\labelitemi] The \emph{MeSh} filter combines MePo and MaSh. This is
 | 
| 383 | the default. | |
| 48387 | 384 | \end{enum}
 | 
| 385 | ||
| 42883 | 386 | The number of facts included in a problem varies from prover to prover, since | 
| 43008 
bb212c2ad238
renamed "minimize" to "min" to make Sledgehammer output a little bit more concise
 blanchet parents: 
43007diff
changeset | 387 | some provers get overwhelmed more easily than others. You can show the number of | 
| 42883 | 388 | facts given using the \textit{verbose} option (\S\ref{output-format}) and the
 | 
| 389 | actual facts using \textit{debug} (\S\ref{output-format}).
 | |
| 390 | ||
| 391 | Sledgehammer is good at finding short proofs combining a handful of existing | |
| 392 | lemmas. If you are looking for longer proofs, you must typically restrict the | |
| 48294 | 393 | number of facts, by setting the \textit{max\_facts} option
 | 
| 43574 | 394 | (\S\ref{relevance-filter}) to, say, 25 or 50.
 | 
| 42883 | 395 | |
| 42996 | 396 | You can also influence which facts are actually selected in a number of ways. If | 
| 397 | you simply want to ensure that a fact is included, you can specify it using the | |
| 398 | ``$(\textit{add}{:}~\textit{my\_facts})$'' syntax. For example:
 | |
| 399 | % | |
| 400 | \prew | |
| 401 | \textbf{sledgehammer} (\textit{add}: \textit{hd.simps} \textit{tl.simps})
 | |
| 402 | \postw | |
| 403 | % | |
| 404 | The specified facts then replace the least relevant facts that would otherwise be | |
| 405 | included; the other selected facts remain the same. | |
| 406 | If you want to direct the selection in a particular direction, you can specify | |
| 407 | the facts via \textbf{using}:
 | |
| 408 | % | |
| 409 | \prew | |
| 410 | \textbf{using} \textit{hd.simps} \textit{tl.simps} \\
 | |
| 411 | \textbf{sledgehammer}
 | |
| 412 | \postw | |
| 413 | % | |
| 414 | The facts are then more likely to be selected than otherwise, and if they are | |
| 415 | selected at iteration $j$ they also influence which facts are selected at | |
| 416 | iterations $j + 1$, $j + 2$, etc. To give them even more weight, try | |
| 417 | % | |
| 418 | \prew | |
| 419 | \textbf{using} \textit{hd.simps} \textit{tl.simps} \\
 | |
| 420 | \textbf{apply}~\textbf{--} \\
 | |
| 421 | \textbf{sledgehammer}
 | |
| 422 | \postw | |
| 423 | ||
| 46300 | 424 | \point{Why does Metis fail to reconstruct the proof?}
 | 
| 425 | ||
| 426 | There are many reasons. If Metis runs seemingly forever, that is a sign that the | |
| 57736 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 427 | proof is too difficult for it. Metis's search is complete for first-order logic | 
| 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 428 | with equality, so if the proof was found by an ATP such as E, SPASS, or Vampire, | 
| 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 429 | Metis should eventually find it, but that's little consolation. | 
| 46300 | 430 | |
| 431 | In some rare cases, \textit{metis} fails fairly quickly, and you get the error
 | |
| 57736 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 432 | message ``One-line proof reconstruction failed.'' This indicates that | 
| 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 433 | Sledgehammer determined that the goal is provable, but the proof is, for | 
| 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 434 | technical reasons, beyond \textit{metis}'s power. You can then try again with
 | 
| 
5f37ef22f9af
update documentation after removal of 'min' subcommand
 blanchet parents: 
57733diff
changeset | 435 | the \textit{strict} option (\S\ref{problem-encoding}).
 | 
| 46300 | 436 | |
| 46640 | 437 | If the goal is actually unprovable and you did not specify an unsound encoding | 
| 46300 | 438 | using \textit{type\_enc} (\S\ref{problem-encoding}), this is a bug, and you are
 | 
| 439 | strongly encouraged to report this to the author at \authoremail. | |
| 440 | ||
| 441 | \point{How can I tell whether a suggested proof is sound?}
 | |
| 442 | ||
| 443 | Earlier versions of Sledgehammer often suggested unsound proofs---either proofs | |
| 444 | of nontheorems or simply proofs that rely on type-unsound inferences. This | |
| 46640 | 445 | is a thing of the past, unless you explicitly specify an unsound encoding | 
| 46300 | 446 | using \textit{type\_enc} (\S\ref{problem-encoding}).
 | 
| 447 | % | |
| 448 | Officially, the only form of ``unsoundness'' that lurks in the sound | |
| 449 | encodings is related to missing characteristic theorems of datatypes. For | |
| 450 | example, | |
| 451 | ||
| 452 | \prew | |
| 453 | \textbf{lemma}~``$\exists \mathit{xs}.\; \mathit{xs} \neq []$'' \\
 | |
| 454 | \textbf{sledgehammer} ()
 | |
| 455 | \postw | |
| 456 | ||
| 457 | suggests an argumentless \textit{metis} call that fails. However, the conjecture
 | |
| 458 | does actually hold, and the \textit{metis} call can be repaired by adding
 | |
| 459 | \textit{list.distinct}.
 | |
| 460 | % | |
| 461 | We hope to address this problem in a future version of Isabelle. In the | |
| 462 | meantime, you can avoid it by passing the \textit{strict} option
 | |
| 463 | (\S\ref{problem-encoding}).
 | |
| 464 | ||
| 46298 | 465 | \point{What are the \textit{full\_types}, \textit{no\_types}, and
 | 
| 466 | \textit{mono\_tags} arguments to Metis?}
 | |
| 42883 | 467 | |
| 46298 | 468 | The \textit{metis}~(\textit{full\_types}) proof method
 | 
| 469 | and its cousin \textit{metis}~(\textit{mono\_tags}) are fully-typed
 | |
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 470 | versions of Metis. It is somewhat slower than \textit{metis}, but the proof
 | 
| 43228 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 471 | search is fully typed, and it also includes more powerful rules such as the | 
| 45516 | 472 | axiom ``$x = \const{True} \mathrel{\lor} x = \const{False}$'' for reasoning in
 | 
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 473 | higher-order places (e.g., in set comprehensions). The method is automatically | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 474 | tried as a fallback when \textit{metis} fails, and it is sometimes
 | 
| 43228 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 475 | generated by Sledgehammer instead of \textit{metis} if the proof obviously
 | 
| 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 476 | requires type information or if \textit{metis} failed when Sledgehammer
 | 
| 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 477 | preplayed the proof. (By default, Sledgehammer tries to run \textit{metis} with
 | 
| 57719 | 478 | various sets of option for up to 1~second each time to ensure that the generated | 
| 46298 | 479 | one-line proofs actually work and to display timing information. This can be | 
| 47036 | 480 | configured using the \textit{preplay\_timeout} and \textit{dont\_preplay}
 | 
| 481 | options (\S\ref{timeouts}).)
 | |
| 46298 | 482 | % | 
| 43229 | 483 | At the other end of the soundness spectrum, \textit{metis} (\textit{no\_types})
 | 
| 484 | uses no type information at all during the proof search, which is more efficient | |
| 485 | but often fails. Calls to \textit{metis} (\textit{no\_types}) are occasionally
 | |
| 486 | generated by Sledgehammer. | |
| 46298 | 487 | % | 
| 488 | See the \textit{type\_enc} option (\S\ref{problem-encoding}) for details.
 | |
| 43229 | 489 | |
| 46298 | 490 | Incidentally, if you ever see warnings such as | 
| 42883 | 491 | |
| 492 | \prew | |
| 43007 | 493 | \slshape | 
| 63729 | 494 | Metis: Falling back on ``\textit{metis} (\textit{full\_types})''
 | 
| 42883 | 495 | \postw | 
| 496 | ||
| 45380 | 497 | for a successful \textit{metis} proof, you can advantageously pass the
 | 
| 43228 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 498 | \textit{full\_types} option to \textit{metis} directly.
 | 
| 
2ed2f092e990
obsoleted "metisFT", and added "no_types" version of Metis as fallback to Sledgehammer after noticing how useful it can be
 blanchet parents: 
43217diff
changeset | 499 | |
| 46366 | 500 | \point{And what are the \textit{lifting} and \textit{hide\_lams} arguments
 | 
| 46298 | 501 | to Metis?} | 
| 502 | ||
| 503 | Orthogonally to the encoding of types, it is important to choose an appropriate | |
| 504 | translation of $\lambda$-abstractions. Metis supports three translation schemes, | |
| 505 | in decreasing order of power: Curry combinators (the default), | |
| 506 | $\lambda$-lifting, and a ``hiding'' scheme that disables all reasoning under | |
| 507 | $\lambda$-abstractions. The more powerful schemes also give the automatic | |
| 508 | provers more rope to hang themselves. See the \textit{lam\_trans} option (\S\ref{problem-encoding}) for details.
 | |
| 509 | ||
| 43054 | 510 | \point{Are generated proofs minimal?}
 | 
| 43036 | 511 | |
| 43054 | 512 | Automatic provers frequently use many more facts than are necessary. | 
| 57722 | 513 | Sledgehammer includes a minimization tool that takes a set of facts returned by | 
| 514 | a given prover and repeatedly calls a prover or proof method with subsets of | |
| 515 | those facts to find a minimal set. Reducing the number of facts typically helps | |
| 516 | reconstruction, while also removing superfluous clutter from the proof scripts. | |
| 43036 | 517 | |
| 43229 | 518 | In earlier versions of Sledgehammer, generated proofs were systematically | 
| 519 | accompanied by a suggestion to invoke the minimization tool. This step is now | |
| 57722 | 520 | performed by default but can be disabled using the \textit{minimize} option
 | 
| 521 | (\S\ref{mode-of-operation}).
 | |
| 43036 | 522 | |
| 43008 
bb212c2ad238
renamed "minimize" to "min" to make Sledgehammer output a little bit more concise
 blanchet parents: 
43007diff
changeset | 523 | \point{A strange error occurred---what should I do?}
 | 
| 42763 | 524 | |
| 525 | Sledgehammer tries to give informative error messages. Please report any strange | |
| 63729 | 526 | error to the author at \authoremail. | 
| 42763 | 527 | |
| 528 | \point{Auto can solve it---why not Sledgehammer?}
 | |
| 529 | ||
| 530 | Problems can be easy for \textit{auto} and difficult for automatic provers, but
 | |
| 48387 | 531 | the reverse is also true, so do not be discouraged if your first attempts fail. | 
| 39320 | 532 | Because the system refers to all theorems known to Isabelle, it is particularly | 
| 57040 | 533 | suitable when your goal has a short proof but requires lemmas that you do not | 
| 534 | know about. | |
| 37517 
19ba7ec5f1e3
steal some of http://isabelle.in.tum.de/sledgehammer.html and add it to the docs
 blanchet parents: 
37498diff
changeset | 535 | |
| 42883 | 536 | \point{Why are there so many options?}
 | 
| 537 | ||
| 538 | Sledgehammer's philosophy should work out of the box, without user guidance. | |
| 539 | Many of the options are meant to be used mostly by the Sledgehammer developers | |
| 53102 | 540 | for experiments. Of course, feel free to try them out if you are so inclined. | 
| 42883 | 541 | |
| 36926 | 542 | \section{Command Syntax}
 | 
| 543 | \label{command-syntax}
 | |
| 544 | ||
| 46242 | 545 | \subsection{Sledgehammer}
 | 
| 57040 | 546 | \label{sledgehammer}
 | 
| 46242 | 547 | |
| 36926 | 548 | Sledgehammer can be invoked at any point when there is an open goal by entering | 
| 549 | the \textbf{sledgehammer} command in the theory file. Its general syntax is as
 | |
| 550 | follows: | |
| 551 | ||
| 552 | \prew | |
| 43216 | 553 | \textbf{sledgehammer} \qty{subcommand}$^?$ \qty{options}$^?$ \qty{facts\_override}$^?$ \qty{num}$^?$
 | 
| 36926 | 554 | \postw | 
| 555 | ||
| 43216 | 556 | In the general syntax, the \qty{subcommand} may be any of the following:
 | 
| 36926 | 557 | |
| 558 | \begin{enum}
 | |
| 45516 | 559 | \item[\labelitemi] \textbf{\textit{run} (the default):} Runs Sledgehammer on
 | 
| 43216 | 560 | subgoal number \qty{num} (1 by default), with the given options and facts.
 | 
| 36926 | 561 | |
| 45516 | 562 | \item[\labelitemi] \textbf{\textit{supported\_provers}:} Prints the list of
 | 
| 41724 | 563 | automatic provers supported by Sledgehammer. See \S\ref{installation} and
 | 
| 564 | \S\ref{mode-of-operation} for more information on how to install automatic
 | |
| 565 | provers. | |
| 36926 | 566 | |
| 48393 | 567 | \item[\labelitemi] \textbf{\textit{refresh\_tptp}:} Refreshes the list of remote
 | 
| 568 | ATPs available at System\-On\-TPTP \cite{sutcliffe-2000}.
 | |
| 569 | \end{enum}
 | |
| 570 | ||
| 49365 | 571 | In addition, the following subcommands provide finer control over machine | 
| 48393 | 572 | learning with MaSh: | 
| 573 | ||
| 574 | \begin{enum}
 | |
| 575 | \item[\labelitemi] \textbf{\textit{unlearn}:} Resets MaSh, erasing any
 | |
| 576 | persistent state. | |
| 48387 | 577 | |
| 48393 | 578 | \item[\labelitemi] \textbf{\textit{learn\_isar}:} Invokes MaSh on the current
 | 
| 579 | theory to process all the available facts, learning from their Isabelle/Isar | |
| 580 | proofs. This happens automatically at Sledgehammer invocations if the | |
| 581 | \textit{learn} option (\S\ref{relevance-filter}) is enabled.
 | |
| 48387 | 582 | |
| 50484 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 583 | \item[\labelitemi] \textbf{\textit{learn\_prover}:} Invokes MaSh on the current
 | 
| 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 584 | theory to process all the available facts, learning from proofs generated by | 
| 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 585 | automatic provers. The prover to use and its timeout can be set using the | 
| 48393 | 586 | \textit{prover} (\S\ref{mode-of-operation}) and \textit{timeout}
 | 
| 66735 | 587 | (\S\ref{timeouts}) options. It is recommended to perform learning using a
 | 
| 588 | first-order ATP (such as E, SPASS, and Vampire) as opposed to a | |
| 48393 | 589 | higher-order ATP or an SMT solver. | 
| 590 | ||
| 591 | \item[\labelitemi] \textbf{\textit{relearn\_isar}:} Same as \textit{unlearn}
 | |
| 592 | followed by \textit{learn\_isar}.
 | |
| 593 | ||
| 50484 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 594 | \item[\labelitemi] \textbf{\textit{relearn\_prover}:} Same as \textit{unlearn}
 | 
| 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 595 | followed by \textit{learn\_prover}.
 | 
| 36926 | 596 | \end{enum}
 | 
| 597 | ||
| 43216 | 598 | Sledgehammer's behavior can be influenced by various \qty{options}, which can be
 | 
| 599 | specified in brackets after the \textbf{sledgehammer} command. The
 | |
| 600 | \qty{options} are a list of key--value pairs of the form ``[$k_1 = v_1,
 | |
| 50484 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 601 | \ldots, k_n = v_n$]''. For Boolean options, ``= \textit{true\/}'' is optional.
 | 
| 
8ec31bdb9d36
adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
 blanchet parents: 
50459diff
changeset | 602 | For example: | 
| 36926 | 603 | |
| 604 | \prew | |
| 49919 | 605 | \textbf{sledgehammer} [\textit{isar\_proofs}, \,\textit{timeout} = 120]
 | 
| 36926 | 606 | \postw | 
| 607 | ||
| 608 | Default values can be set using \textbf{sledgehammer\_\allowbreak params}:
 | |
| 609 | ||
| 610 | \prew | |
| 43216 | 611 | \textbf{sledgehammer\_params} \qty{options}
 | 
| 36926 | 612 | \postw | 
| 613 | ||
| 614 | The supported options are described in \S\ref{option-reference}.
 | |
| 615 | ||
| 43216 | 616 | The \qty{facts\_override} argument lets you alter the set of facts that go
 | 
| 617 | through the relevance filter. It may be of the form ``(\qty{facts})'', where
 | |
| 618 | \qty{facts} is a space-separated list of Isabelle facts (theorems, local
 | |
| 36926 | 619 | assumptions, etc.), in which case the relevance filter is bypassed and the given | 
| 43216 | 620 | facts are used. It may also be of the form ``(\textit{add}:\ \qty{facts\/_{\mathrm{1}}})'',
 | 
| 621 | ``(\textit{del}:\ \qty{facts\/_{\mathrm{2}}})'', or ``(\textit{add}:\ \qty{facts\/_{\mathrm{1}}}\
 | |
| 622 | \textit{del}:\ \qty{facts\/_{\mathrm{2}}})'', where the relevance filter is instructed to
 | |
| 623 | proceed as usual except that it should consider \qty{facts\/_{\mathrm{1}}}
 | |
| 624 | highly-relevant and \qty{facts\/_{\mathrm{2}}} fully irrelevant.
 | |
| 36926 | 625 | |
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 626 | If you use Isabelle/jEdit, Sledgehammer also provides an automatic mode that can | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 627 | be enabled via the ``Auto Sledgehammer'' option under ``Plugins > Plugin Options | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 628 | > Isabelle > General.'' For automatic runs, only the first prover set using | 
| 54114 | 629 | \textit{provers} (\S\ref{mode-of-operation}) is considered (typically E),
 | 
| 630 | \textit{slice} (\S\ref{mode-of-operation}) is disabled,
 | |
| 60306 
6b7c64ab8bd2
made Auto Sledgehammer behave more like the real thing
 blanchet parents: 
60185diff
changeset | 631 | fewer facts are | 
| 54114 | 632 | passed to the prover, \textit{fact\_filter} (\S\ref{relevance-filter}) is set to
 | 
| 633 | \textit{mepo}, \textit{strict} (\S\ref{problem-encoding}) is enabled,
 | |
| 634 | \textit{verbose} (\S\ref{output-format}) and \textit{debug}
 | |
| 60306 
6b7c64ab8bd2
made Auto Sledgehammer behave more like the real thing
 blanchet parents: 
60185diff
changeset | 635 | (\S\ref{output-format}) are disabled, and \textit{timeout} (\S\ref{timeouts}) is
 | 
| 54114 | 636 | superseded by the ``Auto Time Limit'' option in jEdit. Sledgehammer's output is | 
| 637 | also more concise. | |
| 39320 | 638 | |
| 46242 | 639 | \subsection{Metis}
 | 
| 57040 | 640 | \label{metis}
 | 
| 46242 | 641 | |
| 43216 | 642 | The \textit{metis} proof method has the syntax
 | 
| 643 | ||
| 644 | \prew | |
| 45518 | 645 | \textbf{\textit{metis}}~(\qty{options})${}^?$~\qty{facts}${}^?$
 | 
| 43216 | 646 | \postw | 
| 647 | ||
| 45518 | 648 | where \qty{facts} is a list of arbitrary facts and \qty{options} is a
 | 
| 649 | comma-separated list consisting of at most one $\lambda$ translation scheme | |
| 650 | specification with the same semantics as Sledgehammer's \textit{lam\_trans}
 | |
| 651 | option (\S\ref{problem-encoding}) and at most one type encoding specification
 | |
| 652 | with the same semantics as Sledgehammer's \textit{type\_enc} option
 | |
| 653 | (\S\ref{problem-encoding}).
 | |
| 654 | % | |
| 655 | The supported $\lambda$ translation schemes are \textit{hide\_lams},
 | |
| 46366 | 656 | \textit{lifting}, and \textit{combs} (the default).
 | 
| 45518 | 657 | % | 
| 658 | All the untyped type encodings listed in \S\ref{problem-encoding} are supported.
 | |
| 659 | For convenience, the following aliases are provided: | |
| 660 | \begin{enum}
 | |
| 48393 | 661 | \item[\labelitemi] \textbf{\textit{full\_types}:} Alias for \textit{poly\_guards\_query}.
 | 
| 662 | \item[\labelitemi] \textbf{\textit{partial\_types}:} Alias for \textit{poly\_args}.
 | |
| 663 | \item[\labelitemi] \textbf{\textit{no\_types}:} Alias for \textit{erased}.
 | |
| 45518 | 664 | \end{enum}
 | 
| 43216 | 665 | |
| 36926 | 666 | \section{Option Reference}
 | 
| 667 | \label{option-reference}
 | |
| 668 | ||
| 43014 | 669 | \def\defl{\{}
 | 
| 670 | \def\defr{\}}
 | |
| 671 | ||
| 36926 | 672 | \def\flushitem#1{\item[]\noindent\kern-\leftmargin \textbf{#1}}
 | 
| 47036 | 673 | \def\optrueonly#1{\flushitem{\textit{#1} $\bigl[$= \textit{true}$\bigr]$\enskip}\nopagebreak\\[\parskip]}
 | 
| 43014 | 674 | \def\optrue#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{bool}$\bigr]$\enskip \defl\textit{true}\defr\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
 | 
| 675 | \def\opfalse#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{bool}$\bigr]$\enskip \defl\textit{false}\defr\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
 | |
| 676 | \def\opsmart#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{smart\_bool}$\bigr]$\enskip \defl\textit{smart}\defr\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
 | |
| 46409 
d4754183ccce
made option available to users (mostly for experiments)
 blanchet parents: 
46366diff
changeset | 677 | \def\opsmartx#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{smart\_bool}$\bigr]$\enskip \defl\textit{smart}\defr\\\hbox{}\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
 | 
| 36926 | 678 | \def\opnodefault#1#2{\flushitem{\textit{#1} = \qtybf{#2}} \nopagebreak\\[\parskip]}
 | 
| 43014 | 679 | \def\opnodefaultbrk#1#2{\flushitem{$\bigl[$\textit{#1} =$\bigr]$ \qtybf{#2}} \nopagebreak\\[\parskip]}
 | 
| 680 | \def\opdefault#1#2#3{\flushitem{\textit{#1} = \qtybf{#2}\enskip \defl\textit{#3}\defr} \nopagebreak\\[\parskip]}
 | |
| 36926 | 681 | \def\oparg#1#2#3{\flushitem{\textit{#1} \qtybf{#2} = \qtybf{#3}} \nopagebreak\\[\parskip]}
 | 
| 682 | \def\opargbool#1#2#3{\flushitem{\textit{#1} \qtybf{#2} $\bigl[$= \qtybf{bool}$\bigr]$\hfill (neg.: \textit{#3})}\nopagebreak\\[\parskip]}
 | |
| 43014 | 683 | \def\opargboolorsmart#1#2#3{\flushitem{\textit{#1} \qtybf{#2} $\bigl[$= \qtybf{smart\_bool}$\bigr]$\hfill (neg.: \textit{#3})}\nopagebreak\\[\parskip]}
 | 
| 36926 | 684 | |
| 685 | Sledgehammer's options are categorized as follows:\ mode of operation | |
| 38984 | 686 | (\S\ref{mode-of-operation}), problem encoding (\S\ref{problem-encoding}),
 | 
| 687 | relevance filter (\S\ref{relevance-filter}), output format
 | |
| 57241 | 688 | (\S\ref{output-format}), regression testing (\S\ref{regression-testing}),
 | 
| 689 | and timeouts (\S\ref{timeouts}).
 | |
| 36926 | 690 | |
| 691 | The descriptions below refer to the following syntactic quantities: | |
| 692 | ||
| 693 | \begin{enum}
 | |
| 45516 | 694 | \item[\labelitemi] \qtybf{string}: A string.
 | 
| 695 | \item[\labelitemi] \qtybf{bool\/}: \textit{true} or \textit{false}.
 | |
| 696 | \item[\labelitemi] \qtybf{smart\_bool\/}: \textit{true}, \textit{false}, or
 | |
| 40203 | 697 | \textit{smart}.
 | 
| 45516 | 698 | \item[\labelitemi] \qtybf{int\/}: An integer.
 | 
| 54816 
10d48c2a3e32
made timeouts in Sledgehammer not be 'option's -- simplified lots of code
 blanchet parents: 
54788diff
changeset | 699 | \item[\labelitemi] \qtybf{float}: A floating-point number (e.g., 2.5 or 60)
 | 
| 
10d48c2a3e32
made timeouts in Sledgehammer not be 'option's -- simplified lots of code
 blanchet parents: 
54788diff
changeset | 700 | expressing a number of seconds. | 
| 45516 | 701 | \item[\labelitemi] \qtybf{float\_pair\/}: A pair of floating-point numbers
 | 
| 40343 
4521d56aef63
use floating-point numbers for Sledgehammer's "thresholds" option rather than percentages;
 blanchet parents: 
40341diff
changeset | 702 | (e.g., 0.6 0.95). | 
| 45516 | 703 | \item[\labelitemi] \qtybf{smart\_int\/}: An integer or \textit{smart}.
 | 
| 36926 | 704 | \end{enum}
 | 
| 705 | ||
| 43217 | 706 | Default values are indicated in curly brackets (\textrm{\{\}}). Boolean options
 | 
| 61317 | 707 | have a negative counterpart (e.g., \textit{minimize} vs.\
 | 
| 708 | \textit{dont\_minimize}). When setting Boolean options or their negative
 | |
| 47963 | 709 | counterparts, ``= \textit{true\/}'' may be omitted.
 | 
| 36926 | 710 | |
| 711 | \subsection{Mode of Operation}
 | |
| 712 | \label{mode-of-operation}
 | |
| 713 | ||
| 714 | \begin{enum}
 | |
| 43014 | 715 | \opnodefaultbrk{provers}{string}
 | 
| 40059 
6ad9081665db
use consistent terminology in Sledgehammer: "prover = ATP or SMT solver or ..."
 blanchet parents: 
39335diff
changeset | 716 | Specifies the automatic provers to use as a space-separated list (e.g., | 
| 46299 | 717 | ``\textit{e}~\textit{spass}~\textit{remote\_vampire\/}'').
 | 
| 718 | Provers can be run locally or remotely; see \S\ref{installation} for
 | |
| 719 | installation instructions. | |
| 720 | ||
| 721 | The following local provers are supported: | |
| 36926 | 722 | |
| 48701 | 723 | \begin{sloppy}
 | 
| 36926 | 724 | \begin{enum}
 | 
| 55334 
5f5104069b33
agsyHOL is also called AgsyHOL by Lindblad himself, so let's follow this convention
 blanchet parents: 
55297diff
changeset | 725 | \item[\labelitemi] \textbf{\textit{agsyhol}:} AgsyHOL is an automatic
 | 
| 52078 | 726 | higher-order prover developed by Fredrik Lindblad \cite{agsyHOL},
 | 
| 55334 
5f5104069b33
agsyHOL is also called AgsyHOL by Lindblad himself, so let's follow this convention
 blanchet parents: 
55297diff
changeset | 727 | with support for the TPTP typed higher-order syntax (THF0). To use AgsyHOL, set | 
| 52078 | 728 | the environment variable \texttt{AGSYHOL\_HOME} to the directory that contains
 | 
| 729 | the \texttt{agsyHOL} executable. Sledgehammer has been tested with version 1.0.
 | |
| 730 | ||
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 731 | \item[\labelitemi] \textbf{\textit{alt\_ergo}:} Alt-Ergo is a polymorphic
 | 
| 52078 | 732 | ATP developed by Bobot et al.\ \cite{alt-ergo}.
 | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 733 | It supports the TPTP polymorphic typed first-order format (TFF1) via Why3 | 
| 53102 | 734 | \cite{why3}. To use Alt-Ergo, set the environment variable \texttt{WHY3\_HOME}
 | 
| 56379 
d8ecce5d51cd
use Alt-Ergo 0.95.2, the latest and greatest version
 blanchet parents: 
56378diff
changeset | 735 | to the directory that contains the \texttt{why3} executable. Sledgehammer
 | 
| 
d8ecce5d51cd
use Alt-Ergo 0.95.2, the latest and greatest version
 blanchet parents: 
56378diff
changeset | 736 | requires Alt-Ergo 0.95.2 and Why3 0.83. | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 737 | |
| 45516 | 738 | \item[\labelitemi] \textbf{\textit{cvc3}:} CVC3 is an SMT solver developed by
 | 
| 42945 | 739 | Clark Barrett, Cesare Tinelli, and their colleagues \cite{cvc3}. To use CVC3,
 | 
| 740 | set the environment variable \texttt{CVC3\_SOLVER} to the complete path of the
 | |
| 46242 | 741 | executable, including the file name, or install the prebuilt CVC3 package from | 
| 57241 | 742 | \download. Sledgehammer has been tested with versions 2.2 and 2.4.1. | 
| 743 | ||
| 744 | \item[\labelitemi] \textbf{\textit{cvc4}:} CVC4 \cite{cvc4} is the successor to
 | |
| 745 | CVC3. To use CVC4, set the environment variable \texttt{CVC4\_SOLVER} to the
 | |
| 746 | complete path of the executable, including the file name, or install the | |
| 747 | prebuilt CVC4 package from \download. Sledgehammer has been tested with version | |
| 59034 | 748 | 1.5-prerelease. | 
| 42945 | 749 | |
| 45516 | 750 | \item[\labelitemi] \textbf{\textit{e}:} E is a first-order resolution prover
 | 
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 751 | developed by Stephan Schulz \cite{schulz-2002}. To use E, set the environment
 | 
| 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 752 | variable \texttt{E\_HOME} to the directory that contains the \texttt{eproof}
 | 
| 52757 | 753 | executable and \texttt{E\_VERSION} to the version number (e.g., ``1.8''), or
 | 
| 47056 | 754 | install the prebuilt E package from \download. Sledgehammer has been tested with | 
| 57636 
3ab503b04bdb
stick to external proofs when invoking E, because they are more detailed and do not merge steps
 blanchet parents: 
57566diff
changeset | 755 | versions 1.6 to 1.8. | 
| 48652 | 756 | |
| 757 | \item[\labelitemi] \textbf{\textit{e\_males}:} E-MaLeS is a metaprover developed
 | |
| 758 | by Daniel K\"uhlwein that implements strategy scheduling on top of E. To use | |
| 759 | E-MaLeS, set the environment variable \texttt{E\_MALES\_HOME} to the directory
 | |
| 760 | that contains the \texttt{emales.py} script. Sledgehammer has been tested with
 | |
| 761 | version 1.1. | |
| 36926 | 762 | |
| 54694 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 763 | \item[\labelitemi] \textbf{\textit{e\_par}:} E-Par is an experimental metaprover
 | 
| 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 764 | developed by Josef Urban that implements strategy scheduling on top of E. To use | 
| 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 765 | E-Par, set the environment variable \texttt{E\_HOME} to the directory that
 | 
| 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 766 | contains the \texttt{runepar.pl} script and the \texttt{eprover} and
 | 
| 50929 | 767 | \texttt{epclextract} executables, or use the prebuilt E package from \download.
 | 
| 54694 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 768 | Be aware that E-Par is experimental software. It has been known to generate | 
| 
af9cdb4989c7
added warning to documentation, based on isabelle-users thread
 blanchet parents: 
54139diff
changeset | 769 | zombie processes. Use at your own risks. | 
| 50929 | 770 | |
| 48701 | 771 | \item[\labelitemi] \textbf{\textit{iprover}:} iProver is a pure
 | 
| 772 | instantiation-based prover developed by Konstantin Korovin \cite{korovin-2009}.
 | |
| 773 | To use iProver, set the environment variable \texttt{IPROVER\_HOME} to the
 | |
| 48714 | 774 | directory that contains the \texttt{iprover} and \texttt{vclausify\_rel}
 | 
| 775 | executables. Sledgehammer has been tested with version 0.99. | |
| 48701 | 776 | |
| 777 | \item[\labelitemi] \textbf{\textit{iprover\_eq}:} iProver-Eq is an
 | |
| 778 | instantiation-based prover with native support for equality developed by | |
| 779 | Konstantin Korovin and Christoph Sticksel \cite{korovin-sticksel-2010}. To use
 | |
| 780 | iProver-Eq, set the environment variable \texttt{IPROVER\_EQ\_HOME} to the
 | |
| 48714 | 781 | directory that contains the \texttt{iprover-eq} and \texttt{vclausify\_rel}
 | 
| 782 | executables. Sledgehammer has been tested with version 0.8. | |
| 48701 | 783 | |
| 45516 | 784 | \item[\labelitemi] \textbf{\textit{leo2}:} LEO-II is an automatic
 | 
| 44098 | 785 | higher-order prover developed by Christoph Benzm\"uller et al.\ \cite{leo2},
 | 
| 46242 | 786 | with support for the TPTP typed higher-order syntax (THF0). To use LEO-II, set | 
| 787 | the environment variable \texttt{LEO2\_HOME} to the directory that contains the
 | |
| 52757 | 788 | \texttt{leo} executable. Sledgehammer requires version 1.3.4 or above.
 | 
| 44098 | 789 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 790 | \item[\labelitemi] \textbf{\textit{leo3}:} Leo-III is an automatic
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 791 | higher-order prover developed by Alexander Steen, Max Wisniewski, Christoph | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 792 | Benzm\"uller et al.\ \cite{leo3},
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 793 | with support for the TPTP typed higher-order syntax (THF0). To use Leo-III, set | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 794 | the environment variable \texttt{LEO3\_HOME} to the directory that contains the
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 795 | \texttt{leo3} executable. Sledgehammer requires version 1.1 or above.
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 796 | |
| 45516 | 797 | \item[\labelitemi] \textbf{\textit{satallax}:} Satallax is an automatic
 | 
| 44098 | 798 | higher-order prover developed by Chad Brown et al.\ \cite{satallax}, with
 | 
| 46242 | 799 | support for the TPTP typed higher-order syntax (THF0). To use Satallax, set the | 
| 800 | environment variable \texttt{SATALLAX\_HOME} to the directory that contains the
 | |
| 801 | \texttt{satallax} executable. Sledgehammer requires version 2.2 or above.
 | |
| 44098 | 802 | |
| 45516 | 803 | \item[\labelitemi] \textbf{\textit{spass}:} SPASS is a first-order resolution
 | 
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 804 | prover developed by Christoph Weidenbach et al.\ \cite{weidenbach-et-al-2009}.
 | 
| 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 805 | To use SPASS, set the environment variable \texttt{SPASS\_HOME} to the directory
 | 
| 47056 | 806 | that contains the \texttt{SPASS} executable and \texttt{SPASS\_VERSION} to the
 | 
| 47577 | 807 | version number (e.g., ``3.8ds''), or install the prebuilt SPASS package from | 
| 48006 | 808 | \download. Sledgehammer requires version 3.8ds or above. | 
| 36926 | 809 | |
| 48652 | 810 | \item[\labelitemi] \textbf{\textit{vampire}:} Vampire is a first-order
 | 
| 811 | resolution prover developed by Andrei Voronkov and his colleagues | |
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 812 | \cite{riazanov-voronkov-2002}. To use Vampire, set the environment variable
 | 
| 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 813 | \texttt{VAMPIRE\_HOME} to the directory that contains the \texttt{vampire}
 | 
| 48006 | 814 | executable and \texttt{VAMPIRE\_VERSION} to the version number (e.g.,
 | 
| 56380 
9bb2856cc845
don't pass Vampire option that doesn't exist anymore (and that wasn't strictly necessary with older Vampires)
 blanchet parents: 
56379diff
changeset | 815 | ``3.0''). Sledgehammer has been tested with versions 0.6 to 3.0. | 
| 52996 | 816 | Versions strictly above 1.8 support the TPTP typed first-order format (TFF0). | 
| 40942 | 817 | |
| 59035 
3a2153676705
renamed 'veriT' to 'verit', to stick to all-lowercase rule for prover names
 blanchet parents: 
59034diff
changeset | 818 | \item[\labelitemi] \textbf{\textit{verit}:} veriT \cite{bouton-et-al-2009} is an
 | 
| 65516 | 819 | SMT solver developed by David D\'eharbe, Pascal Fontaine, and their colleagues. | 
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 820 | It is specifically designed to produce detailed proofs for reconstruction in | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 821 | proof assistants. To use veriT, set the environment variable | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 822 | \texttt{VERIT\_SOLVER} to the complete path of the executable, including the
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 823 | file name. Sledgehammer has been tested with version smtcomp2014. | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 824 | |
| 45516 | 825 | \item[\labelitemi] \textbf{\textit{z3}:} Z3 is an SMT solver developed at
 | 
| 41740 
4b09f8b9e012
added "Z3 as an ATP" support to Sledgehammer locally
 blanchet parents: 
41738diff
changeset | 826 | Microsoft Research \cite{z3}. To use Z3, set the environment variable
 | 
| 59961 | 827 | \texttt{Z3\_SOLVER} to the complete path of the executable, including the
 | 
| 828 | file name. Sledgehammer has been tested with a pre-release version of 4.4.0. | |
| 56378 | 829 | |
| 830 | \item[\labelitemi] \textbf{\textit{z3\_tptp}:} This version of Z3 pretends to be
 | |
| 831 | an ATP, exploiting Z3's support for the TPTP untyped and typed first-order | |
| 832 | formats (FOF and TFF0). It is included for experimental purposes. It requires | |
| 56725 | 833 | version 4.3.1 of Z3 or above. To use it, set the environment variable | 
| 56378 | 834 | \texttt{Z3\_TPTP\_HOME} to the directory that contains the \texttt{z3\_tptp}
 | 
| 835 | executable. | |
| 58497 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 836 | |
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 837 | \item[\labelitemi] \textbf{\textit{zipperposition}:} Zipperposition
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 838 | \cite{cruanes-2014} is an experimental first-order resolution prover developed
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 839 | by Simon Cruane. To use Zipperposition, set the environment variable | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 840 | \texttt{ZIPPERPOSITION\_HOME} to the directory that contains the
 | 
| 
20aaa307c0ff
updated docs with two provers: veriT and Zipperposition
 blanchet parents: 
58090diff
changeset | 841 | \texttt{zipperposition} executable.
 | 
| 57536 | 842 | \end{enum}
 | 
| 56378 | 843 | |
| 48701 | 844 | \end{sloppy}
 | 
| 42945 | 845 | |
| 57536 | 846 | Moreover, the following remote provers are supported: | 
| 42945 | 847 | |
| 848 | \begin{enum}
 | |
| 52078 | 849 | \item[\labelitemi] \textbf{\textit{remote\_agsyhol}:} The remote version of
 | 
| 55334 
5f5104069b33
agsyHOL is also called AgsyHOL by Lindblad himself, so let's follow this convention
 blanchet parents: 
55297diff
changeset | 850 | AgsyHOL runs on Geoff Sutcliffe's Miami servers \cite{sutcliffe-2000}.
 | 
| 52078 | 851 | |
| 45516 | 852 | \item[\labelitemi] \textbf{\textit{remote\_e}:} The remote version of E runs
 | 
| 36926 | 853 | on Geoff Sutcliffe's Miami servers \cite{sutcliffe-2000}.
 | 
| 854 | ||
| 45516 | 855 | \item[\labelitemi] \textbf{\textit{remote\_e\_sine}:} E-SInE is a metaprover
 | 
| 47075 | 856 | developed by Kry\v stof Hoder \cite{sine} based on E. It runs on Geoff
 | 
| 857 | Sutcliffe's Miami servers. | |
| 44091 | 858 | |
| 45516 | 859 | \item[\labelitemi] \textbf{\textit{remote\_e\_tofof}:} E-ToFoF is a metaprover
 | 
| 44091 | 860 | developed by Geoff Sutcliffe \cite{tofof} based on E running on his Miami
 | 
| 45516 | 861 | servers. This ATP supports the TPTP typed first-order format (TFF0). The | 
| 44091 | 862 | remote version of E-ToFoF runs on Geoff Sutcliffe's Miami servers. | 
| 863 | ||
| 48701 | 864 | \item[\labelitemi] \textbf{\textit{remote\_iprover}:} The
 | 
| 45339 | 865 | remote version of iProver runs on Geoff Sutcliffe's Miami servers | 
| 866 | \cite{sutcliffe-2000}.
 | |
| 867 | ||
| 48701 | 868 | \item[\labelitemi] \textbf{\textit{remote\_iprover\_eq}:} The
 | 
| 45339 | 869 | remote version of iProver-Eq runs on Geoff Sutcliffe's Miami servers | 
| 870 | \cite{sutcliffe-2000}.
 | |
| 871 | ||
| 45516 | 872 | \item[\labelitemi] \textbf{\textit{remote\_leo2}:} The remote version of LEO-II
 | 
| 44098 | 873 | runs on Geoff Sutcliffe's Miami servers \cite{sutcliffe-2000}.
 | 
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 874 | |
| 67021 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 875 | \item[\labelitemi] \textbf{\textit{remote\_leo3}:} The remote version of Leo-III
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 876 | runs on Geoff Sutcliffe's Miami servers \cite{sutcliffe-2000}.
 | 
| 
41f1f8c4259b
integrated Leo-III in Sledgehammer (thanks to Alexander Steen for the patch)
 blanchet parents: 
66735diff
changeset | 877 | |
| 59577 | 878 | \item[\labelitemi] \textbf{\textit{remote\_pirate}:} Pirate is a
 | 
| 879 | highly experimental first-order resolution prover developed by Daniel Wand. | |
| 880 | The remote version of Pirate run on a private server he generously set up. | |
| 881 | ||
| 45516 | 882 | \item[\labelitemi] \textbf{\textit{remote\_satallax}:} The remote version of
 | 
| 44098 | 883 | Satallax runs on Geoff Sutcliffe's Miami servers \cite{sutcliffe-2000}.
 | 
| 42964 
bf45fd2488a2
document primitive support for LEO-II and Satallax
 blanchet parents: 
42945diff
changeset | 884 | |
| 45516 | 885 | \item[\labelitemi] \textbf{\textit{remote\_snark}:} SNARK is a first-order
 | 
| 43625 | 886 | resolution prover developed by Stickel et al.\ \cite{snark}. It supports the
 | 
| 45516 | 887 | TPTP typed first-order format (TFF0). The remote version of SNARK runs on | 
| 43625 | 888 | Geoff Sutcliffe's Miami servers. | 
| 40073 | 889 | |
| 45516 | 890 | \item[\labelitemi] \textbf{\textit{remote\_vampire}:} The remote version of
 | 
| 48006 | 891 | Vampire runs on Geoff Sutcliffe's Miami servers. | 
| 42945 | 892 | |
| 45516 | 893 | \item[\labelitemi] \textbf{\textit{remote\_waldmeister}:} Waldmeister is a unit
 | 
| 42945 | 894 | equality prover developed by Hillenbrand et al.\ \cite{waldmeister}. It can be
 | 
| 43625 | 895 | used to prove universally quantified equations using unconditional equations, | 
| 896 | corresponding to the TPTP CNF UEQ division. The remote version of Waldmeister | |
| 897 | runs on Geoff Sutcliffe's Miami servers. | |
| 36926 | 898 | \end{enum}
 | 
| 899 | ||
| 59510 | 900 | By default, Sledgehammer runs a subset of CVC4, E, E-SInE, SPASS, Vampire, | 
| 59577 | 901 | veriT, and Z3 in parallel, either locally or remotely---depending on the number | 
| 902 | of processor cores available and on which provers are actually installed. It is | |
| 903 | generally a good idea to run several provers in parallel. | |
| 40059 
6ad9081665db
use consistent terminology in Sledgehammer: "prover = ATP or SMT solver or ..."
 blanchet parents: 
39335diff
changeset | 904 | |
| 
6ad9081665db
use consistent terminology in Sledgehammer: "prover = ATP or SMT solver or ..."
 blanchet parents: 
39335diff
changeset | 905 | \opnodefault{prover}{string}
 | 
| 
6ad9081665db
use consistent terminology in Sledgehammer: "prover = ATP or SMT solver or ..."
 blanchet parents: 
39335diff
changeset | 906 | Alias for \textit{provers}.
 | 
| 
6ad9081665db
use consistent terminology in Sledgehammer: "prover = ATP or SMT solver or ..."
 blanchet parents: 
39335diff
changeset | 907 | |
| 45708 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 908 | \optrue{slice}{dont\_slice}
 | 
| 42443 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 909 | Specifies whether the time allocated to a prover should be sliced into several | 
| 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 910 | segments, each of which has its own set of possibly prover-dependent options. | 
| 42446 | 911 | For SPASS and Vampire, the first slice tries the fast but incomplete | 
| 42443 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 912 | set-of-support (SOS) strategy, whereas the second slice runs without it. For E, | 
| 42446 | 913 | up to three slices are tried, with different weighted search strategies and | 
| 42443 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 914 | number of facts. For SMT solvers, several slices are tried with the same options | 
| 42446 | 915 | each time but fewer and fewer facts. According to benchmarks with a timeout of | 
| 916 | 30 seconds, slicing is a valuable optimization, and you should probably leave it | |
| 54114 | 917 | enabled unless you are conducting experiments. | 
| 42443 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 918 | |
| 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 919 | \nopagebreak | 
| 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 920 | {\small See also \textit{verbose} (\S\ref{output-format}).}
 | 
| 
724e612ba248
implemented general slicing for ATPs, especially E 1.2w and above
 blanchet parents: 
42442diff
changeset | 921 | |
| 57722 | 922 | \optrue{minimize}{dont\_minimize}
 | 
| 45708 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 923 | Specifies whether the minimization tool should be invoked automatically after | 
| 57722 | 924 | proof search. | 
| 45708 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 925 | |
| 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 926 | \nopagebreak | 
| 47036 | 927 | {\small See also \textit{preplay\_timeout} (\S\ref{timeouts})
 | 
| 928 | and \textit{dont\_preplay} (\S\ref{timeouts}).}
 | |
| 45708 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 929 | |
| 53801 | 930 | \opfalse{spy}{dont\_spy}
 | 
| 931 | Specifies whether Sledgehammer should record statistics in | |
| 932 | \texttt{\$ISA\-BELLE\_\allowbreak HOME\_\allowbreak USER/\allowbreak spy\_\allowbreak sledgehammer}.
 | |
| 933 | These statistics can be useful to the developers of Sledgehammer. If you are willing to have your | |
| 934 | interactions recorded in the name of science, please enable this feature and send the statistics | |
| 935 | file every now and then to the author of this manual (\authoremail). | |
| 936 | To change the default value of this option globally, set the environment variable | |
| 57107 
2d502370ee99
changed MaSh to use SML version instead of Python version of naive Bayes by default (i.e. if MASH=yes in the settings, or 'fact_filter=mash' with no other explicit setting)
 blanchet parents: 
57095diff
changeset | 937 | \texttt{SLEDGEHAMMER\_SPY} to \textit{yes}.
 | 
| 53801 | 938 | |
| 939 | \nopagebreak | |
| 940 | {\small See also \textit{debug} (\S\ref{output-format}).}
 | |
| 941 | ||
| 36926 | 942 | \opfalse{overlord}{no\_overlord}
 | 
| 943 | Specifies whether Sledgehammer should put its temporary files in | |
| 944 | \texttt{\$ISA\-BELLE\_\allowbreak HOME\_\allowbreak USER}, which is useful for
 | |
| 945 | debugging Sledgehammer but also unsafe if several instances of the tool are run | |
| 48390 
4147f2bc4442
add versioning to MaSh state + cleanup dead code
 blanchet parents: 
48388diff
changeset | 946 | simultaneously. The files are identified by the prefixes \texttt{prob\_} and
 | 
| 
4147f2bc4442
add versioning to MaSh state + cleanup dead code
 blanchet parents: 
48388diff
changeset | 947 | \texttt{mash\_}; you may safely remove them after Sledgehammer has run.
 | 
| 36926 | 948 | |
| 54139 | 949 | \textbf{Warning:} This option is not thread-safe. Use at your own risks.
 | 
| 950 | ||
| 36926 | 951 | \nopagebreak | 
| 952 | {\small See also \textit{debug} (\S\ref{output-format}).}
 | |
| 953 | \end{enum}
 | |
| 954 | ||
| 48387 | 955 | \subsection{Relevance Filter}
 | 
| 956 | \label{relevance-filter}
 | |
| 957 | ||
| 958 | \begin{enum}
 | |
| 48388 | 959 | \opdefault{fact\_filter}{string}{smart}
 | 
| 960 | Specifies the relevance filter to use. The following filters are available: | |
| 961 | ||
| 962 | \begin{enum}
 | |
| 963 | \item[\labelitemi] \textbf{\textit{mepo}:}
 | |
| 964 | The traditional memoryless MePo relevance filter. | |
| 965 | ||
| 966 | \item[\labelitemi] \textbf{\textit{mash}:}
 | |
| 57532 | 967 | The MaSh machine learner. Three learning algorithms are provided: | 
| 57019 | 968 | |
| 969 | \begin{enum}
 | |
| 57463 | 970 | \item[\labelitemi] \textbf{\textit{nb}} is an implementation of naive Bayes.
 | 
| 57019 | 971 | |
| 57463 | 972 | \item[\labelitemi] \textbf{\textit{knn}} is an implementation of $k$-nearest
 | 
| 973 | neighbors. | |
| 974 | ||
| 57659 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 975 | \item[\labelitemi] \textbf{\textit{nb\_knn}} (also called \textbf{\textit{yes}}
 | 
| 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 976 | and \textbf{\textit{sml}}) is a combination of naive Bayes and $k$-nearest
 | 
| 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 977 | neighbors. | 
| 57019 | 978 | \end{enum}
 | 
| 979 | ||
| 57272 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 980 | In addition, the special value \textit{none} is used to disable machine learning by
 | 
| 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 981 | default (cf.\ \textit{smart} below).
 | 
| 
fd539459a112
enabled MaSh by default -- set 'MaSh' to 'none' in Isabelle Plugin Options to disable
 blanchet parents: 
57245diff
changeset | 982 | |
| 57659 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 983 | The default algorithm is \textit{nb\_knn}. The algorithm can be selected by
 | 
| 61043 | 984 | setting the ``MaSh'' option under ``Plugins > Plugin Options > Isabelle > | 
| 57532 | 985 | General'' in Isabelle/jEdit. Persistent data for both algorithms is stored in | 
| 986 | the directory \texttt{\$ISABELLE\_\allowbreak HOME\_\allowbreak USER/\allowbreak
 | |
| 987 | mash}. | |
| 48388 | 988 | |
| 51024 
98fb341d32e3
distinguish MeSh and smart -- with smart, allow combinations of MaSh, MeSh, and MePo in different slices -- and use MaSh also with SMT solvers, based on evaluation
 blanchet parents: 
50929diff
changeset | 989 | \item[\labelitemi] \textbf{\textit{mesh}:} The MeSh filter, which combines the
 | 
| 
98fb341d32e3
distinguish MeSh and smart -- with smart, allow combinations of MaSh, MeSh, and MePo in different slices -- and use MaSh also with SMT solvers, based on evaluation
 blanchet parents: 
50929diff
changeset | 990 | rankings from MePo and MaSh. | 
| 48388 | 991 | |
| 57659 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 992 | \item[\labelitemi] \textbf{\textit{smart}:} A combination of MePo, MaSh, and
 | 
| 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 993 | MeSh. If the learning algorithm is set to be \textit{none}, \textit{smart}
 | 
| 
b246943b3aa3
reenabled MaSh for Isabelle2014 release (hopefully)
 blanchet parents: 
57636diff
changeset | 994 | behaves like MePo. | 
| 48388 | 995 | \end{enum}
 | 
| 996 | ||
| 48387 | 997 | \opdefault{max\_facts}{smart\_int}{smart}
 | 
| 998 | Specifies the maximum number of facts that may be returned by the relevance | |
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 999 | filter. If the option is set to \textit{smart} (the default), it effectively
 | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1000 | takes a value that was empirically found to be appropriate for the prover. | 
| 57107 
2d502370ee99
changed MaSh to use SML version instead of Python version of naive Bayes by default (i.e. if MASH=yes in the settings, or 'fact_filter=mash' with no other explicit setting)
 blanchet parents: 
57095diff
changeset | 1001 | Typical values lie between 50 and 1000. | 
| 53757 
8d1a059ebcdb
reduce the number of emitted MaSh commands (among others to facilitate debugging)
 blanchet parents: 
53518diff
changeset | 1002 | |
| 48387 | 1003 | \opdefault{fact\_thresholds}{float\_pair}{\upshape 0.45~0.85}
 | 
| 1004 | Specifies the thresholds above which facts are considered relevant by the | |
| 1005 | relevance filter. The first threshold is used for the first iteration of the | |
| 1006 | relevance filter and the second threshold is used for the last iteration (if it | |
| 1007 | is reached). The effective threshold is quadratically interpolated for the other | |
| 1008 | iterations. Each threshold ranges from 0 to 1, where 0 means that all theorems | |
| 1009 | are relevant and 1 only theorems that refer to previously seen constants. | |
| 1010 | ||
| 48388 | 1011 | \optrue{learn}{dont\_learn}
 | 
| 1012 | Specifies whether MaSh should be run automatically by Sledgehammer to learn the | |
| 53760 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 1013 | available theories (and hence provide more accurate results). Learning takes | 
| 
cf37f4b84824
moved focus to Isabell/jEdit and away from Proof General
 blanchet parents: 
53759diff
changeset | 1014 | place only if MaSh is enabled. | 
| 48388 | 1015 | |
| 48387 | 1016 | \opdefault{max\_new\_mono\_instances}{int}{smart}
 | 
| 1017 | Specifies the maximum number of monomorphic instances to generate beyond | |
| 1018 | \textit{max\_facts}. The higher this limit is, the more monomorphic instances
 | |
| 1019 | are potentially generated. Whether monomorphization takes place depends on the | |
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1020 | type encoding used. If the option is set to \textit{smart} (the default), it
 | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1021 | takes a value that was empirically found to be appropriate for the prover. For | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1022 | most provers, this value is 100. | 
| 48387 | 1023 | |
| 1024 | \nopagebreak | |
| 1025 | {\small See also \textit{type\_enc} (\S\ref{problem-encoding}).}
 | |
| 1026 | ||
| 1027 | \opdefault{max\_mono\_iters}{int}{smart}
 | |
| 1028 | Specifies the maximum number of iterations for the monomorphization fixpoint | |
| 1029 | construction. The higher this limit is, the more monomorphic instances are | |
| 1030 | potentially generated. Whether monomorphization takes place depends on the | |
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1031 | type encoding used. If the option is set to \textit{smart} (the default), it
 | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1032 | takes a value that was empirically found to be appropriate for the prover. | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1033 | For most provers, this value is 3. | 
| 48387 | 1034 | |
| 1035 | \nopagebreak | |
| 1036 | {\small See also \textit{type\_enc} (\S\ref{problem-encoding}).}
 | |
| 1037 | \end{enum}
 | |
| 1038 | ||
| 36926 | 1039 | \subsection{Problem Encoding}
 | 
| 1040 | \label{problem-encoding}
 | |
| 1041 | ||
| 45516 | 1042 | \newcommand\comb[1]{\const{#1}}
 | 
| 1043 | ||
| 36926 | 1044 | \begin{enum}
 | 
| 45516 | 1045 | \opdefault{lam\_trans}{string}{smart}
 | 
| 1046 | Specifies the $\lambda$ translation scheme to use in ATP problems. The supported | |
| 1047 | translation schemes are listed below: | |
| 1048 | ||
| 1049 | \begin{enum}
 | |
| 1050 | \item[\labelitemi] \textbf{\textit{hide\_lams}:} Hide the $\lambda$-abstractions
 | |
| 1051 | by replacing them by unspecified fresh constants, effectively disabling all | |
| 1052 | reasoning under $\lambda$-abstractions. | |
| 1053 | ||
| 46366 | 1054 | \item[\labelitemi] \textbf{\textit{lifting}:} Introduce a new
 | 
| 45516 | 1055 | supercombinator \const{c} for each cluster of $n$~$\lambda$-abstractions,
 | 
| 1056 | defined using an equation $\const{c}~x_1~\ldots~x_n = t$ ($\lambda$-lifting).
 | |
| 1057 | ||
| 46366 | 1058 | \item[\labelitemi] \textbf{\textit{combs}:} Rewrite lambdas to the Curry
 | 
| 45516 | 1059 | combinators (\comb{I}, \comb{K}, \comb{S}, \comb{B}, \comb{C}). Combinators
 | 
| 1060 | enable the ATPs to synthesize $\lambda$-terms but tend to yield bulkier formulas | |
| 1061 | than $\lambda$-lifting: The translation is quadratic in the worst case, and the | |
| 1062 | equational definitions of the combinators are very prolific in the context of | |
| 1063 | resolution. | |
| 1064 | ||
| 46366 | 1065 | \item[\labelitemi] \textbf{\textit{combs\_and\_lifting}:} Introduce a new
 | 
| 45516 | 1066 | supercombinator \const{c} for each cluster of $\lambda$-abstractions and characterize it both using a
 | 
| 1067 | lifted equation $\const{c}~x_1~\ldots~x_n = t$ and via Curry combinators.
 | |
| 1068 | ||
| 46366 | 1069 | \item[\labelitemi] \textbf{\textit{combs\_or\_lifting}:} For each cluster of
 | 
| 1070 | $\lambda$-abstractions, heuristically choose between $\lambda$-lifting and Curry | |
| 1071 | combinators. | |
| 1072 | ||
| 45516 | 1073 | \item[\labelitemi] \textbf{\textit{keep\_lams}:}
 | 
| 1074 | Keep the $\lambda$-abstractions in the generated problems. This is available | |
| 1075 | only with provers that support the THF0 syntax. | |
| 1076 | ||
| 1077 | \item[\labelitemi] \textbf{\textit{smart}:} The actual translation scheme used
 | |
| 1078 | depends on the ATP and should be the most efficient scheme for that ATP. | |
| 1079 | \end{enum}
 | |
| 1080 | ||
| 46366 | 1081 | For SMT solvers, the $\lambda$ translation scheme is always \textit{lifting},
 | 
| 1082 | irrespective of the value of this option. | |
| 45516 | 1083 | |
| 46409 
d4754183ccce
made option available to users (mostly for experiments)
 blanchet parents: 
46366diff
changeset | 1084 | \opsmartx{uncurried\_aliases}{no\_uncurried\_aliases}
 | 
| 46411 | 1085 | Specifies whether fresh function symbols should be generated as aliases for | 
| 1086 | applications of curried functions in ATP problems. | |
| 46409 
d4754183ccce
made option available to users (mostly for experiments)
 blanchet parents: 
46366diff
changeset | 1087 | |
| 43627 
ecd4bb7a8bc0
update documentation after "type_enc" renaming + fixed a few other out-of-date factlets
 blanchet parents: 
43625diff
changeset | 1088 | \opdefault{type\_enc}{string}{smart}
 | 
| 
ecd4bb7a8bc0
update documentation after "type_enc" renaming + fixed a few other out-of-date factlets
 blanchet parents: 
43625diff
changeset | 1089 | Specifies the type encoding to use in ATP problems. Some of the type encodings | 
| 
ecd4bb7a8bc0
update documentation after "type_enc" renaming + fixed a few other out-of-date factlets
 blanchet parents: 
43625diff
changeset | 1090 | are unsound, meaning that they can give rise to spurious proofs | 
| 48093 | 1091 | (unreconstructible using \textit{metis}). The type encodings are
 | 
| 46300 | 1092 | listed below, with an indication of their soundness in parentheses. | 
| 48093 | 1093 | An asterisk (*) indicates that the encoding is slightly incomplete for | 
| 56120 
04c37dfef684
updated Sledgehammer docs w.r.t. 'smt2' and 'z3_new'
 blanchet parents: 
56119diff
changeset | 1094 | reconstruction with \textit{metis}, unless the \textit{strict} option (described
 | 
| 46302 | 1095 | below) is enabled. | 
| 42228 | 1096 | |
| 1097 | \begin{enum}
 | |
| 48090 | 1098 | \item[\labelitemi] \textbf{\textit{erased} (unsound):} No type information is
 | 
| 46300 | 1099 | supplied to the ATP, not even to resolve overloading. Types are simply erased. | 
| 42582 | 1100 | |
| 45516 | 1101 | \item[\labelitemi] \textbf{\textit{poly\_guards} (sound):} Types are encoded using
 | 
| 46300 | 1102 | a predicate \const{g}$(\tau, t)$ that guards bound
 | 
| 48090 | 1103 | variables. Constants are annotated with their types, supplied as extra | 
| 42887 
771be1dcfef6
document new type system and soundness properties of the different systems
 blanchet parents: 
42884diff
changeset | 1104 | arguments, to resolve overloading. | 
| 42685 | 1105 | |
| 45516 | 1106 | \item[\labelitemi] \textbf{\textit{poly\_tags} (sound):} Each term and subterm is
 | 
| 46300 | 1107 | tagged with its type using a function $\const{t\/}(\tau, t)$.
 | 
| 42887 
771be1dcfef6
document new type system and soundness properties of the different systems
 blanchet parents: 
42884diff
changeset | 1108 | |
| 45516 | 1109 | \item[\labelitemi] \textbf{\textit{poly\_args} (unsound):}
 | 
| 43990 | 1110 | Like for \textit{poly\_guards} constants are annotated with their types to
 | 
| 43002 
e88fde86e4c2
mention contributions from LCP and explain metis and metisFT encodings
 blanchet parents: 
42996diff
changeset | 1111 | resolve overloading, but otherwise no type information is encoded. This | 
| 57040 | 1112 | is the default encoding used by the \textit{metis} proof method.
 | 
| 42685 | 1113 | |
| 45516 | 1114 | \item[\labelitemi] | 
| 42722 | 1115 | \textbf{%
 | 
| 44494 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1116 | \textit{raw\_mono\_guards}, \textit{raw\_mono\_tags} (sound); \\
 | 
| 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1117 | \textit{raw\_mono\_args} (unsound):} \\
 | 
| 43990 | 1118 | Similar to \textit{poly\_guards}, \textit{poly\_tags}, and \textit{poly\_args},
 | 
| 42722 | 1119 | respectively, but the problem is additionally monomorphized, meaning that type | 
| 1120 | variables are instantiated with heuristically chosen ground types. | |
| 1121 | Monomorphization can simplify reasoning but also leads to larger fact bases, | |
| 1122 | which can slow down the ATPs. | |
| 42582 | 1123 | |
| 45516 | 1124 | \item[\labelitemi] | 
| 42722 | 1125 | \textbf{%
 | 
| 44494 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1126 | \textit{mono\_guards}, \textit{mono\_tags} (sound);
 | 
| 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1127 | \textit{mono\_args} (unsound):} \\
 | 
| 42722 | 1128 | Similar to | 
| 44494 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1129 | \textit{raw\_mono\_guards}, \textit{raw\_mono\_tags}, and
 | 
| 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1130 | \textit{raw\_mono\_args}, respectively but types are mangled in constant names
 | 
| 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1131 | instead of being supplied as ground term arguments. The binary predicate | 
| 46300 | 1132 | $\const{g}(\tau, t)$ becomes a unary predicate
 | 
| 1133 | $\const{g\_}\tau(t)$, and the binary function
 | |
| 1134 | $\const{t}(\tau, t)$ becomes a unary function
 | |
| 1135 | $\const{t\_}\tau(t)$.
 | |
| 42589 
9f7c48463645
restructured type systems some more -- the old naming schemes had "argshg diff |less" and "tagshg diff |less" as equivalent and didn't support a monomorphic version of "tags"
 blanchet parents: 
42582diff
changeset | 1136 | |
| 46435 | 1137 | \item[\labelitemi] \textbf{\textit{mono\_native} (sound):} Exploits native
 | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 1138 | first-order types if the prover supports the TFF0, TFF1, or THF0 syntax; | 
| 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 1139 | otherwise, falls back on \textit{mono\_guards}. The problem is monomorphized.
 | 
| 43625 | 1140 | |
| 46435 | 1141 | \item[\labelitemi] \textbf{\textit{mono\_native\_higher} (sound):} Exploits
 | 
| 1142 | native higher-order types if the prover supports the THF0 syntax; otherwise, | |
| 1143 | falls back on \textit{mono\_native} or \textit{mono\_guards}. The problem is
 | |
| 1144 | monomorphized. | |
| 42681 | 1145 | |
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 1146 | \item[\labelitemi] \textbf{\textit{poly\_native} (sound):} Exploits native
 | 
| 48078 | 1147 | first-order polymorphic types if the prover supports the TFF1 syntax; otherwise, | 
| 46643 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 1148 | falls back on \textit{mono\_native}.
 | 
| 
a88bccd2b567
added support for Alt-Ergo through Why3 (mostly for experimental purposes, e.g. polymorphism vs. monomorphization)
 blanchet parents: 
46640diff
changeset | 1149 | |
| 45516 | 1150 | \item[\labelitemi] | 
| 42681 | 1151 | \textbf{%
 | 
| 44494 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1152 | \textit{poly\_guards}?, \textit{poly\_tags}?, \textit{raw\_mono\_guards}?, \\
 | 
| 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1153 | \textit{raw\_mono\_tags}?, \textit{mono\_guards}?, \textit{mono\_tags}?, \\
 | 
| 46435 | 1154 | \textit{mono\_native}? (sound*):} \\
 | 
| 43990 | 1155 | The type encodings \textit{poly\_guards}, \textit{poly\_tags},
 | 
| 44494 
a77901b3774e
rationalized option names -- mono becomes raw_mono and mangled becomes mono
 blanchet parents: 
44423diff
changeset | 1156 | \textit{raw\_mono\_guards}, \textit{raw\_mono\_tags}, \textit{mono\_guards},
 | 
| 47036 | 1157 | \textit{mono\_tags}, and \textit{mono\_native} are fully typed and sound. For
 | 
| 1158 | each of these, Sledgehammer also provides a lighter variant identified by a | |
| 1159 | question mark (`\hbox{?}')\ that detects and erases monotonic types, notably
 | |
| 1160 | infinite types. (For \textit{mono\_native}, the types are not actually erased
 | |
| 1161 | but rather replaced by a shared uniform type of individuals.) As argument to the | |
| 1162 | \textit{metis} proof method, the question mark is replaced by a
 | |
| 1163 | \hbox{``\textit{\_query\/}''} suffix.
 | |
| 42582 | 1164 | |
| 45516 | 1165 | \item[\labelitemi] | 
| 42887 
771be1dcfef6
document new type system and soundness properties of the different systems
 blanchet parents: 
42884diff
changeset | 1166 | \textbf{%
 | 
| 44769 | 1167 | \textit{poly\_guards}??, \textit{poly\_tags}??, \textit{raw\_mono\_guards}??, \\
 | 
| 1168 | \textit{raw\_mono\_tags}??, \textit{mono\_guards}??, \textit{mono\_tags}?? \\
 | |
| 46300 | 1169 | (sound*):} \\ | 
| 44816 | 1170 | Even lighter versions of the `\hbox{?}' encodings. As argument to the
 | 
| 1171 | \textit{metis} proof method, the `\hbox{??}' suffix is replaced by
 | |
| 46242 | 1172 | \hbox{``\textit{\_query\_query\/}''}.
 | 
| 44816 | 1173 | |
| 45516 | 1174 | \item[\labelitemi] | 
| 44816 | 1175 | \textbf{%
 | 
| 48184 | 1176 | \textit{poly\_guards}@, \textit{poly\_tags}@, \textit{raw\_mono\_guards}@, \\
 | 
| 1177 | \textit{raw\_mono\_tags}@ (sound*):} \\
 | |
| 44816 | 1178 | Alternative versions of the `\hbox{??}' encodings. As argument to the
 | 
| 48184 | 1179 | \textit{metis} proof method, the `\hbox{@}' suffix is replaced by
 | 
| 1180 | \hbox{``\textit{\_at\/}''}.
 | |
| 44769 | 1181 | |
| 48093 | 1182 | \item[\labelitemi] \textbf{\textit{poly\_args}?, \textit{raw\_mono\_args}? (unsound):} \\
 | 
| 1183 | Lighter versions of \textit{poly\_args} and \textit{raw\_mono\_args}.
 | |
| 1184 | ||
| 45516 | 1185 | \item[\labelitemi] \textbf{\textit{smart}:} The actual encoding used depends on
 | 
| 47036 | 1186 | the ATP and should be the most efficient sound encoding for that ATP. | 
| 42228 | 1187 | \end{enum}
 | 
| 1188 | ||
| 46435 | 1189 | For SMT solvers, the type encoding is always \textit{mono\_native}, irrespective
 | 
| 44743 | 1190 | of the value of this option. | 
| 42888 | 1191 | |
| 1192 | \nopagebreak | |
| 1193 | {\small See also \textit{max\_new\_mono\_instances} (\S\ref{relevance-filter})
 | |
| 1194 | and \textit{max\_mono\_iters} (\S\ref{relevance-filter}).}
 | |
| 43574 | 1195 | |
| 46302 | 1196 | \opfalse{strict}{non\_strict}
 | 
| 46300 | 1197 | Specifies whether Sledgehammer should run in its strict mode. In that mode, | 
| 46302 | 1198 | sound type encodings marked with an asterisk (*) above are made complete | 
| 46300 | 1199 | for reconstruction with \textit{metis}, at the cost of some clutter in the
 | 
| 1200 | generated problems. This option has no effect if \textit{type\_enc} is
 | |
| 1201 | deliberately set to an unsound encoding. | |
| 38591 | 1202 | \end{enum}
 | 
| 36926 | 1203 | |
| 1204 | \subsection{Output Format}
 | |
| 1205 | \label{output-format}
 | |
| 1206 | ||
| 1207 | \begin{enum}
 | |
| 1208 | ||
| 1209 | \opfalse{verbose}{quiet}
 | |
| 1210 | Specifies whether the \textbf{sledgehammer} command should explain what it does.
 | |
| 1211 | ||
| 1212 | \opfalse{debug}{no\_debug}
 | |
| 40203 | 1213 | Specifies whether Sledgehammer should display additional debugging information | 
| 1214 | beyond what \textit{verbose} already displays. Enabling \textit{debug} also
 | |
| 61317 | 1215 | enables \textit{verbose} behind the scenes.
 | 
| 36926 | 1216 | |
| 1217 | \nopagebreak | |
| 53801 | 1218 | {\small See also \textit{spy} (\S\ref{mode-of-operation}) and
 | 
| 1219 | \textit{overlord} (\S\ref{mode-of-operation}).}
 | |
| 36926 | 1220 | |
| 51190 
2654b3965c8d
made "isar_proofs" a 3-way option, to provide a way to totally disable isar_proofs if desired
 blanchet parents: 
51189diff
changeset | 1221 | \opsmart{isar\_proofs}{no\_isar\_proofs}
 | 
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1222 | Specifies whether Isar proofs should be output in addition to one-line proofs. | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1223 | The construction of Isar proof is still experimental and may sometimes fail; | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1224 | however, when they succeed they are usually faster and more intelligible than | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1225 | one-line proofs. If the option is set to \textit{smart} (the default), Isar
 | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1226 | proofs are only generated when no working one-line proof is available. | 
| 36926 | 1227 | |
| 57784 | 1228 | \opdefault{compress}{int}{smart}
 | 
| 49919 | 1229 | Specifies the granularity of the generated Isar proofs if \textit{isar\_proofs}
 | 
| 51190 
2654b3965c8d
made "isar_proofs" a 3-way option, to provide a way to totally disable isar_proofs if desired
 blanchet parents: 
51189diff
changeset | 1230 | is explicitly enabled. A value of $n$ indicates that each Isar proof step should | 
| 57784 | 1231 | correspond to a group of up to $n$ consecutive proof steps in the ATP proof. If | 
| 1232 | the option is set to \textit{smart} (the default), the compression factor is 10
 | |
| 1233 | if the \textit{isar\_proofs} option is explicitly enabled; otherwise, it is
 | |
| 1234 | $\infty$. | |
| 51189 | 1235 | |
| 57245 | 1236 | \optrueonly{dont\_compress}
 | 
| 57784 | 1237 | Alias for ``\textit{compress} = 1''.
 | 
| 51189 | 1238 | |
| 57245 | 1239 | \optrue{try0}{dont\_try0}
 | 
| 53765 | 1240 | Specifies whether standard proof methods such as \textit{auto} and
 | 
| 55289 | 1241 | \textit{blast} should be tried as alternatives to \textit{metis} in Isar proofs.
 | 
| 1242 | The collection of methods is roughly the same as for the \textbf{try0} command.
 | |
| 1243 | ||
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1244 | \opsmart{smt\_proofs}{no\_smt\_proofs}
 | 
| 61283 | 1245 | Specifies whether the \textit{smt} proof method should be tried in addition to
 | 
| 57733 | 1246 | Isabelle's other proof methods. If the option is set to \textit{smart} (the
 | 
| 61283 | 1247 | default), the \textit{smt} method is used for one-line proofs but not in Isar
 | 
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1248 | proofs. | 
| 36926 | 1249 | \end{enum}
 | 
| 1250 | ||
| 57241 | 1251 | \subsection{Regression Testing}
 | 
| 1252 | \label{regression-testing}
 | |
| 38984 | 1253 | |
| 1254 | \begin{enum}
 | |
| 1255 | \opnodefault{expect}{string}
 | |
| 1256 | Specifies the expected outcome, which must be one of the following: | |
| 36926 | 1257 | |
| 1258 | \begin{enum}
 | |
| 46300 | 1259 | \item[\labelitemi] \textbf{\textit{some}:} Sledgehammer found a proof.
 | 
| 45516 | 1260 | \item[\labelitemi] \textbf{\textit{none}:} Sledgehammer found no proof.
 | 
| 1261 | \item[\labelitemi] \textbf{\textit{timeout}:} Sledgehammer timed out.
 | |
| 1262 | \item[\labelitemi] \textbf{\textit{unknown}:} Sledgehammer encountered some
 | |
| 40203 | 1263 | problem. | 
| 38984 | 1264 | \end{enum}
 | 
| 1265 | ||
| 61317 | 1266 | Sledgehammer emits an error if the actual outcome differs from the expected outcome. This option is | 
| 1267 | useful for regression testing. | |
| 38984 | 1268 | |
| 1269 | \nopagebreak | |
| 61317 | 1270 | {\small See also \textit{timeout} (\S\ref{timeouts}).}
 | 
| 43038 | 1271 | \end{enum}
 | 
| 1272 | ||
| 1273 | \subsection{Timeouts}
 | |
| 1274 | \label{timeouts}
 | |
| 1275 | ||
| 1276 | \begin{enum}
 | |
| 54816 
10d48c2a3e32
made timeouts in Sledgehammer not be 'option's -- simplified lots of code
 blanchet parents: 
54788diff
changeset | 1277 | \opdefault{timeout}{float}{\upshape 30}
 | 
| 43038 | 1278 | Specifies the maximum number of seconds that the automatic provers should spend | 
| 1279 | searching for a proof. This excludes problem preparation and is a soft limit. | |
| 1280 | ||
| 57719 | 1281 | \opdefault{preplay\_timeout}{float}{\upshape 1}
 | 
| 55297 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1282 | Specifies the maximum number of seconds that \textit{metis} or other proof
 | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1283 | methods should spend trying to ``preplay'' the found proof. If this option | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1284 | is set to 0, no preplaying takes place, and no timing information is displayed | 
| 
1dfcd49f5dcb
renamed 'smt' option 'smt_proofs' to avoid clash with 'smt' prover
 blanchet parents: 
55290diff
changeset | 1285 | next to the suggested proof method calls. | 
| 45708 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 1286 | |
| 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 1287 | \nopagebreak | 
| 
7c8bed80301f
updated Sledgehammer docs with new/renamed options
 blanchet parents: 
45555diff
changeset | 1288 | {\small See also \textit{minimize} (\S\ref{mode-of-operation}).}
 | 
| 47036 | 1289 | |
| 1290 | \optrueonly{dont\_preplay}
 | |
| 1291 | Alias for ``\textit{preplay\_timeout} = 0''.
 | |
| 1292 | ||
| 36926 | 1293 | \end{enum}
 | 
| 1294 | ||
| 1295 | \let\em=\sl | |
| 48962 
a1acc1cb0271
more standard document preparation within session context;
 wenzelm parents: 
48803diff
changeset | 1296 | \bibliography{manual}{}
 | 
| 36926 | 1297 | \bibliographystyle{abbrv}
 | 
| 1298 | ||
| 1299 | \end{document}
 |