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