doc-src/Nitpick/nitpick.tex
author blanchet
Sun, 25 Apr 2010 00:10:30 +0200
changeset 36389 8228b3a4a2ba
parent 36388 30f7ce76712d
child 36390 eee4ee6a5cbe
permissions -rw-r--r--
remove "skolemize" option from Nitpick, since Skolemization is always useful
     1 \documentclass[a4paper,12pt]{article}
     2 \usepackage[T1]{fontenc}
     3 \usepackage{amsmath}
     4 \usepackage{amssymb}
     5 \usepackage[english,french]{babel}
     6 \usepackage{color}
     7 \usepackage{footmisc}
     8 \usepackage{graphicx}
     9 %\usepackage{mathpazo}
    10 \usepackage{multicol}
    11 \usepackage{stmaryrd}
    12 %\usepackage[scaled=.85]{beramono}
    13 \usepackage{../iman,../pdfsetup}
    14 
    15 %\oddsidemargin=4.6mm
    16 %\evensidemargin=4.6mm
    17 %\textwidth=150mm
    18 %\topmargin=4.6mm
    19 %\headheight=0mm
    20 %\headsep=0mm
    21 %\textheight=234mm
    22 
    23 \def\Colon{\mathord{:\mkern-1.5mu:}}
    24 %\def\lbrakk{\mathopen{\lbrack\mkern-3.25mu\lbrack}}
    25 %\def\rbrakk{\mathclose{\rbrack\mkern-3.255mu\rbrack}}
    26 \def\lparr{\mathopen{(\mkern-4mu\mid}}
    27 \def\rparr{\mathclose{\mid\mkern-4mu)}}
    28 
    29 \def\unk{{?}}
    30 \def\undef{(\lambda x.\; \unk)}
    31 %\def\unr{\textit{others}}
    32 \def\unr{\ldots}
    33 \def\Abs#1{\hbox{\rm{\flqq}}{\,#1\,}\hbox{\rm{\frqq}}}
    34 \def\Q{{\smash{\lower.2ex\hbox{$\scriptstyle?$}}}}
    35 
    36 \hyphenation{Mini-Sat size-change First-Steps grand-parent nit-pick
    37 counter-example counter-examples data-type data-types co-data-type 
    38 co-data-types in-duc-tive co-in-duc-tive}
    39 
    40 \urlstyle{tt}
    41 
    42 \begin{document}
    43 
    44 \selectlanguage{english}
    45 
    46 \title{\includegraphics[scale=0.5]{isabelle_nitpick} \\[4ex]
    47 Picking Nits \\[\smallskipamount]
    48 \Large A User's Guide to Nitpick for Isabelle/HOL}
    49 \author{\hbox{} \\
    50 Jasmin Christian Blanchette \\
    51 {\normalsize Institut f\"ur Informatik, Technische Universit\"at M\"unchen} \\
    52 \hbox{}}
    53 
    54 \maketitle
    55 
    56 \tableofcontents
    57 
    58 \setlength{\parskip}{.7em plus .2em minus .1em}
    59 \setlength{\parindent}{0pt}
    60 \setlength{\abovedisplayskip}{\parskip}
    61 \setlength{\abovedisplayshortskip}{.9\parskip}
    62 \setlength{\belowdisplayskip}{\parskip}
    63 \setlength{\belowdisplayshortskip}{.9\parskip}
    64 
    65 % General-purpose enum environment with correct spacing
    66 \newenvironment{enum}%
    67     {\begin{list}{}{%
    68         \setlength{\topsep}{.1\parskip}%
    69         \setlength{\partopsep}{.1\parskip}%
    70         \setlength{\itemsep}{\parskip}%
    71         \advance\itemsep by-\parsep}}
    72     {\end{list}}
    73 
    74 \def\pre{\begingroup\vskip0pt plus1ex\advance\leftskip by\leftmargin
    75 \advance\rightskip by\leftmargin}
    76 \def\post{\vskip0pt plus1ex\endgroup}
    77 
    78 \def\prew{\pre\advance\rightskip by-\leftmargin}
    79 \def\postw{\post}
    80 
    81 \section{Introduction}
    82 \label{introduction}
    83 
    84 Nitpick \cite{blanchette-nipkow-2009} is a counterexample generator for
    85 Isabelle/HOL \cite{isa-tutorial} that is designed to handle formulas
    86 combining (co)in\-duc\-tive datatypes, (co)in\-duc\-tively defined predicates, and
    87 quantifiers. It builds on Kodkod \cite{torlak-jackson-2007}, a highly optimized
    88 first-order relational model finder developed by the Software Design Group at
    89 MIT. It is conceptually similar to Refute \cite{weber-2008}, from which it
    90 borrows many ideas and code fragments, but it benefits from Kodkod's
    91 optimizations and a new encoding scheme. The name Nitpick is shamelessly
    92 appropriated from a now retired Alloy precursor.
    93 
    94 Nitpick is easy to use---you simply enter \textbf{nitpick} after a putative
    95 theorem and wait a few seconds. Nonetheless, there are situations where knowing
    96 how it works under the hood and how it reacts to various options helps
    97 increase the test coverage. This manual also explains how to install the tool on
    98 your workstation. Should the motivation fail you, think of the many hours of
    99 hard work Nitpick will save you. Proving non-theorems is \textsl{hard work}.
   100 
   101 Another common use of Nitpick is to find out whether the axioms of a locale are
   102 satisfiable, while the locale is being developed. To check this, it suffices to
   103 write
   104 
   105 \prew
   106 \textbf{lemma}~``$\textit{False}$'' \\
   107 \textbf{nitpick}~[\textit{show\_all}]
   108 \postw
   109 
   110 after the locale's \textbf{begin} keyword. To falsify \textit{False}, Nitpick
   111 must find a model for the axioms. If it finds no model, we have an indication
   112 that the axioms might be unsatisfiable.
   113 
   114 Nitpick requires the Kodkodi package for Isabelle as well as a Java 1.5 virtual
   115 machine called \texttt{java}. The examples presented in this manual can be found
   116 in Isabelle's \texttt{src/HOL/Nitpick\_Examples/Manual\_Nits.thy} theory.
   117 
   118 Throughout this manual, we will explicitly invoke the \textbf{nitpick} command.
   119 Nitpick also provides an automatic mode that can be enabled using the
   120 ``Auto Nitpick'' option from the ``Isabelle'' menu in Proof General. In this
   121 mode, Nitpick is run on every newly entered theorem, much like Auto Quickcheck.
   122 The collective time limit for Auto Nitpick and Auto Quickcheck can be set using
   123 the ``Auto Counterexample Time Limit'' option.
   124 
   125 \newbox\boxA
   126 \setbox\boxA=\hbox{\texttt{nospam}}
   127 
   128 The known bugs and limitations at the time of writing are listed in
   129 \S\ref{known-bugs-and-limitations}. Comments and bug reports concerning Nitpick
   130 or this manual should be directed to
   131 \texttt{blan{\color{white}nospam}\kern-\wd\boxA{}chette@\allowbreak
   132 in.\allowbreak tum.\allowbreak de}.
   133 
   134 \vskip2.5\smallskipamount
   135 
   136 \textbf{Acknowledgment.} The author would like to thank Mark Summerfield for
   137 suggesting several textual improvements.
   138 % and Perry James for reporting a typo.
   139 
   140 \section{First Steps}
   141 \label{first-steps}
   142 
   143 This section introduces Nitpick by presenting small examples. If possible, you
   144 should try out the examples on your workstation. Your theory file should start
   145 as follows:
   146 
   147 \prew
   148 \textbf{theory}~\textit{Scratch} \\
   149 \textbf{imports}~\textit{Main~Quotient\_Product~RealDef} \\
   150 \textbf{begin}
   151 \postw
   152 
   153 The results presented here were obtained using the JNI (Java Native Interface)
   154 version of MiniSat and with multithreading disabled to reduce nondeterminism.
   155 This was done by adding the line
   156 
   157 \prew
   158 \textbf{nitpick\_params} [\textit{sat\_solver}~= \textit{MiniSat\_JNI}, \,\textit{max\_threads}~= 1]
   159 \postw
   160 
   161 after the \textbf{begin} keyword. The JNI version of MiniSat is bundled with
   162 Kodkodi and is precompiled for the major platforms. Other SAT solvers can also
   163 be installed, as explained in \S\ref{optimizations}. If you have already
   164 configured SAT solvers in Isabelle (e.g., for Refute), these will also be
   165 available to Nitpick.
   166 
   167 \subsection{Propositional Logic}
   168 \label{propositional-logic}
   169 
   170 Let's start with a trivial example from propositional logic:
   171 
   172 \prew
   173 \textbf{lemma}~``$P \longleftrightarrow Q$'' \\
   174 \textbf{nitpick}
   175 \postw
   176 
   177 You should get the following output:
   178 
   179 \prew
   180 \slshape
   181 Nitpick found a counterexample: \\[2\smallskipamount]
   182 \hbox{}\qquad Free variables: \nopagebreak \\
   183 \hbox{}\qquad\qquad $P = \textit{True}$ \\
   184 \hbox{}\qquad\qquad $Q = \textit{False}$
   185 \postw
   186 
   187 Nitpick can also be invoked on individual subgoals, as in the example below:
   188 
   189 \prew
   190 \textbf{apply}~\textit{auto} \\[2\smallskipamount]
   191 {\slshape goal (2 subgoals): \\
   192 \phantom{0}1. $P\,\Longrightarrow\, Q$ \\
   193 \phantom{0}2. $Q\,\Longrightarrow\, P$} \\[2\smallskipamount]
   194 \textbf{nitpick}~1 \\[2\smallskipamount]
   195 {\slshape Nitpick found a counterexample: \\[2\smallskipamount]
   196 \hbox{}\qquad Free variables: \nopagebreak \\
   197 \hbox{}\qquad\qquad $P = \textit{True}$ \\
   198 \hbox{}\qquad\qquad $Q = \textit{False}$} \\[2\smallskipamount]
   199 \textbf{nitpick}~2 \\[2\smallskipamount]
   200 {\slshape Nitpick found a counterexample: \\[2\smallskipamount]
   201 \hbox{}\qquad Free variables: \nopagebreak \\
   202 \hbox{}\qquad\qquad $P = \textit{False}$ \\
   203 \hbox{}\qquad\qquad $Q = \textit{True}$} \\[2\smallskipamount]
   204 \textbf{oops}
   205 \postw
   206 
   207 \subsection{Type Variables}
   208 \label{type-variables}
   209 
   210 If you are left unimpressed by the previous example, don't worry. The next
   211 one is more mind- and computer-boggling:
   212 
   213 \prew
   214 \textbf{lemma} ``$P~x\,\Longrightarrow\, P~(\textrm{THE}~y.\;P~y)$''
   215 \postw
   216 \pagebreak[2] %% TYPESETTING
   217 
   218 The putative lemma involves the definite description operator, {THE}, presented
   219 in section 5.10.1 of the Isabelle tutorial \cite{isa-tutorial}. The
   220 operator is defined by the axiom $(\textrm{THE}~x.\; x = a) = a$. The putative
   221 lemma is merely asserting the indefinite description operator axiom with {THE}
   222 substituted for {SOME}.
   223 
   224 The free variable $x$ and the bound variable $y$ have type $'a$. For formulas
   225 containing type variables, Nitpick enumerates the possible domains for each type
   226 variable, up to a given cardinality (8 by default), looking for a finite
   227 countermodel:
   228 
   229 \prew
   230 \textbf{nitpick} [\textit{verbose}] \\[2\smallskipamount]
   231 \slshape
   232 Trying 8 scopes: \nopagebreak \\
   233 \hbox{}\qquad \textit{card}~$'a$~= 1; \\
   234 \hbox{}\qquad \textit{card}~$'a$~= 2; \\
   235 \hbox{}\qquad $\qquad\vdots$ \\[.5\smallskipamount]
   236 \hbox{}\qquad \textit{card}~$'a$~= 8. \\[2\smallskipamount]
   237 Nitpick found a counterexample for \textit{card} $'a$~= 3: \\[2\smallskipamount]
   238 \hbox{}\qquad Free variables: \nopagebreak \\
   239 \hbox{}\qquad\qquad $P = \{a_2,\, a_3\}$ \\
   240 \hbox{}\qquad\qquad $x = a_3$ \\[2\smallskipamount]
   241 Total time: 580 ms.
   242 \postw
   243 
   244 Nitpick found a counterexample in which $'a$ has cardinality 3. (For
   245 cardinalities 1 and 2, the formula holds.) In the counterexample, the three
   246 values of type $'a$ are written $a_1$, $a_2$, and $a_3$.
   247 
   248 The message ``Trying $n$ scopes: {\ldots}''\ is shown only if the option
   249 \textit{verbose} is enabled. You can specify \textit{verbose} each time you
   250 invoke \textbf{nitpick}, or you can set it globally using the command
   251 
   252 \prew
   253 \textbf{nitpick\_params} [\textit{verbose}]
   254 \postw
   255 
   256 This command also displays the current default values for all of the options
   257 supported by Nitpick. The options are listed in \S\ref{option-reference}.
   258 
   259 \subsection{Constants}
   260 \label{constants}
   261 
   262 By just looking at Nitpick's output, it might not be clear why the
   263 counterexample in \S\ref{type-variables} is genuine. Let's invoke Nitpick again,
   264 this time telling it to show the values of the constants that occur in the
   265 formula:
   266 
   267 \prew
   268 \textbf{lemma}~``$P~x\,\Longrightarrow\, P~(\textrm{THE}~y.\;P~y)$'' \\
   269 \textbf{nitpick}~[\textit{show\_consts}] \\[2\smallskipamount]
   270 \slshape
   271 Nitpick found a counterexample for \textit{card} $'a$~= 3: \\[2\smallskipamount]
   272 \hbox{}\qquad Free variables: \nopagebreak \\
   273 \hbox{}\qquad\qquad $P = \{a_2,\, a_3\}$ \\
   274 \hbox{}\qquad\qquad $x = a_3$ \\
   275 \hbox{}\qquad Constant: \nopagebreak \\
   276 \hbox{}\qquad\qquad $\textit{The}~\textsl{fallback} = a_1$
   277 \postw
   278 
   279 We can see more clearly now. Since the predicate $P$ isn't true for a unique
   280 value, $\textrm{THE}~y.\;P~y$ can denote any value of type $'a$, even
   281 $a_1$. Since $P~a_1$ is false, the entire formula is falsified.
   282 
   283 As an optimization, Nitpick's preprocessor introduced the special constant
   284 ``\textit{The} fallback'' corresponding to $\textrm{THE}~y.\;P~y$ (i.e.,
   285 $\mathit{The}~(\lambda y.\;P~y)$) when there doesn't exist a unique $y$
   286 satisfying $P~y$. We disable this optimization by passing the
   287 \textit{full\_descrs} option:
   288 
   289 \prew
   290 \textbf{nitpick}~[\textit{full\_descrs},\, \textit{show\_consts}] \\[2\smallskipamount]
   291 \slshape
   292 Nitpick found a counterexample for \textit{card} $'a$~= 3: \\[2\smallskipamount]
   293 \hbox{}\qquad Free variables: \nopagebreak \\
   294 \hbox{}\qquad\qquad $P = \{a_2,\, a_3\}$ \\
   295 \hbox{}\qquad\qquad $x = a_3$ \\
   296 \hbox{}\qquad Constant: \nopagebreak \\
   297 \hbox{}\qquad\qquad $\hbox{\slshape THE}~y.\;P~y = a_1$
   298 \postw
   299 
   300 As the result of another optimization, Nitpick directly assigned a value to the
   301 subterm $\textrm{THE}~y.\;P~y$, rather than to the \textit{The} constant. If we
   302 disable this second optimization by using the command
   303 
   304 \prew
   305 \textbf{nitpick}~[\textit{dont\_specialize},\, \textit{full\_descrs},\,
   306 \textit{show\_consts}]
   307 \postw
   308 
   309 we finally get \textit{The}:
   310 
   311 \prew
   312 \slshape Constant: \nopagebreak \\
   313 \hbox{}\qquad $\mathit{The} = \undef{}
   314     (\!\begin{aligned}[t]%
   315     & \{a_1, a_2, a_3\} := a_3,\> \{a_1, a_2\} := a_3,\> \{a_1, a_3\} := a_3, \\[-2pt] %% TYPESETTING
   316     & \{a_1\} := a_1,\> \{a_2, a_3\} := a_1,\> \{a_2\} := a_2, \\[-2pt]
   317     & \{a_3\} := a_3,\> \{\} := a_3)\end{aligned}$
   318 \postw
   319 
   320 Notice that $\textit{The}~(\lambda y.\;P~y) = \textit{The}~\{a_2, a_3\} = a_1$,
   321 just like before.\footnote{The Isabelle/HOL notation $f(x :=
   322 y)$ denotes the function that maps $x$ to $y$ and that otherwise behaves like
   323 $f$.}
   324 
   325 Our misadventures with THE suggest adding `$\exists!x{.}$' (``there exists a
   326 unique $x$ such that'') at the front of our putative lemma's assumption:
   327 
   328 \prew
   329 \textbf{lemma}~``$\exists {!}x.\; P~x\,\Longrightarrow\, P~(\textrm{THE}~y.\;P~y)$''
   330 \postw
   331 
   332 The fix appears to work:
   333 
   334 \prew
   335 \textbf{nitpick} \\[2\smallskipamount]
   336 \slshape Nitpick found no counterexample.
   337 \postw
   338 
   339 We can further increase our confidence in the formula by exhausting all
   340 cardinalities up to 50:
   341 
   342 \prew
   343 \textbf{nitpick} [\textit{card} $'a$~= 1--50]\footnote{The symbol `--'
   344 can be entered as \texttt{-} (hyphen) or
   345 \texttt{\char`\\\char`\<midarrow\char`\>}.} \\[2\smallskipamount]
   346 \slshape Nitpick found no counterexample.
   347 \postw
   348 
   349 Let's see if Sledgehammer \cite{sledgehammer-2009} can find a proof:
   350 
   351 \prew
   352 \textbf{sledgehammer} \\[2\smallskipamount]
   353 {\slshape Sledgehammer: external prover ``$e$'' for subgoal 1: \\
   354 $\exists{!}x.\; P~x\,\Longrightarrow\, P~(\hbox{\slshape THE}~y.\; P~y)$ \\
   355 Try this command: \textrm{apply}~(\textit{metis~the\_equality})} \\[2\smallskipamount]
   356 \textbf{apply}~(\textit{metis~the\_equality\/}) \nopagebreak \\[2\smallskipamount]
   357 {\slshape No subgoals!}% \\[2\smallskipamount]
   358 %\textbf{done}
   359 \postw
   360 
   361 This must be our lucky day.
   362 
   363 \subsection{Skolemization}
   364 \label{skolemization}
   365 
   366 Are all invertible functions onto? Let's find out:
   367 
   368 \prew
   369 \textbf{lemma} ``$\exists g.\; \forall x.~g~(f~x) = x
   370  \,\Longrightarrow\, \forall y.\; \exists x.~y = f~x$'' \\
   371 \textbf{nitpick} \\[2\smallskipamount]
   372 \slshape
   373 Nitpick found a counterexample for \textit{card} $'a$~= 2 and \textit{card} $'b$~=~1: \\[2\smallskipamount]
   374 \hbox{}\qquad Free variable: \nopagebreak \\
   375 \hbox{}\qquad\qquad $f = \undef{}(b_1 := a_1)$ \\
   376 \hbox{}\qquad Skolem constants: \nopagebreak \\
   377 \hbox{}\qquad\qquad $g = \undef{}(a_1 := b_1,\> a_2 := b_1)$ \\
   378 \hbox{}\qquad\qquad $y = a_2$
   379 \postw
   380 
   381 Although $f$ is the only free variable occurring in the formula, Nitpick also
   382 displays values for the bound variables $g$ and $y$. These values are available
   383 to Nitpick because it performs skolemization as a preprocessing step.
   384 
   385 In the previous example, skolemization only affected the outermost quantifiers.
   386 This is not always the case, as illustrated below:
   387 
   388 \prew
   389 \textbf{lemma} ``$\exists x.\; \forall f.\; f~x = x$'' \\
   390 \textbf{nitpick} \\[2\smallskipamount]
   391 \slshape
   392 Nitpick found a counterexample for \textit{card} $'a$~= 2: \\[2\smallskipamount]
   393 \hbox{}\qquad Skolem constant: \nopagebreak \\
   394 \hbox{}\qquad\qquad $\lambda x.\; f =
   395     \undef{}(\!\begin{aligned}[t]
   396     & a_1 := \undef{}(a_1 := a_2,\> a_2 := a_1), \\[-2pt]
   397     & a_2 := \undef{}(a_1 := a_1,\> a_2 := a_1))\end{aligned}$
   398 \postw
   399 
   400 The variable $f$ is bound within the scope of $x$; therefore, $f$ depends on
   401 $x$, as suggested by the notation $\lambda x.\,f$. If $x = a_1$, then $f$ is the
   402 function that maps $a_1$ to $a_2$ and vice versa; otherwise, $x = a_2$ and $f$
   403 maps both $a_1$ and $a_2$ to $a_1$. In both cases, $f~x \not= x$.
   404 
   405 The source of the Skolem constants is sometimes more obscure:
   406 
   407 \prew
   408 \textbf{lemma} ``$\mathit{refl}~r\,\Longrightarrow\, \mathit{sym}~r$'' \\
   409 \textbf{nitpick} \\[2\smallskipamount]
   410 \slshape
   411 Nitpick found a counterexample for \textit{card} $'a$~= 2: \\[2\smallskipamount]
   412 \hbox{}\qquad Free variable: \nopagebreak \\
   413 \hbox{}\qquad\qquad $r = \{(a_1, a_1),\, (a_2, a_1),\, (a_2, a_2)\}$ \\
   414 \hbox{}\qquad Skolem constants: \nopagebreak \\
   415 \hbox{}\qquad\qquad $\mathit{sym}.x = a_2$ \\
   416 \hbox{}\qquad\qquad $\mathit{sym}.y = a_1$
   417 \postw
   418 
   419 What happened here is that Nitpick expanded the \textit{sym} constant to its
   420 definition:
   421 
   422 \prew
   423 $\mathit{sym}~r \,\equiv\,
   424  \forall x\> y.\,\> (x, y) \in r \longrightarrow (y, x) \in r.$
   425 \postw
   426 
   427 As their names suggest, the Skolem constants $\mathit{sym}.x$ and
   428 $\mathit{sym}.y$ are simply the bound variables $x$ and $y$
   429 from \textit{sym}'s definition.
   430 
   431 \subsection{Natural Numbers and Integers}
   432 \label{natural-numbers-and-integers}
   433 
   434 Because of the axiom of infinity, the type \textit{nat} does not admit any
   435 finite models. To deal with this, Nitpick's approach is to consider finite
   436 subsets $N$ of \textit{nat} and maps all numbers $\notin N$ to the undefined
   437 value (displayed as `$\unk$'). The type \textit{int} is handled similarly.
   438 Internally, undefined values lead to a three-valued logic.
   439 
   440 Here is an example involving \textit{int\/}:
   441 
   442 \prew
   443 \textbf{lemma} ``$\lbrakk i \le j;\> n \le (m{\Colon}\mathit{int})\rbrakk \,\Longrightarrow\, i * n + j * m \le i * m + j * n$'' \\
   444 \textbf{nitpick} \\[2\smallskipamount]
   445 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   446 \hbox{}\qquad Free variables: \nopagebreak \\
   447 \hbox{}\qquad\qquad $i = 0$ \\
   448 \hbox{}\qquad\qquad $j = 1$ \\
   449 \hbox{}\qquad\qquad $m = 1$ \\
   450 \hbox{}\qquad\qquad $n = 0$
   451 \postw
   452 
   453 Internally, Nitpick uses either a unary or a binary representation of numbers.
   454 The unary representation is more efficient but only suitable for numbers very
   455 close to zero. By default, Nitpick attempts to choose the more appropriate
   456 encoding by inspecting the formula at hand. This behavior can be overridden by
   457 passing either \textit{unary\_ints} or \textit{binary\_ints} as option. For
   458 binary notation, the number of bits to use can be specified using
   459 the \textit{bits} option. For example:
   460 
   461 \prew
   462 \textbf{nitpick} [\textit{binary\_ints}, \textit{bits}${} = 16$]
   463 \postw
   464 
   465 With infinite types, we don't always have the luxury of a genuine counterexample
   466 and must often content ourselves with a potential one. The tedious task of
   467 finding out whether the potential counterexample is in fact genuine can be
   468 outsourced to \textit{auto} by passing \textit{check\_potential}. For example:
   469 
   470 \prew
   471 \textbf{lemma} ``$\forall n.\; \textit{Suc}~n \mathbin{\not=} n \,\Longrightarrow\, P$'' \\
   472 \textbf{nitpick} [\textit{card~nat}~= 50, \textit{check\_potential}] \\[2\smallskipamount]
   473 \slshape Warning: The conjecture either trivially holds for the given scopes or lies outside Nitpick's supported
   474 fragment. Only potential counterexamples may be found. \\[2\smallskipamount]
   475 Nitpick found a potential counterexample: \\[2\smallskipamount]
   476 \hbox{}\qquad Free variable: \nopagebreak \\
   477 \hbox{}\qquad\qquad $P = \textit{False}$ \\[2\smallskipamount]
   478 Confirmation by ``\textit{auto}'': The above counterexample is genuine.
   479 \postw
   480 
   481 You might wonder why the counterexample is first reported as potential. The root
   482 of the problem is that the bound variable in $\forall n.\; \textit{Suc}~n
   483 \mathbin{\not=} n$ ranges over an infinite type. If Nitpick finds an $n$ such
   484 that $\textit{Suc}~n \mathbin{=} n$, it evaluates the assumption to
   485 \textit{False}; but otherwise, it does not know anything about values of $n \ge
   486 \textit{card~nat}$ and must therefore evaluate the assumption to $\unk$, not
   487 \textit{True}. Since the assumption can never be satisfied, the putative lemma
   488 can never be falsified.
   489 
   490 Incidentally, if you distrust the so-called genuine counterexamples, you can
   491 enable \textit{check\_\allowbreak genuine} to verify them as well. However, be
   492 aware that \textit{auto} will usually fail to prove that the counterexample is
   493 genuine or spurious.
   494 
   495 Some conjectures involving elementary number theory make Nitpick look like a
   496 giant with feet of clay:
   497 
   498 \prew
   499 \textbf{lemma} ``$P~\textit{Suc}$'' \\
   500 \textbf{nitpick} \\[2\smallskipamount]
   501 \slshape
   502 Nitpick found no counterexample.
   503 \postw
   504 
   505 On any finite set $N$, \textit{Suc} is a partial function; for example, if $N =
   506 \{0, 1, \ldots, k\}$, then \textit{Suc} is $\{0 \mapsto 1,\, 1 \mapsto 2,\,
   507 \ldots,\, k \mapsto \unk\}$, which evaluates to $\unk$ when passed as
   508 argument to $P$. As a result, $P~\textit{Suc}$ is always $\unk$. The next
   509 example is similar:
   510 
   511 \prew
   512 \textbf{lemma} ``$P~(\textit{op}~{+}\Colon
   513 \textit{nat}\mathbin{\Rightarrow}\textit{nat}\mathbin{\Rightarrow}\textit{nat})$'' \\
   514 \textbf{nitpick} [\textit{card nat} = 1] \\[2\smallskipamount]
   515 {\slshape Nitpick found a counterexample:} \\[2\smallskipamount]
   516 \hbox{}\qquad Free variable: \nopagebreak \\
   517 \hbox{}\qquad\qquad $P = \{\}$ \\[2\smallskipamount]
   518 \textbf{nitpick} [\textit{card nat} = 2] \\[2\smallskipamount]
   519 {\slshape Nitpick found no counterexample.}
   520 \postw
   521 
   522 The problem here is that \textit{op}~+ is total when \textit{nat} is taken to be
   523 $\{0\}$ but becomes partial as soon as we add $1$, because $1 + 1 \notin \{0,
   524 1\}$.
   525 
   526 Because numbers are infinite and are approximated using a three-valued logic,
   527 there is usually no need to systematically enumerate domain sizes. If Nitpick
   528 cannot find a genuine counterexample for \textit{card~nat}~= $k$, it is very
   529 unlikely that one could be found for smaller domains. (The $P~(\textit{op}~{+})$
   530 example above is an exception to this principle.) Nitpick nonetheless enumerates
   531 all cardinalities from 1 to 8 for \textit{nat}, mainly because smaller
   532 cardinalities are fast to handle and give rise to simpler counterexamples. This
   533 is explained in more detail in \S\ref{scope-monotonicity}.
   534 
   535 \subsection{Inductive Datatypes}
   536 \label{inductive-datatypes}
   537 
   538 Like natural numbers and integers, inductive datatypes with recursive
   539 constructors admit no finite models and must be approximated by a subterm-closed
   540 subset. For example, using a cardinality of 10 for ${'}a~\textit{list}$,
   541 Nitpick looks for all counterexamples that can be built using at most 10
   542 different lists.
   543 
   544 Let's see with an example involving \textit{hd} (which returns the first element
   545 of a list) and $@$ (which concatenates two lists):
   546 
   547 \prew
   548 \textbf{lemma} ``$\textit{hd}~(\textit{xs} \mathbin{@} [y, y]) = \textit{hd}~\textit{xs}$'' \\
   549 \textbf{nitpick} \\[2\smallskipamount]
   550 \slshape Nitpick found a counterexample for \textit{card} $'a$~= 3: \\[2\smallskipamount]
   551 \hbox{}\qquad Free variables: \nopagebreak \\
   552 \hbox{}\qquad\qquad $\textit{xs} = []$ \\
   553 \hbox{}\qquad\qquad $\textit{y} = a_1$
   554 \postw
   555 
   556 To see why the counterexample is genuine, we enable \textit{show\_consts}
   557 and \textit{show\_\allowbreak datatypes}:
   558 
   559 \prew
   560 {\slshape Datatype:} \\
   561 \hbox{}\qquad $'a$~\textit{list}~= $\{[],\, [a_1],\, [a_1, a_1],\, \unr\}$ \\
   562 {\slshape Constants:} \\
   563 \hbox{}\qquad $\lambda x_1.\; x_1 \mathbin{@} [y, y] = \undef([] := [a_1, a_1])$ \\
   564 \hbox{}\qquad $\textit{hd} = \undef([] := a_2,\> [a_1] := a_1,\> [a_1, a_1] := a_1)$
   565 \postw
   566 
   567 Since $\mathit{hd}~[]$ is undefined in the logic, it may be given any value,
   568 including $a_2$.
   569 
   570 The second constant, $\lambda x_1.\; x_1 \mathbin{@} [y, y]$, is simply the
   571 append operator whose second argument is fixed to be $[y, y]$. Appending $[a_1,
   572 a_1]$ to $[a_1]$ would normally give $[a_1, a_1, a_1]$, but this value is not
   573 representable in the subset of $'a$~\textit{list} considered by Nitpick, which
   574 is shown under the ``Datatype'' heading; hence the result is $\unk$. Similarly,
   575 appending $[a_1, a_1]$ to itself gives $\unk$.
   576 
   577 Given \textit{card}~$'a = 3$ and \textit{card}~$'a~\textit{list} = 3$, Nitpick
   578 considers the following subsets:
   579 
   580 \kern-.5\smallskipamount %% TYPESETTING
   581 
   582 \prew
   583 \begin{multicols}{3}
   584 $\{[],\, [a_1],\, [a_2]\}$; \\
   585 $\{[],\, [a_1],\, [a_3]\}$; \\
   586 $\{[],\, [a_2],\, [a_3]\}$; \\
   587 $\{[],\, [a_1],\, [a_1, a_1]\}$; \\
   588 $\{[],\, [a_1],\, [a_2, a_1]\}$; \\
   589 $\{[],\, [a_1],\, [a_3, a_1]\}$; \\
   590 $\{[],\, [a_2],\, [a_1, a_2]\}$; \\
   591 $\{[],\, [a_2],\, [a_2, a_2]\}$; \\
   592 $\{[],\, [a_2],\, [a_3, a_2]\}$; \\
   593 $\{[],\, [a_3],\, [a_1, a_3]\}$; \\
   594 $\{[],\, [a_3],\, [a_2, a_3]\}$; \\
   595 $\{[],\, [a_3],\, [a_3, a_3]\}$.
   596 \end{multicols}
   597 \postw
   598 
   599 \kern-2\smallskipamount %% TYPESETTING
   600 
   601 All subterm-closed subsets of $'a~\textit{list}$ consisting of three values
   602 are listed and only those. As an example of a non-subterm-closed subset,
   603 consider $\mathcal{S} = \{[],\, [a_1],\,\allowbreak [a_1, a_2]\}$, and observe
   604 that $[a_1, a_2]$ (i.e., $a_1 \mathbin{\#} [a_2]$) has $[a_2] \notin
   605 \mathcal{S}$ as a subterm.
   606 
   607 Here's another m\"ochtegern-lemma that Nitpick can refute without a blink:
   608 
   609 \prew
   610 \textbf{lemma} ``$\lbrakk \textit{length}~\textit{xs} = 1;\> \textit{length}~\textit{ys} = 1
   611 \rbrakk \,\Longrightarrow\, \textit{xs} = \textit{ys}$''
   612 \\
   613 \textbf{nitpick} [\textit{show\_datatypes}] \\[2\smallskipamount]
   614 \slshape Nitpick found a counterexample for \textit{card} $'a$~= 3: \\[2\smallskipamount]
   615 \hbox{}\qquad Free variables: \nopagebreak \\
   616 \hbox{}\qquad\qquad $\textit{xs} = [a_1]$ \\
   617 \hbox{}\qquad\qquad $\textit{ys} = [a_2]$ \\
   618 \hbox{}\qquad Datatypes: \\
   619 \hbox{}\qquad\qquad $\textit{nat} = \{0,\, 1,\, 2,\, \unr\}$ \\
   620 \hbox{}\qquad\qquad $'a$~\textit{list} = $\{[],\, [a_1],\, [a_2],\, \unr\}$
   621 \postw
   622 
   623 Because datatypes are approximated using a three-valued logic, there is usually
   624 no need to systematically enumerate cardinalities: If Nitpick cannot find a
   625 genuine counterexample for \textit{card}~$'a~\textit{list}$~= 10, it is very
   626 unlikely that one could be found for smaller cardinalities.
   627 
   628 \subsection{Typedefs, Quotient Types, Records, Rationals, and Reals}
   629 \label{typedefs-quotient-types-records-rationals-and-reals}
   630 
   631 Nitpick generally treats types declared using \textbf{typedef} as datatypes
   632 whose single constructor is the corresponding \textit{Abs\_\kern.1ex} function.
   633 For example:
   634 
   635 \prew
   636 \textbf{typedef}~\textit{three} = ``$\{0\Colon\textit{nat},\, 1,\, 2\}$'' \\
   637 \textbf{by}~\textit{blast} \\[2\smallskipamount]
   638 \textbf{definition}~$A \mathbin{\Colon} \textit{three}$ \textbf{where} ``\kern-.1em$A \,\equiv\, \textit{Abs\_\allowbreak three}~0$'' \\
   639 \textbf{definition}~$B \mathbin{\Colon} \textit{three}$ \textbf{where} ``$B \,\equiv\, \textit{Abs\_three}~1$'' \\
   640 \textbf{definition}~$C \mathbin{\Colon} \textit{three}$ \textbf{where} ``$C \,\equiv\, \textit{Abs\_three}~2$'' \\[2\smallskipamount]
   641 \textbf{lemma} ``$\lbrakk P~A;\> P~B\rbrakk \,\Longrightarrow\, P~x$'' \\
   642 \textbf{nitpick} [\textit{show\_datatypes}] \\[2\smallskipamount]
   643 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   644 \hbox{}\qquad Free variables: \nopagebreak \\
   645 \hbox{}\qquad\qquad $P = \{\Abs{0},\, \Abs{1}\}$ \\
   646 \hbox{}\qquad\qquad $x = \Abs{2}$ \\
   647 \hbox{}\qquad Datatypes: \\
   648 \hbox{}\qquad\qquad $\textit{nat} = \{0,\, 1,\, 2,\, \unr\}$ \\
   649 \hbox{}\qquad\qquad $\textit{three} = \{\Abs{0},\, \Abs{1},\, \Abs{2},\, \unr\}$
   650 \postw
   651 
   652 In the output above, $\Abs{n}$ abbreviates $\textit{Abs\_three}~n$.
   653 
   654 Quotient types are handled in much the same way. The following fragment defines
   655 the integer type \textit{my\_int} by encoding the integer $x$ by a pair of
   656 natural numbers $(m, n)$ such that $x + n = m$:
   657 
   658 \prew
   659 \textbf{fun} \textit{my\_int\_rel} \textbf{where} \\
   660 ``$\textit{my\_int\_rel}~(x,\, y)~(u,\, v) = (x + v = u + y)$'' \\[2\smallskipamount]
   661 %
   662 \textbf{quotient\_type}~\textit{my\_int} = ``$\textit{nat} \times \textit{nat\/}$''$\;{/}\;$\textit{my\_int\_rel} \\
   663 \textbf{by}~(\textit{auto simp add\/}:\ \textit{equivp\_def expand\_fun\_eq}) \\[2\smallskipamount]
   664 %
   665 \textbf{definition}~\textit{add\_raw}~\textbf{where} \\
   666 ``$\textit{add\_raw} \,\equiv\, \lambda(x,\, y)~(u,\, v).\; (x + (u\Colon\textit{nat}), y + (v\Colon\textit{nat}))$'' \\[2\smallskipamount]
   667 %
   668 \textbf{quotient\_definition} ``$\textit{add\/}\Colon\textit{my\_int} \Rightarrow \textit{my\_int} \Rightarrow \textit{my\_int\/}$'' \textbf{is} \textit{add\_raw} \\[2\smallskipamount]
   669 %
   670 \textbf{lemma} ``$\textit{add}~x~y = \textit{add}~x~x$'' \\
   671 \textbf{nitpick} [\textit{show\_datatypes}] \\[2\smallskipamount]
   672 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   673 \hbox{}\qquad Free variables: \nopagebreak \\
   674 \hbox{}\qquad\qquad $x = \Abs{(0,\, 0)}$ \\
   675 \hbox{}\qquad\qquad $y = \Abs{(1,\, 0)}$ \\
   676 \hbox{}\qquad Datatypes: \\
   677 \hbox{}\qquad\qquad $\textit{nat} = \{0,\, 1,\, \unr\}$ \\
   678 \hbox{}\qquad\qquad $\textit{nat} \times \textit{nat}~[\textsl{boxed\/}] = \{(0,\, 0),\> (1,\, 0),\> \unr\}$ \\
   679 \hbox{}\qquad\qquad $\textit{my\_int} = \{\Abs{(0,\, 0)},\> \Abs{(1,\, 0)},\> \unr\}$
   680 \postw
   681 
   682 In the counterexample, $\Abs{(0,\, 0)}$ and $\Abs{(1,\, 0)}$ represent the
   683 integers $0$ and $1$, respectively. Other representants would have been
   684 possible---e.g., $\Abs{(5,\, 5)}$ and $\Abs{(12,\, 11)}$. If we are going to
   685 use \textit{my\_int} extensively, it pays off to install a term postprocessor
   686 that converts the pair notation to the standard mathematical notation:
   687 
   688 \prew
   689 $\textbf{ML}~\,\{{*} \\
   690 \!\begin{aligned}[t]
   691 %& ({*}~\,\textit{Proof.context} \rightarrow \textit{string} \rightarrow (\textit{typ} \rightarrow \textit{term~list\/}) \rightarrow \textit{typ} \rightarrow \textit{term} \\[-2pt]
   692 %& \phantom{(*}~\,{\rightarrow}\;\textit{term}~\,{*}) \\[-2pt]
   693 & \textbf{fun}\,~\textit{my\_int\_postproc}~\_~\_~\_~T~(\textit{Const}~\_~\$~(\textit{Const}~\_~\$~\textit{t1}~\$~\textit{t2\/})) = {} \\[-2pt]
   694 & \phantom{fun}\,~\textit{HOLogic.mk\_number}~T~(\textit{snd}~(\textit{HOLogic.dest\_number~t1}) \\[-2pt]
   695 & \phantom{fun\,~\textit{HOLogic.mk\_number}~T~(}{-}~\textit{snd}~(\textit{HOLogic.dest\_number~t2\/})) \\[-2pt]
   696 & \phantom{fun}\!{\mid}\,~\textit{my\_int\_postproc}~\_~\_~\_~\_~t = t \\[-2pt]
   697 {*}\}\end{aligned}$ \\[2\smallskipamount]
   698 $\textbf{setup}~\,\{{*} \\
   699 \!\begin{aligned}[t]
   700 & \textit{Nitpick.register\_term\_postprocessor}~\!\begin{aligned}[t]
   701   & @\{\textrm{typ}~\textit{my\_int}\}~\textit{my\_int\_postproc}\end{aligned} \\[-2pt]
   702 {*}\}\end{aligned}$
   703 \postw
   704 
   705 Records are also handled as datatypes with a single constructor:
   706 
   707 \prew
   708 \textbf{record} \textit{point} = \\
   709 \hbox{}\quad $\textit{Xcoord} \mathbin{\Colon} \textit{int}$ \\
   710 \hbox{}\quad $\textit{Ycoord} \mathbin{\Colon} \textit{int}$ \\[2\smallskipamount]
   711 \textbf{lemma} ``$\textit{Xcoord}~(p\Colon\textit{point}) = \textit{Xcoord}~(q\Colon\textit{point})$'' \\
   712 \textbf{nitpick} [\textit{show\_datatypes}] \\[2\smallskipamount]
   713 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   714 \hbox{}\qquad Free variables: \nopagebreak \\
   715 \hbox{}\qquad\qquad $p = \lparr\textit{Xcoord} = 1,\> \textit{Ycoord} = 1\rparr$ \\
   716 \hbox{}\qquad\qquad $q = \lparr\textit{Xcoord} = 0,\> \textit{Ycoord} = 0\rparr$ \\
   717 \hbox{}\qquad Datatypes: \\
   718 \hbox{}\qquad\qquad $\textit{int} = \{0,\, 1,\, \unr\}$ \\
   719 \hbox{}\qquad\qquad $\textit{point} = \{\!\begin{aligned}[t]
   720 & \lparr\textit{Xcoord} = 0,\> \textit{Ycoord} = 0\rparr, \\[-2pt] %% TYPESETTING
   721 & \lparr\textit{Xcoord} = 1,\> \textit{Ycoord} = 1\rparr,\, \unr\}\end{aligned}$
   722 \postw
   723 
   724 Finally, Nitpick provides rudimentary support for rationals and reals using a
   725 similar approach:
   726 
   727 \prew
   728 \textbf{lemma} ``$4 * x + 3 * (y\Colon\textit{real}) \not= 1/2$'' \\
   729 \textbf{nitpick} [\textit{show\_datatypes}] \\[2\smallskipamount]
   730 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   731 \hbox{}\qquad Free variables: \nopagebreak \\
   732 \hbox{}\qquad\qquad $x = 1/2$ \\
   733 \hbox{}\qquad\qquad $y = -1/2$ \\
   734 \hbox{}\qquad Datatypes: \\
   735 \hbox{}\qquad\qquad $\textit{nat} = \{0,\, 1,\, 2,\, 3,\, 4,\, 5,\, 6,\, 7,\, \unr\}$ \\
   736 \hbox{}\qquad\qquad $\textit{int} = \{0,\, 1,\, 2,\, 3,\, 4,\, -3,\, -2,\, -1,\, \unr\}$ \\
   737 \hbox{}\qquad\qquad $\textit{real} = \{1,\, 0,\, 4,\, -3/2,\, 3,\, 2,\, 1/2,\, -1/2,\, \unr\}$
   738 \postw
   739 
   740 \subsection{Inductive and Coinductive Predicates}
   741 \label{inductive-and-coinductive-predicates}
   742 
   743 Inductively defined predicates (and sets) are particularly problematic for
   744 counterexample generators. They can make Quickcheck~\cite{berghofer-nipkow-2004}
   745 loop forever and Refute~\cite{weber-2008} run out of resources. The crux of
   746 the problem is that they are defined using a least fixed point construction.
   747 
   748 Nitpick's philosophy is that not all inductive predicates are equal. Consider
   749 the \textit{even} predicate below:
   750 
   751 \prew
   752 \textbf{inductive}~\textit{even}~\textbf{where} \\
   753 ``\textit{even}~0'' $\,\mid$ \\
   754 ``\textit{even}~$n\,\Longrightarrow\, \textit{even}~(\textit{Suc}~(\textit{Suc}~n))$''
   755 \postw
   756 
   757 This predicate enjoys the desirable property of being well-founded, which means
   758 that the introduction rules don't give rise to infinite chains of the form
   759 
   760 \prew
   761 $\cdots\,\Longrightarrow\, \textit{even}~k''
   762        \,\Longrightarrow\, \textit{even}~k'
   763        \,\Longrightarrow\, \textit{even}~k.$
   764 \postw
   765 
   766 For \textit{even}, this is obvious: Any chain ending at $k$ will be of length
   767 $k/2 + 1$:
   768 
   769 \prew
   770 $\textit{even}~0\,\Longrightarrow\, \textit{even}~2\,\Longrightarrow\, \cdots
   771        \,\Longrightarrow\, \textit{even}~(k - 2)
   772        \,\Longrightarrow\, \textit{even}~k.$
   773 \postw
   774 
   775 Wellfoundedness is desirable because it enables Nitpick to use a very efficient
   776 fixed point computation.%
   777 \footnote{If an inductive predicate is
   778 well-founded, then it has exactly one fixed point, which is simultaneously the
   779 least and the greatest fixed point. In these circumstances, the computation of
   780 the least fixed point amounts to the computation of an arbitrary fixed point,
   781 which can be performed using a straightforward recursive equation.}
   782 Moreover, Nitpick can prove wellfoundedness of most well-founded predicates,
   783 just as Isabelle's \textbf{function} package usually discharges termination
   784 proof obligations automatically.
   785 
   786 Let's try an example:
   787 
   788 \prew
   789 \textbf{lemma} ``$\exists n.\; \textit{even}~n \mathrel{\land} \textit{even}~(\textit{Suc}~n)$'' \\
   790 \textbf{nitpick}~[\textit{card nat}~= 50, \textit{unary\_ints}, \textit{verbose}] \\[2\smallskipamount]
   791 \slshape The inductive predicate ``\textit{even}'' was proved well-founded.
   792 Nitpick can compute it efficiently. \\[2\smallskipamount]
   793 Trying 1 scope: \\
   794 \hbox{}\qquad \textit{card nat}~= 50. \\[2\smallskipamount]
   795 Nitpick found a potential counterexample for \textit{card nat}~= 50: \\[2\smallskipamount]
   796 \hbox{}\qquad Empty assignment \\[2\smallskipamount]
   797 Nitpick could not find a better counterexample. \\[2\smallskipamount]
   798 Total time: 2274 ms.
   799 \postw
   800 
   801 No genuine counterexample is possible because Nitpick cannot rule out the
   802 existence of a natural number $n \ge 50$ such that both $\textit{even}~n$ and
   803 $\textit{even}~(\textit{Suc}~n)$ are true. To help Nitpick, we can bound the
   804 existential quantifier:
   805 
   806 \prew
   807 \textbf{lemma} ``$\exists n \mathbin{\le} 49.\; \textit{even}~n \mathrel{\land} \textit{even}~(\textit{Suc}~n)$'' \\
   808 \textbf{nitpick}~[\textit{card nat}~= 50, \textit{unary\_ints}] \\[2\smallskipamount]
   809 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   810 \hbox{}\qquad Empty assignment
   811 \postw
   812 
   813 So far we were blessed by the wellfoundedness of \textit{even}. What happens if
   814 we use the following definition instead?
   815 
   816 \prew
   817 \textbf{inductive} $\textit{even}'$ \textbf{where} \\
   818 ``$\textit{even}'~(0{\Colon}\textit{nat})$'' $\,\mid$ \\
   819 ``$\textit{even}'~2$'' $\,\mid$ \\
   820 ``$\lbrakk\textit{even}'~m;\> \textit{even}'~n\rbrakk \,\Longrightarrow\, \textit{even}'~(m + n)$''
   821 \postw
   822 
   823 This definition is not well-founded: From $\textit{even}'~0$ and
   824 $\textit{even}'~0$, we can derive that $\textit{even}'~0$. Nonetheless, the
   825 predicates $\textit{even}$ and $\textit{even}'$ are equivalent.
   826 
   827 Let's check a property involving $\textit{even}'$. To make up for the
   828 foreseeable computational hurdles entailed by non-wellfoundedness, we decrease
   829 \textit{nat}'s cardinality to a mere 10:
   830 
   831 \prew
   832 \textbf{lemma}~``$\exists n \in \{0, 2, 4, 6, 8\}.\;
   833 \lnot\;\textit{even}'~n$'' \\
   834 \textbf{nitpick}~[\textit{card nat}~= 10,\, \textit{verbose},\, \textit{show\_consts}] \\[2\smallskipamount]
   835 \slshape
   836 The inductive predicate ``$\textit{even}'\!$'' could not be proved well-founded.
   837 Nitpick might need to unroll it. \\[2\smallskipamount]
   838 Trying 6 scopes: \\
   839 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 0; \\
   840 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 1; \\
   841 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 2; \\
   842 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 4; \\
   843 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 8; \\
   844 \hbox{}\qquad \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 9. \\[2\smallskipamount]
   845 Nitpick found a counterexample for \textit{card nat}~= 10 and \textit{iter} $\textit{even}'$~= 2: \\[2\smallskipamount]
   846 \hbox{}\qquad Constant: \nopagebreak \\
   847 \hbox{}\qquad\qquad $\lambda i.\; \textit{even}'$ = $\undef(\!\begin{aligned}[t]
   848 & 2 := \{0, 2, 4, 6, 8, 1^\Q, 3^\Q, 5^\Q, 7^\Q, 9^\Q\}, \\[-2pt]
   849 & 1 := \{0, 2, 4, 1^\Q, 3^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q\}, \\[-2pt]
   850 & 0 := \{0, 2, 1^\Q, 3^\Q, 4^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q\})\end{aligned}$ \\[2\smallskipamount]
   851 Total time: 1140 ms.
   852 \postw
   853 
   854 Nitpick's output is very instructive. First, it tells us that the predicate is
   855 unrolled, meaning that it is computed iteratively from the empty set. Then it
   856 lists six scopes specifying different bounds on the numbers of iterations:\ 0,
   857 1, 2, 4, 8, and~9.
   858 
   859 The output also shows how each iteration contributes to $\textit{even}'$. The
   860 notation $\lambda i.\; \textit{even}'$ indicates that the value of the
   861 predicate depends on an iteration counter. Iteration 0 provides the basis
   862 elements, $0$ and $2$. Iteration 1 contributes $4$ ($= 2 + 2$). Iteration 2
   863 throws $6$ ($= 2 + 4 = 4 + 2$) and $8$ ($= 4 + 4$) into the mix. Further
   864 iterations would not contribute any new elements.
   865 
   866 Some values are marked with superscripted question
   867 marks~(`\lower.2ex\hbox{$^\Q$}'). These are the elements for which the
   868 predicate evaluates to $\unk$. Thus, $\textit{even}'$ evaluates to either
   869 \textit{True} or $\unk$, never \textit{False}.
   870 
   871 When unrolling a predicate, Nitpick tries 0, 1, 2, 4, 8, 12, 16, and 24
   872 iterations. However, these numbers are bounded by the cardinality of the
   873 predicate's domain. With \textit{card~nat}~= 10, no more than 9 iterations are
   874 ever needed to compute the value of a \textit{nat} predicate. You can specify
   875 the number of iterations using the \textit{iter} option, as explained in
   876 \S\ref{scope-of-search}.
   877 
   878 In the next formula, $\textit{even}'$ occurs both positively and negatively:
   879 
   880 \prew
   881 \textbf{lemma} ``$\textit{even}'~(n - 2) \,\Longrightarrow\, \textit{even}'~n$'' \\
   882 \textbf{nitpick} [\textit{card nat} = 10, \textit{show\_consts}] \\[2\smallskipamount]
   883 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
   884 \hbox{}\qquad Free variable: \nopagebreak \\
   885 \hbox{}\qquad\qquad $n = 1$ \\
   886 \hbox{}\qquad Constants: \nopagebreak \\
   887 \hbox{}\qquad\qquad $\lambda i.\; \textit{even}'$ = $\undef(\!\begin{aligned}[t]
   888 & 0 := \{0, 2, 1^\Q, 3^\Q, 4^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q\})\end{aligned}$  \\
   889 \hbox{}\qquad\qquad $\textit{even}' \subseteq \{0, 2, 4, 6, 8, \unr\}$
   890 \postw
   891 
   892 Notice the special constraint $\textit{even}' \subseteq \{0,\, 2,\, 4,\, 6,\,
   893 8,\, \unr\}$ in the output, whose right-hand side represents an arbitrary
   894 fixed point (not necessarily the least one). It is used to falsify
   895 $\textit{even}'~n$. In contrast, the unrolled predicate is used to satisfy
   896 $\textit{even}'~(n - 2)$.
   897 
   898 Coinductive predicates are handled dually. For example:
   899 
   900 \prew
   901 \textbf{coinductive} \textit{nats} \textbf{where} \\
   902 ``$\textit{nats}~(x\Colon\textit{nat}) \,\Longrightarrow\, \textit{nats}~x$'' \\[2\smallskipamount]
   903 \textbf{lemma} ``$\textit{nats} = \{0, 1, 2, 3, 4\}$'' \\
   904 \textbf{nitpick}~[\textit{card nat} = 10,\, \textit{show\_consts}] \\[2\smallskipamount]
   905 \slshape Nitpick found a counterexample:
   906 \\[2\smallskipamount]
   907 \hbox{}\qquad Constants: \nopagebreak \\
   908 \hbox{}\qquad\qquad $\lambda i.\; \textit{nats} = \undef(0 := \{\!\begin{aligned}[t]
   909 & 0^\Q, 1^\Q, 2^\Q, 3^\Q, 4^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q, \\[-2pt]
   910 & \unr\})\end{aligned}$ \\
   911 \hbox{}\qquad\qquad $nats \supseteq \{9, 5^\Q, 6^\Q, 7^\Q, 8^\Q, \unr\}$
   912 \postw
   913 
   914 As a special case, Nitpick uses Kodkod's transitive closure operator to encode
   915 negative occurrences of non-well-founded ``linear inductive predicates,'' i.e.,
   916 inductive predicates for which each the predicate occurs in at most one
   917 assumption of each introduction rule. For example:
   918 
   919 \prew
   920 \textbf{inductive} \textit{odd} \textbf{where} \\
   921 ``$\textit{odd}~1$'' $\,\mid$ \\
   922 ``$\lbrakk \textit{odd}~m;\>\, \textit{even}~n\rbrakk \,\Longrightarrow\, \textit{odd}~(m + n)$'' \\[2\smallskipamount]
   923 \textbf{lemma}~``$\textit{odd}~n \,\Longrightarrow\, \textit{odd}~(n - 2)$'' \\
   924 \textbf{nitpick}~[\textit{card nat} = 10,\, \textit{show\_consts}] \\[2\smallskipamount]
   925 \slshape Nitpick found a counterexample:
   926 \\[2\smallskipamount]
   927 \hbox{}\qquad Free variable: \nopagebreak \\
   928 \hbox{}\qquad\qquad $n = 1$ \\
   929 \hbox{}\qquad Constants: \nopagebreak \\
   930 \hbox{}\qquad\qquad $\textit{even} = \{0, 2, 4, 6, 8, \unr\}$ \\
   931 \hbox{}\qquad\qquad $\textit{odd}_{\textsl{base}} = \{1, \unr\}$ \\
   932 \hbox{}\qquad\qquad $\textit{odd}_{\textsl{step}} = \!
   933 \!\begin{aligned}[t]
   934   & \{(0, 0), (0, 2), (0, 4), (0, 6), (0, 8), (1, 1), (1, 3), (1, 5), \\[-2pt]
   935   & \phantom{\{} (1, 7), (1, 9), (2, 2), (2, 4), (2, 6), (2, 8), (3, 3),
   936        (3, 5), \\[-2pt]
   937   & \phantom{\{} (3, 7), (3, 9), (4, 4), (4, 6), (4, 8), (5, 5), (5, 7), (5, 9), \\[-2pt]
   938   & \phantom{\{} (6, 6), (6, 8), (7, 7), (7, 9), (8, 8), (9, 9), \unr\}\end{aligned}$ \\
   939 \hbox{}\qquad\qquad $\textit{odd} \subseteq \{1, 3, 5, 7, 9, 8^\Q, \unr\}$
   940 \postw
   941 
   942 \noindent
   943 In the output, $\textit{odd}_{\textrm{base}}$ represents the base elements and
   944 $\textit{odd}_{\textrm{step}}$ is a transition relation that computes new
   945 elements from known ones. The set $\textit{odd}$ consists of all the values
   946 reachable through the reflexive transitive closure of
   947 $\textit{odd}_{\textrm{step}}$ starting with any element from
   948 $\textit{odd}_{\textrm{base}}$, namely 1, 3, 5, 7, and 9. Using Kodkod's
   949 transitive closure to encode linear predicates is normally either more thorough
   950 or more efficient than unrolling (depending on the value of \textit{iter}), but
   951 for those cases where it isn't you can disable it by passing the
   952 \textit{dont\_star\_linear\_preds} option.
   953 
   954 \subsection{Coinductive Datatypes}
   955 \label{coinductive-datatypes}
   956 
   957 While Isabelle regrettably lacks a high-level mechanism for defining coinductive
   958 datatypes, the \textit{Coinductive\_List} theory from Andreas Lochbihler's
   959 \textit{Coinductive} AFP entry \cite{lochbihler-2010} provides a coinductive
   960 ``lazy list'' datatype, $'a~\textit{llist}$, defined the hard way. Nitpick
   961 supports these lazy lists seamlessly and provides a hook, described in
   962 \S\ref{registration-of-coinductive-datatypes}, to register custom coinductive
   963 datatypes.
   964 
   965 (Co)intuitively, a coinductive datatype is similar to an inductive datatype but
   966 allows infinite objects. Thus, the infinite lists $\textit{ps}$ $=$ $[a, a, a,
   967 \ldots]$, $\textit{qs}$ $=$ $[a, b, a, b, \ldots]$, and $\textit{rs}$ $=$ $[0,
   968 1, 2, 3, \ldots]$ can be defined as lazy lists using the
   969 $\textit{LNil}\mathbin{\Colon}{'}a~\textit{llist}$ and
   970 $\textit{LCons}\mathbin{\Colon}{'}a \mathbin{\Rightarrow} {'}a~\textit{llist}
   971 \mathbin{\Rightarrow} {'}a~\textit{llist}$ constructors.
   972 
   973 Although it is otherwise no friend of infinity, Nitpick can find counterexamples
   974 involving cyclic lists such as \textit{ps} and \textit{qs} above as well as
   975 finite lists:
   976 
   977 \prew
   978 \textbf{lemma} ``$\textit{xs} \not= \textit{LCons}~a~\textit{xs}$'' \\
   979 \textbf{nitpick} \\[2\smallskipamount]
   980 \slshape Nitpick found a counterexample for {\itshape card}~$'a$ = 1: \\[2\smallskipamount]
   981 \hbox{}\qquad Free variables: \nopagebreak \\
   982 \hbox{}\qquad\qquad $\textit{a} = a_1$ \\
   983 \hbox{}\qquad\qquad $\textit{xs} = \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega$
   984 \postw
   985 
   986 The notation $\textrm{THE}~\omega.\; \omega = t(\omega)$ stands
   987 for the infinite term $t(t(t(\ldots)))$. Hence, \textit{xs} is simply the
   988 infinite list $[a_1, a_1, a_1, \ldots]$.
   989 
   990 The next example is more interesting:
   991 
   992 \prew
   993 \textbf{lemma}~``$\lbrakk\textit{xs} = \textit{LCons}~a~\textit{xs};\>\,
   994 \textit{ys} = \textit{iterates}~(\lambda b.\> a)~b\rbrakk \,\Longrightarrow\, \textit{xs} = \textit{ys}$'' \\
   995 \textbf{nitpick} [\textit{verbose}] \\[2\smallskipamount]
   996 \slshape The type ``\kern1pt$'a$'' passed the monotonicity test. Nitpick might be able to skip
   997 some scopes. \\[2\smallskipamount]
   998 Trying 8 scopes: \\
   999 \hbox{}\qquad \textit{card} $'a$~= 1, \textit{card} ``\kern1pt$'a~\textit{list\/}$''~= 1,
  1000 and \textit{bisim\_depth}~= 0. \\
  1001 \hbox{}\qquad $\qquad\vdots$ \\[.5\smallskipamount]
  1002 \hbox{}\qquad \textit{card} $'a$~= 8, \textit{card} ``\kern1pt$'a~\textit{list\/}$''~= 8,
  1003 and \textit{bisim\_depth}~= 7. \\[2\smallskipamount]
  1004 Nitpick found a counterexample for {\itshape card}~$'a$ = 2,
  1005 \textit{card}~``\kern1pt$'a~\textit{list\/}$''~= 2, and \textit{bisim\_\allowbreak
  1006 depth}~= 1:
  1007 \\[2\smallskipamount]
  1008 \hbox{}\qquad Free variables: \nopagebreak \\
  1009 \hbox{}\qquad\qquad $\textit{a} = a_1$ \\
  1010 \hbox{}\qquad\qquad $\textit{b} = a_2$ \\
  1011 \hbox{}\qquad\qquad $\textit{xs} = \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega$ \\
  1012 \hbox{}\qquad\qquad $\textit{ys} = \textit{LCons}~a_2~(\textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega)$ \\[2\smallskipamount]
  1013 Total time: 726 ms.
  1014 \postw
  1015 
  1016 The lazy list $\textit{xs}$ is simply $[a_1, a_1, a_1, \ldots]$, whereas
  1017 $\textit{ys}$ is $[a_2, a_1, a_1, a_1, \ldots]$, i.e., a lasso-shaped list with
  1018 $[a_2]$ as its stem and $[a_1]$ as its cycle. In general, the list segment
  1019 within the scope of the {THE} binder corresponds to the lasso's cycle, whereas
  1020 the segment leading to the binder is the stem.
  1021 
  1022 A salient property of coinductive datatypes is that two objects are considered
  1023 equal if and only if they lead to the same observations. For example, the lazy
  1024 lists $\textrm{THE}~\omega.\; \omega =
  1025 \textit{LCons}~a~(\textit{LCons}~b~\omega)$ and
  1026 $\textit{LCons}~a~(\textrm{THE}~\omega.\; \omega =
  1027 \textit{LCons}~b~(\textit{LCons}~a~\omega))$ are identical, because both lead
  1028 to the sequence of observations $a$, $b$, $a$, $b$, \hbox{\ldots} (or,
  1029 equivalently, both encode the infinite list $[a, b, a, b, \ldots]$). This
  1030 concept of equality for coinductive datatypes is called bisimulation and is
  1031 defined coinductively.
  1032 
  1033 Internally, Nitpick encodes the coinductive bisimilarity predicate as part of
  1034 the Kodkod problem to ensure that distinct objects lead to different
  1035 observations. This precaution is somewhat expensive and often unnecessary, so it
  1036 can be disabled by setting the \textit{bisim\_depth} option to $-1$. The
  1037 bisimilarity check is then performed \textsl{after} the counterexample has been
  1038 found to ensure correctness. If this after-the-fact check fails, the
  1039 counterexample is tagged as ``quasi genuine'' and Nitpick recommends to try
  1040 again with \textit{bisim\_depth} set to a nonnegative integer. Disabling the
  1041 check for the previous example saves approximately 150~milli\-seconds; the speed
  1042 gains can be more significant for larger scopes.
  1043 
  1044 The next formula illustrates the need for bisimilarity (either as a Kodkod
  1045 predicate or as an after-the-fact check) to prevent spurious counterexamples:
  1046 
  1047 \prew
  1048 \textbf{lemma} ``$\lbrakk xs = \textit{LCons}~a~\textit{xs};\>\, \textit{ys} = \textit{LCons}~a~\textit{ys}\rbrakk
  1049 \,\Longrightarrow\, \textit{xs} = \textit{ys}$'' \\
  1050 \textbf{nitpick} [\textit{bisim\_depth} = $-1$, \textit{show\_datatypes}] \\[2\smallskipamount]
  1051 \slshape Nitpick found a quasi genuine counterexample for $\textit{card}~'a$ = 2: \\[2\smallskipamount]
  1052 \hbox{}\qquad Free variables: \nopagebreak \\
  1053 \hbox{}\qquad\qquad $a = a_1$ \\
  1054 \hbox{}\qquad\qquad $\textit{xs} = \textsl{THE}~\omega.\; \omega =
  1055 \textit{LCons}~a_1~\omega$ \\
  1056 \hbox{}\qquad\qquad $\textit{ys} = \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega$ \\
  1057 \hbox{}\qquad Codatatype:\strut \nopagebreak \\
  1058 \hbox{}\qquad\qquad $'a~\textit{llist} =
  1059 \{\!\begin{aligned}[t]
  1060   & \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega, \\[-2pt]
  1061   & \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega,\> \unr\}\end{aligned}$
  1062 \\[2\smallskipamount]
  1063 Try again with ``\textit{bisim\_depth}'' set to a nonnegative value to confirm
  1064 that the counterexample is genuine. \\[2\smallskipamount]
  1065 {\upshape\textbf{nitpick}} \\[2\smallskipamount]
  1066 \slshape Nitpick found no counterexample.
  1067 \postw
  1068 
  1069 In the first \textbf{nitpick} invocation, the after-the-fact check discovered 
  1070 that the two known elements of type $'a~\textit{llist}$ are bisimilar.
  1071 
  1072 A compromise between leaving out the bisimilarity predicate from the Kodkod
  1073 problem and performing the after-the-fact check is to specify a lower
  1074 nonnegative \textit{bisim\_depth} value than the default one provided by
  1075 Nitpick. In general, a value of $K$ means that Nitpick will require all lists to
  1076 be distinguished from each other by their prefixes of length $K$. Be aware that
  1077 setting $K$ to a too low value can overconstrain Nitpick, preventing it from
  1078 finding any counterexamples.
  1079 
  1080 \subsection{Boxing}
  1081 \label{boxing}
  1082 
  1083 Nitpick normally maps function and product types directly to the corresponding
  1084 Kodkod concepts. As a consequence, if $'a$ has cardinality 3 and $'b$ has
  1085 cardinality 4, then $'a \times {'}b$ has cardinality 12 ($= 4 \times 3$) and $'a
  1086 \Rightarrow {'}b$ has cardinality 64 ($= 4^3$). In some circumstances, it pays
  1087 off to treat these types in the same way as plain datatypes, by approximating
  1088 them by a subset of a given cardinality. This technique is called ``boxing'' and
  1089 is particularly useful for functions passed as arguments to other functions, for
  1090 high-arity functions, and for large tuples. Under the hood, boxing involves
  1091 wrapping occurrences of the types $'a \times {'}b$ and $'a \Rightarrow {'}b$ in
  1092 isomorphic datatypes, as can be seen by enabling the \textit{debug} option.
  1093 
  1094 To illustrate boxing, we consider a formalization of $\lambda$-terms represented
  1095 using de Bruijn's notation:
  1096 
  1097 \prew
  1098 \textbf{datatype} \textit{tm} = \textit{Var}~\textit{nat}~$\mid$~\textit{Lam}~\textit{tm} $\mid$ \textit{App~tm~tm}
  1099 \postw
  1100 
  1101 The $\textit{lift}~t~k$ function increments all variables with indices greater
  1102 than or equal to $k$ by one:
  1103 
  1104 \prew
  1105 \textbf{primrec} \textit{lift} \textbf{where} \\
  1106 ``$\textit{lift}~(\textit{Var}~j)~k = \textit{Var}~(\textrm{if}~j < k~\textrm{then}~j~\textrm{else}~j + 1)$'' $\mid$ \\
  1107 ``$\textit{lift}~(\textit{Lam}~t)~k = \textit{Lam}~(\textit{lift}~t~(k + 1))$'' $\mid$ \\
  1108 ``$\textit{lift}~(\textit{App}~t~u)~k = \textit{App}~(\textit{lift}~t~k)~(\textit{lift}~u~k)$''
  1109 \postw
  1110 
  1111 The $\textit{loose}~t~k$ predicate returns \textit{True} if and only if
  1112 term $t$ has a loose variable with index $k$ or more:
  1113 
  1114 \prew
  1115 \textbf{primrec}~\textit{loose} \textbf{where} \\
  1116 ``$\textit{loose}~(\textit{Var}~j)~k = (j \ge k)$'' $\mid$ \\
  1117 ``$\textit{loose}~(\textit{Lam}~t)~k = \textit{loose}~t~(\textit{Suc}~k)$'' $\mid$ \\
  1118 ``$\textit{loose}~(\textit{App}~t~u)~k = (\textit{loose}~t~k \mathrel{\lor} \textit{loose}~u~k)$''
  1119 \postw
  1120 
  1121 Next, the $\textit{subst}~\sigma~t$ function applies the substitution $\sigma$
  1122 on $t$:
  1123 
  1124 \prew
  1125 \textbf{primrec}~\textit{subst} \textbf{where} \\
  1126 ``$\textit{subst}~\sigma~(\textit{Var}~j) = \sigma~j$'' $\mid$ \\
  1127 ``$\textit{subst}~\sigma~(\textit{Lam}~t) = {}$\phantom{''} \\
  1128 \phantom{``}$\textit{Lam}~(\textit{subst}~(\lambda n.\> \textrm{case}~n~\textrm{of}~0 \Rightarrow \textit{Var}~0 \mid \textit{Suc}~m \Rightarrow \textit{lift}~(\sigma~m)~1)~t)$'' $\mid$ \\
  1129 ``$\textit{subst}~\sigma~(\textit{App}~t~u) = \textit{App}~(\textit{subst}~\sigma~t)~(\textit{subst}~\sigma~u)$''
  1130 \postw
  1131 
  1132 A substitution is a function that maps variable indices to terms. Observe that
  1133 $\sigma$ is a function passed as argument and that Nitpick can't optimize it
  1134 away, because the recursive call for the \textit{Lam} case involves an altered
  1135 version. Also notice the \textit{lift} call, which increments the variable
  1136 indices when moving under a \textit{Lam}.
  1137 
  1138 A reasonable property to expect of substitution is that it should leave closed
  1139 terms unchanged. Alas, even this simple property does not hold:
  1140 
  1141 \pre
  1142 \textbf{lemma}~``$\lnot\,\textit{loose}~t~0 \,\Longrightarrow\, \textit{subst}~\sigma~t = t$'' \\
  1143 \textbf{nitpick} [\textit{verbose}] \\[2\smallskipamount]
  1144 \slshape
  1145 Trying 8 scopes: \nopagebreak \\
  1146 \hbox{}\qquad \textit{card~nat}~= 1, \textit{card tm}~= 1, and \textit{card} ``$\textit{nat} \Rightarrow \textit{tm}$'' = 1; \\
  1147 \hbox{}\qquad \textit{card~nat}~= 2, \textit{card tm}~= 2, and \textit{card} ``$\textit{nat} \Rightarrow \textit{tm}$'' = 2; \\
  1148 \hbox{}\qquad $\qquad\vdots$ \\[.5\smallskipamount]
  1149 \hbox{}\qquad \textit{card~nat}~= 8, \textit{card tm}~= 8, and \textit{card} ``$\textit{nat} \Rightarrow \textit{tm}$'' = 8. \\[2\smallskipamount]
  1150 Nitpick found a counterexample for \textit{card~nat}~= 6, \textit{card~tm}~= 6,
  1151 and \textit{card}~``$\textit{nat} \Rightarrow \textit{tm}$''~= 6: \\[2\smallskipamount]
  1152 \hbox{}\qquad Free variables: \nopagebreak \\
  1153 \hbox{}\qquad\qquad $\sigma = \undef(\!\begin{aligned}[t]
  1154 & 0 := \textit{Var}~0,\>
  1155   1 := \textit{Var}~0,\>
  1156   2 := \textit{Var}~0, \\[-2pt]
  1157 & 3 := \textit{Var}~0,\>
  1158   4 := \textit{Var}~0,\>
  1159   5 := \textit{Var}~0)\end{aligned}$ \\
  1160 \hbox{}\qquad\qquad $t = \textit{Lam}~(\textit{Lam}~(\textit{Var}~1))$ \\[2\smallskipamount]
  1161 Total time: $4679$ ms.
  1162 \postw
  1163 
  1164 Using \textit{eval}, we find out that $\textit{subst}~\sigma~t =
  1165 \textit{Lam}~(\textit{Lam}~(\textit{Var}~0))$. Using the traditional
  1166 $\lambda$-term notation, $t$~is
  1167 $\lambda x\, y.\> x$ whereas $\textit{subst}~\sigma~t$ is $\lambda x\, y.\> y$.
  1168 The bug is in \textit{subst\/}: The $\textit{lift}~(\sigma~m)~1$ call should be
  1169 replaced with $\textit{lift}~(\sigma~m)~0$.
  1170 
  1171 An interesting aspect of Nitpick's verbose output is that it assigned inceasing
  1172 cardinalities from 1 to 8 to the type $\textit{nat} \Rightarrow \textit{tm}$.
  1173 For the formula of interest, knowing 6 values of that type was enough to find
  1174 the counterexample. Without boxing, $46\,656$ ($= 6^6$) values must be
  1175 considered, a hopeless undertaking:
  1176 
  1177 \prew
  1178 \textbf{nitpick} [\textit{dont\_box}] \\[2\smallskipamount]
  1179 {\slshape Nitpick ran out of time after checking 4 of 8 scopes.}
  1180 \postw
  1181 
  1182 {\looseness=-1
  1183 Boxing can be enabled or disabled globally or on a per-type basis using the
  1184 \textit{box} option. Nitpick usually performs reasonable choices about which
  1185 types should be boxed, but option tweaking sometimes helps. A related optimization,
  1186 ``finalization,'' attempts to wrap functions that constant at all but finitely
  1187 many points (e.g., finite sets); see the documentation for the \textit{finalize}
  1188 option in \S\ref{scope-of-search} for details.
  1189 
  1190 }
  1191 
  1192 \subsection{Scope Monotonicity}
  1193 \label{scope-monotonicity}
  1194 
  1195 The \textit{card} option (together with \textit{iter}, \textit{bisim\_depth},
  1196 and \textit{max}) controls which scopes are actually tested. In general, to
  1197 exhaust all models below a certain cardinality bound, the number of scopes that
  1198 Nitpick must consider increases exponentially with the number of type variables
  1199 (and \textbf{typedecl}'d types) occurring in the formula. Given the default
  1200 cardinality specification of 1--8, no fewer than $8^4 = 4096$ scopes must be
  1201 considered for a formula involving $'a$, $'b$, $'c$, and $'d$.
  1202 
  1203 Fortunately, many formulas exhibit a property called \textsl{scope
  1204 monotonicity}, meaning that if the formula is falsifiable for a given scope,
  1205 it is also falsifiable for all larger scopes \cite[p.~165]{jackson-2006}.
  1206 
  1207 Consider the formula
  1208 
  1209 \prew
  1210 \textbf{lemma}~``$\textit{length~xs} = \textit{length~ys} \,\Longrightarrow\, \textit{rev}~(\textit{zip~xs~ys}) = \textit{zip~xs}~(\textit{rev~ys})$''
  1211 \postw
  1212 
  1213 where \textit{xs} is of type $'a~\textit{list}$ and \textit{ys} is of type
  1214 $'b~\textit{list}$. A priori, Nitpick would need to consider 512 scopes to
  1215 exhaust the specification \textit{card}~= 1--8. However, our intuition tells us
  1216 that any counterexample found with a small scope would still be a counterexample
  1217 in a larger scope---by simply ignoring the fresh $'a$ and $'b$ values provided
  1218 by the larger scope. Nitpick comes to the same conclusion after a careful
  1219 inspection of the formula and the relevant definitions:
  1220 
  1221 \prew
  1222 \textbf{nitpick}~[\textit{verbose}] \\[2\smallskipamount]
  1223 \slshape
  1224 The types ``\kern1pt$'a$'' and ``\kern1pt$'b$'' passed the monotonicity test.
  1225 Nitpick might be able to skip some scopes.
  1226  \\[2\smallskipamount]
  1227 Trying 8 scopes: \\
  1228 \hbox{}\qquad \textit{card} $'a$~= 1, \textit{card} $'b$~= 1,
  1229 \textit{card} \textit{nat}~= 1, \textit{card} ``$('a \times {'}b)$
  1230 \textit{list\/}''~= 1, \\
  1231 \hbox{}\qquad\quad \textit{card} ``\kern1pt$'a$ \textit{list\/}''~= 1, and
  1232 \textit{card} ``\kern1pt$'b$ \textit{list\/}''~= 1. \\
  1233 \hbox{}\qquad \textit{card} $'a$~= 2, \textit{card} $'b$~= 2,
  1234 \textit{card} \textit{nat}~= 2, \textit{card} ``$('a \times {'}b)$
  1235 \textit{list\/}''~= 2, \\
  1236 \hbox{}\qquad\quad \textit{card} ``\kern1pt$'a$ \textit{list\/}''~= 2, and
  1237 \textit{card} ``\kern1pt$'b$ \textit{list\/}''~= 2. \\
  1238 \hbox{}\qquad $\qquad\vdots$ \\[.5\smallskipamount]
  1239 \hbox{}\qquad \textit{card} $'a$~= 8, \textit{card} $'b$~= 8,
  1240 \textit{card} \textit{nat}~= 8, \textit{card} ``$('a \times {'}b)$
  1241 \textit{list\/}''~= 8, \\
  1242 \hbox{}\qquad\quad \textit{card} ``\kern1pt$'a$ \textit{list\/}''~= 8, and
  1243 \textit{card} ``\kern1pt$'b$ \textit{list\/}''~= 8.
  1244 \\[2\smallskipamount]
  1245 Nitpick found a counterexample for
  1246 \textit{card} $'a$~= 5, \textit{card} $'b$~= 5,
  1247 \textit{card} \textit{nat}~= 5, \textit{card} ``$('a \times {'}b)$
  1248 \textit{list\/}''~= 5, \textit{card} ``\kern1pt$'a$ \textit{list\/}''~= 5, and
  1249 \textit{card} ``\kern1pt$'b$ \textit{list\/}''~= 5:
  1250 \\[2\smallskipamount]
  1251 \hbox{}\qquad Free variables: \nopagebreak \\
  1252 \hbox{}\qquad\qquad $\textit{xs} = [a_1, a_2]$ \\
  1253 \hbox{}\qquad\qquad $\textit{ys} = [b_1, b_1]$ \\[2\smallskipamount]
  1254 Total time: 1636 ms.
  1255 \postw
  1256 
  1257 In theory, it should be sufficient to test a single scope:
  1258 
  1259 \prew
  1260 \textbf{nitpick}~[\textit{card}~= 8]
  1261 \postw
  1262 
  1263 However, this is often less efficient in practice and may lead to overly complex
  1264 counterexamples.
  1265 
  1266 If the monotonicity check fails but we believe that the formula is monotonic (or
  1267 we don't mind missing some counterexamples), we can pass the
  1268 \textit{mono} option. To convince yourself that this option is risky,
  1269 simply consider this example from \S\ref{skolemization}:
  1270 
  1271 \prew
  1272 \textbf{lemma} ``$\exists g.\; \forall x\Colon 'b.~g~(f~x) = x
  1273  \,\Longrightarrow\, \forall y\Colon {'}a.\; \exists x.~y = f~x$'' \\
  1274 \textbf{nitpick} [\textit{mono}] \\[2\smallskipamount]
  1275 {\slshape Nitpick found no counterexample.} \\[2\smallskipamount]
  1276 \textbf{nitpick} \\[2\smallskipamount]
  1277 \slshape
  1278 Nitpick found a counterexample for \textit{card} $'a$~= 2 and \textit{card} $'b$~=~1: \\
  1279 \hbox{}\qquad $\vdots$
  1280 \postw
  1281 
  1282 (It turns out the formula holds if and only if $\textit{card}~'a \le
  1283 \textit{card}~'b$.) Although this is rarely advisable, the automatic
  1284 monotonicity checks can be disabled by passing \textit{non\_mono}
  1285 (\S\ref{optimizations}).
  1286 
  1287 As insinuated in \S\ref{natural-numbers-and-integers} and
  1288 \S\ref{inductive-datatypes}, \textit{nat}, \textit{int}, and inductive datatypes
  1289 are normally monotonic and treated as such. The same is true for record types,
  1290 \textit{rat}, \textit{real}, and some \textbf{typedef}'d types. Thus, given the
  1291 cardinality specification 1--8, a formula involving \textit{nat}, \textit{int},
  1292 \textit{int~list}, \textit{rat}, and \textit{rat~list} will lead Nitpick to
  1293 consider only 8~scopes instead of $32\,768$.
  1294 
  1295 \subsection{Inductive Properties}
  1296 \label{inductive-properties}
  1297 
  1298 Inductive properties are a particular pain to prove, because the failure to
  1299 establish an induction step can mean several things:
  1300 %
  1301 \begin{enumerate}
  1302 \item The property is invalid.
  1303 \item The property is valid but is too weak to support the induction step.
  1304 \item The property is valid and strong enough; it's just that we haven't found
  1305 the proof yet.
  1306 \end{enumerate}
  1307 %
  1308 Depending on which scenario applies, we would take the appropriate course of
  1309 action:
  1310 %
  1311 \begin{enumerate}
  1312 \item Repair the statement of the property so that it becomes valid.
  1313 \item Generalize the property and/or prove auxiliary properties.
  1314 \item Work harder on a proof.
  1315 \end{enumerate}
  1316 %
  1317 How can we distinguish between the three scenarios? Nitpick's normal mode of
  1318 operation can often detect scenario 1, and Isabelle's automatic tactics help with
  1319 scenario 3. Using appropriate techniques, it is also often possible to use
  1320 Nitpick to identify scenario 2. Consider the following transition system,
  1321 in which natural numbers represent states:
  1322 
  1323 \prew
  1324 \textbf{inductive\_set}~\textit{reach}~\textbf{where} \\
  1325 ``$(4\Colon\textit{nat}) \in \textit{reach\/}$'' $\mid$ \\
  1326 ``$\lbrakk n < 4;\> n \in \textit{reach\/}\rbrakk \,\Longrightarrow\, 3 * n + 1 \in \textit{reach\/}$'' $\mid$ \\
  1327 ``$n \in \textit{reach} \,\Longrightarrow n + 2 \in \textit{reach\/}$''
  1328 \postw
  1329 
  1330 We will try to prove that only even numbers are reachable:
  1331 
  1332 \prew
  1333 \textbf{lemma}~``$n \in \textit{reach} \,\Longrightarrow\, 2~\textrm{dvd}~n$''
  1334 \postw
  1335 
  1336 Does this property hold? Nitpick cannot find a counterexample within 30 seconds,
  1337 so let's attempt a proof by induction:
  1338 
  1339 \prew
  1340 \textbf{apply}~(\textit{induct~set}{:}~\textit{reach\/}) \\
  1341 \textbf{apply}~\textit{auto}
  1342 \postw
  1343 
  1344 This leaves us in the following proof state:
  1345 
  1346 \prew
  1347 {\slshape goal (2 subgoals): \\
  1348 \phantom{0}1. ${\bigwedge}n.\;\, \lbrakk n \in \textit{reach\/};\, n < 4;\, 2~\textsl{dvd}~n\rbrakk \,\Longrightarrow\, 2~\textsl{dvd}~\textit{Suc}~(3 * n)$ \\
  1349 \phantom{0}2. ${\bigwedge}n.\;\, \lbrakk n \in \textit{reach\/};\, 2~\textsl{dvd}~n\rbrakk \,\Longrightarrow\, 2~\textsl{dvd}~\textit{Suc}~(\textit{Suc}~n)$
  1350 }
  1351 \postw
  1352 
  1353 If we run Nitpick on the first subgoal, it still won't find any
  1354 counterexample; and yet, \textit{auto} fails to go further, and \textit{arith}
  1355 is helpless. However, notice the $n \in \textit{reach}$ assumption, which
  1356 strengthens the induction hypothesis but is not immediately usable in the proof.
  1357 If we remove it and invoke Nitpick, this time we get a counterexample:
  1358 
  1359 \prew
  1360 \textbf{apply}~(\textit{thin\_tac}~``$n \in \textit{reach\/}$'') \\
  1361 \textbf{nitpick} \\[2\smallskipamount]
  1362 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
  1363 \hbox{}\qquad Skolem constant: \nopagebreak \\
  1364 \hbox{}\qquad\qquad $n = 0$
  1365 \postw
  1366 
  1367 Indeed, 0 < 4, 2 divides 0, but 2 does not divide 1. We can use this information
  1368 to strength the lemma:
  1369 
  1370 \prew
  1371 \textbf{lemma}~``$n \in \textit{reach} \,\Longrightarrow\, 2~\textrm{dvd}~n \mathrel{\lor} n \not= 0$''
  1372 \postw
  1373 
  1374 Unfortunately, the proof by induction still gets stuck, except that Nitpick now
  1375 finds the counterexample $n = 2$. We generalize the lemma further to
  1376 
  1377 \prew
  1378 \textbf{lemma}~``$n \in \textit{reach} \,\Longrightarrow\, 2~\textrm{dvd}~n \mathrel{\lor} n \ge 4$''
  1379 \postw
  1380 
  1381 and this time \textit{arith} can finish off the subgoals.
  1382 
  1383 A similar technique can be employed for structural induction. The
  1384 following mini formalization of full binary trees will serve as illustration:
  1385 
  1386 \prew
  1387 \textbf{datatype} $\kern1pt'a$~\textit{bin\_tree} = $\textit{Leaf}~{\kern1pt'a}$ $\mid$ $\textit{Branch}$ ``\kern1pt$'a$ \textit{bin\_tree}'' ``\kern1pt$'a$ \textit{bin\_tree}'' \\[2\smallskipamount]
  1388 \textbf{primrec}~\textit{labels}~\textbf{where} \\
  1389 ``$\textit{labels}~(\textit{Leaf}~a) = \{a\}$'' $\mid$ \\
  1390 ``$\textit{labels}~(\textit{Branch}~t~u) = \textit{labels}~t \mathrel{\cup} \textit{labels}~u$'' \\[2\smallskipamount]
  1391 \textbf{primrec}~\textit{swap}~\textbf{where} \\
  1392 ``$\textit{swap}~(\textit{Leaf}~c)~a~b =$ \\
  1393 \phantom{``}$(\textrm{if}~c = a~\textrm{then}~\textit{Leaf}~b~\textrm{else~if}~c = b~\textrm{then}~\textit{Leaf}~a~\textrm{else}~\textit{Leaf}~c)$'' $\mid$ \\
  1394 ``$\textit{swap}~(\textit{Branch}~t~u)~a~b = \textit{Branch}~(\textit{swap}~t~a~b)~(\textit{swap}~u~a~b)$''
  1395 \postw
  1396 
  1397 The \textit{labels} function returns the set of labels occurring on leaves of a
  1398 tree, and \textit{swap} exchanges two labels. Intuitively, if two distinct
  1399 labels $a$ and $b$ occur in a tree $t$, they should also occur in the tree
  1400 obtained by swapping $a$ and $b$:
  1401 
  1402 \prew
  1403 \textbf{lemma} $``\{a, b\} \subseteq \textit{labels}~t \,\Longrightarrow\, \textit{labels}~(\textit{swap}~t~a~b) = \textit{labels}~t$''
  1404 \postw
  1405 
  1406 Nitpick can't find any counterexample, so we proceed with induction
  1407 (this time favoring a more structured style):
  1408 
  1409 \prew
  1410 \textbf{proof}~(\textit{induct}~$t$) \\
  1411 \hbox{}\quad \textbf{case}~\textit{Leaf}~\textbf{thus}~\textit{?case}~\textbf{by}~\textit{simp} \\
  1412 \textbf{next} \\
  1413 \hbox{}\quad \textbf{case}~$(\textit{Branch}~t~u)$~\textbf{thus} \textit{?case}
  1414 \postw
  1415 
  1416 Nitpick can't find any counterexample at this point either, but it makes the
  1417 following suggestion:
  1418 
  1419 \prew
  1420 \slshape
  1421 Hint: To check that the induction hypothesis is general enough, try this command:
  1422 \textbf{nitpick}~[\textit{non\_std}, \textit{show\_all}].
  1423 \postw
  1424 
  1425 If we follow the hint, we get a ``nonstandard'' counterexample for the step:
  1426 
  1427 \prew
  1428 \slshape Nitpick found a nonstandard counterexample for \textit{card} $'a$ = 3: \\[2\smallskipamount]
  1429 \hbox{}\qquad Free variables: \nopagebreak \\
  1430 \hbox{}\qquad\qquad $a = a_1$ \\
  1431 \hbox{}\qquad\qquad $b = a_2$ \\
  1432 \hbox{}\qquad\qquad $t = \xi_1$ \\
  1433 \hbox{}\qquad\qquad $u = \xi_2$ \\
  1434 \hbox{}\qquad Datatype: \nopagebreak \\
  1435 \hbox{}\qquad\qquad $\alpha~\textit{btree} = \{\xi_1 \mathbin{=} \textit{Branch}~\xi_1~\xi_1,\> \xi_2 \mathbin{=} \textit{Branch}~\xi_2~\xi_2,\> \textit{Branch}~\xi_1~\xi_2\}$ \\
  1436 \hbox{}\qquad {\slshape Constants:} \nopagebreak \\
  1437 \hbox{}\qquad\qquad $\textit{labels} = \undef
  1438     (\!\begin{aligned}[t]%
  1439     & \xi_1 := \{a_2, a_3\},\> \xi_2 := \{a_1\},\> \\[-2pt]
  1440     & \textit{Branch}~\xi_1~\xi_2 := \{a_1, a_2, a_3\})\end{aligned}$ \\
  1441 \hbox{}\qquad\qquad $\lambda x_1.\> \textit{swap}~x_1~a~b = \undef
  1442     (\!\begin{aligned}[t]%
  1443     & \xi_1 := \xi_2,\> \xi_2 := \xi_2, \\[-2pt]
  1444     & \textit{Branch}~\xi_1~\xi_2 := \xi_2)\end{aligned}$ \\[2\smallskipamount]
  1445 The existence of a nonstandard model suggests that the induction hypothesis is not general enough or may even
  1446 be wrong. See the Nitpick manual's ``Inductive Properties'' section for details (``\textit{isabelle doc nitpick}'').
  1447 \postw
  1448 
  1449 Reading the Nitpick manual is a most excellent idea.
  1450 But what's going on? The \textit{non\_std} option told the tool to look for
  1451 nonstandard models of binary trees, which means that new ``nonstandard'' trees
  1452 $\xi_1, \xi_2, \ldots$, are now allowed in addition to the standard trees
  1453 generated by the \textit{Leaf} and \textit{Branch} constructors.%
  1454 \footnote{Notice the similarity between allowing nonstandard trees here and
  1455 allowing unreachable states in the preceding example (by removing the ``$n \in
  1456 \textit{reach\/}$'' assumption). In both cases, we effectively enlarge the
  1457 set of objects over which the induction is performed while doing the step
  1458 in order to test the induction hypothesis's strength.}
  1459 Unlike standard trees, these new trees contain cycles. We will see later that
  1460 every property of acyclic trees that can be proved without using induction also
  1461 holds for cyclic trees. Hence,
  1462 %
  1463 \begin{quote}
  1464 \textsl{If the induction
  1465 hypothesis is strong enough, the induction step will hold even for nonstandard
  1466 objects, and Nitpick won't find any nonstandard counterexample.}
  1467 \end{quote}
  1468 %
  1469 But here the tool find some nonstandard trees $t = \xi_1$
  1470 and $u = \xi_2$ such that $a \notin \textit{labels}~t$, $b \in
  1471 \textit{labels}~t$, $a \in \textit{labels}~u$, and $b \notin \textit{labels}~u$.
  1472 Because neither tree contains both $a$ and $b$, the induction hypothesis tells
  1473 us nothing about the labels of $\textit{swap}~t~a~b$ and $\textit{swap}~u~a~b$,
  1474 and as a result we know nothing about the labels of the tree
  1475 $\textit{swap}~(\textit{Branch}~t~u)~a~b$, which by definition equals
  1476 $\textit{Branch}$ $(\textit{swap}~t~a~b)$ $(\textit{swap}~u~a~b)$, whose
  1477 labels are $\textit{labels}$ $(\textit{swap}~t~a~b) \mathrel{\cup}
  1478 \textit{labels}$ $(\textit{swap}~u~a~b)$.
  1479 
  1480 The solution is to ensure that we always know what the labels of the subtrees
  1481 are in the inductive step, by covering the cases where $a$ and/or~$b$ is not in
  1482 $t$ in the statement of the lemma:
  1483 
  1484 \prew
  1485 \textbf{lemma} ``$\textit{labels}~(\textit{swap}~t~a~b) = {}$ \\
  1486 \phantom{\textbf{lemma} ``}$(\textrm{if}~a \in \textit{labels}~t~\textrm{then}$ \nopagebreak \\
  1487 \phantom{\textbf{lemma} ``(\quad}$\textrm{if}~b \in \textit{labels}~t~\textrm{then}~\textit{labels}~t~\textrm{else}~(\textit{labels}~t - \{a\}) \mathrel{\cup} \{b\}$ \\
  1488 \phantom{\textbf{lemma} ``(}$\textrm{else}$ \\
  1489 \phantom{\textbf{lemma} ``(\quad}$\textrm{if}~b \in \textit{labels}~t~\textrm{then}~(\textit{labels}~t - \{b\}) \mathrel{\cup} \{a\}~\textrm{else}~\textit{labels}~t)$''
  1490 \postw
  1491 
  1492 This time, Nitpick won't find any nonstandard counterexample, and we can perform
  1493 the induction step using \textit{auto}.
  1494 
  1495 \section{Case Studies}
  1496 \label{case-studies}
  1497 
  1498 As a didactic device, the previous section focused mostly on toy formulas whose
  1499 validity can easily be assessed just by looking at the formula. We will now
  1500 review two somewhat more realistic case studies that are within Nitpick's
  1501 reach:\ a context-free grammar modeled by mutually inductive sets and a
  1502 functional implementation of AA trees. The results presented in this
  1503 section were produced with the following settings:
  1504 
  1505 \prew
  1506 \textbf{nitpick\_params} [\textit{max\_potential}~= 0]
  1507 \postw
  1508 
  1509 \subsection{A Context-Free Grammar}
  1510 \label{a-context-free-grammar}
  1511 
  1512 Our first case study is taken from section 7.4 in the Isabelle tutorial
  1513 \cite{isa-tutorial}. The following grammar, originally due to Hopcroft and
  1514 Ullman, produces all strings with an equal number of $a$'s and $b$'s:
  1515 
  1516 \prew
  1517 \begin{tabular}{@{}r@{$\;\,$}c@{$\;\,$}l@{}}
  1518 $S$ & $::=$ & $\epsilon \mid bA \mid aB$ \\
  1519 $A$ & $::=$ & $aS \mid bAA$ \\
  1520 $B$ & $::=$ & $bS \mid aBB$
  1521 \end{tabular}
  1522 \postw
  1523 
  1524 The intuition behind the grammar is that $A$ generates all string with one more
  1525 $a$ than $b$'s and $B$ generates all strings with one more $b$ than $a$'s.
  1526 
  1527 The alphabet consists exclusively of $a$'s and $b$'s:
  1528 
  1529 \prew
  1530 \textbf{datatype} \textit{alphabet}~= $a$ $\mid$ $b$
  1531 \postw
  1532 
  1533 Strings over the alphabet are represented by \textit{alphabet list}s.
  1534 Nonterminals in the grammar become sets of strings. The production rules
  1535 presented above can be expressed as a mutually inductive definition:
  1536 
  1537 \prew
  1538 \textbf{inductive\_set} $S$ \textbf{and} $A$ \textbf{and} $B$ \textbf{where} \\
  1539 \textit{R1}:\kern.4em ``$[] \in S$'' $\,\mid$ \\
  1540 \textit{R2}:\kern.4em ``$w \in A\,\Longrightarrow\, b \mathbin{\#} w \in S$'' $\,\mid$ \\
  1541 \textit{R3}:\kern.4em ``$w \in B\,\Longrightarrow\, a \mathbin{\#} w \in S$'' $\,\mid$ \\
  1542 \textit{R4}:\kern.4em ``$w \in S\,\Longrightarrow\, a \mathbin{\#} w \in A$'' $\,\mid$ \\
  1543 \textit{R5}:\kern.4em ``$w \in S\,\Longrightarrow\, b \mathbin{\#} w \in S$'' $\,\mid$ \\
  1544 \textit{R6}:\kern.4em ``$\lbrakk v \in B;\> v \in B\rbrakk \,\Longrightarrow\, a \mathbin{\#} v \mathbin{@} w \in B$''
  1545 \postw
  1546 
  1547 The conversion of the grammar into the inductive definition was done manually by
  1548 Joe Blow, an underpaid undergraduate student. As a result, some errors might
  1549 have sneaked in.
  1550 
  1551 Debugging faulty specifications is at the heart of Nitpick's \textsl{raison
  1552 d'\^etre}. A good approach is to state desirable properties of the specification
  1553 (here, that $S$ is exactly the set of strings over $\{a, b\}$ with as many $a$'s
  1554 as $b$'s) and check them with Nitpick. If the properties are correctly stated,
  1555 counterexamples will point to bugs in the specification. For our grammar
  1556 example, we will proceed in two steps, separating the soundness and the
  1557 completeness of the set $S$. First, soundness:
  1558 
  1559 \prew
  1560 \textbf{theorem}~\textit{S\_sound\/}: \\
  1561 ``$w \in S \longrightarrow \textit{length}~[x\mathbin{\leftarrow} w.\; x = a] =
  1562   \textit{length}~[x\mathbin{\leftarrow} w.\; x = b]$'' \\
  1563 \textbf{nitpick} \\[2\smallskipamount]
  1564 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
  1565 \hbox{}\qquad Free variable: \nopagebreak \\
  1566 \hbox{}\qquad\qquad $w = [b]$
  1567 \postw
  1568 
  1569 It would seem that $[b] \in S$. How could this be? An inspection of the
  1570 introduction rules reveals that the only rule with a right-hand side of the form
  1571 $b \mathbin{\#} {\ldots} \in S$ that could have introduced $[b]$ into $S$ is
  1572 \textit{R5}:
  1573 
  1574 \prew
  1575 ``$w \in S\,\Longrightarrow\, b \mathbin{\#} w \in S$''
  1576 \postw
  1577 
  1578 On closer inspection, we can see that this rule is wrong. To match the
  1579 production $B ::= bS$, the second $S$ should be a $B$. We fix the typo and try
  1580 again:
  1581 
  1582 \prew
  1583 \textbf{nitpick} \\[2\smallskipamount]
  1584 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
  1585 \hbox{}\qquad Free variable: \nopagebreak \\
  1586 \hbox{}\qquad\qquad $w = [a, a, b]$
  1587 \postw
  1588 
  1589 Some detective work is necessary to find out what went wrong here. To get $[a,
  1590 a, b] \in S$, we need $[a, b] \in B$ by \textit{R3}, which in turn can only come
  1591 from \textit{R6}:
  1592 
  1593 \prew
  1594 ``$\lbrakk v \in B;\> v \in B\rbrakk \,\Longrightarrow\, a \mathbin{\#} v \mathbin{@} w \in B$''
  1595 \postw
  1596 
  1597 Now, this formula must be wrong: The same assumption occurs twice, and the
  1598 variable $w$ is unconstrained. Clearly, one of the two occurrences of $v$ in
  1599 the assumptions should have been a $w$.
  1600 
  1601 With the correction made, we don't get any counterexample from Nitpick. Let's
  1602 move on and check completeness:
  1603 
  1604 \prew
  1605 \textbf{theorem}~\textit{S\_complete}: \\
  1606 ``$\textit{length}~[x\mathbin{\leftarrow} w.\; x = a] =
  1607    \textit{length}~[x\mathbin{\leftarrow} w.\; x = b]
  1608   \longrightarrow w \in S$'' \\
  1609 \textbf{nitpick} \\[2\smallskipamount]
  1610 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
  1611 \hbox{}\qquad Free variable: \nopagebreak \\
  1612 \hbox{}\qquad\qquad $w = [b, b, a, a]$
  1613 \postw
  1614 
  1615 Apparently, $[b, b, a, a] \notin S$, even though it has the same numbers of
  1616 $a$'s and $b$'s. But since our inductive definition passed the soundness check,
  1617 the introduction rules we have are probably correct. Perhaps we simply lack an
  1618 introduction rule. Comparing the grammar with the inductive definition, our
  1619 suspicion is confirmed: Joe Blow simply forgot the production $A ::= bAA$,
  1620 without which the grammar cannot generate two or more $b$'s in a row. So we add
  1621 the rule
  1622 
  1623 \prew
  1624 ``$\lbrakk v \in A;\> w \in A\rbrakk \,\Longrightarrow\, b \mathbin{\#} v \mathbin{@} w \in A$''
  1625 \postw
  1626 
  1627 With this last change, we don't get any counterexamples from Nitpick for either
  1628 soundness or completeness. We can even generalize our result to cover $A$ and
  1629 $B$ as well:
  1630 
  1631 \prew
  1632 \textbf{theorem} \textit{S\_A\_B\_sound\_and\_complete}: \\
  1633 ``$w \in S \longleftrightarrow \textit{length}~[x \mathbin{\leftarrow} w.\; x = a] = \textit{length}~[x \mathbin{\leftarrow} w.\; x = b]$'' \\
  1634 ``$w \in A \longleftrightarrow \textit{length}~[x \mathbin{\leftarrow} w.\; x = a] = \textit{length}~[x \mathbin{\leftarrow} w.\; x = b] + 1$'' \\
  1635 ``$w \in B \longleftrightarrow \textit{length}~[x \mathbin{\leftarrow} w.\; x = b] = \textit{length}~[x \mathbin{\leftarrow} w.\; x = a] + 1$'' \\
  1636 \textbf{nitpick} \\[2\smallskipamount]
  1637 \slshape Nitpick ran out of time after checking 7 of 8 scopes.
  1638 \postw
  1639 
  1640 \subsection{AA Trees}
  1641 \label{aa-trees}
  1642 
  1643 AA trees are a kind of balanced trees discovered by Arne Andersson that provide
  1644 similar performance to red-black trees, but with a simpler implementation
  1645 \cite{andersson-1993}. They can be used to store sets of elements equipped with
  1646 a total order $<$. We start by defining the datatype and some basic extractor
  1647 functions:
  1648 
  1649 \prew
  1650 \textbf{datatype} $'a$~\textit{aa\_tree} = \\
  1651 \hbox{}\quad $\Lambda$ $\mid$ $N$ ``\kern1pt$'a\Colon \textit{linorder}$'' \textit{nat} ``\kern1pt$'a$ \textit{aa\_tree}'' ``\kern1pt$'a$ \textit{aa\_tree}''  \\[2\smallskipamount]
  1652 \textbf{primrec} \textit{data} \textbf{where} \\
  1653 ``$\textit{data}~\Lambda = \undef$'' $\,\mid$ \\
  1654 ``$\textit{data}~(N~x~\_~\_~\_) = x$'' \\[2\smallskipamount]
  1655 \textbf{primrec} \textit{dataset} \textbf{where} \\
  1656 ``$\textit{dataset}~\Lambda = \{\}$'' $\,\mid$ \\
  1657 ``$\textit{dataset}~(N~x~\_~t~u) = \{x\} \cup \textit{dataset}~t \mathrel{\cup} \textit{dataset}~u$'' \\[2\smallskipamount]
  1658 \textbf{primrec} \textit{level} \textbf{where} \\
  1659 ``$\textit{level}~\Lambda = 0$'' $\,\mid$ \\
  1660 ``$\textit{level}~(N~\_~k~\_~\_) = k$'' \\[2\smallskipamount]
  1661 \textbf{primrec} \textit{left} \textbf{where} \\
  1662 ``$\textit{left}~\Lambda = \Lambda$'' $\,\mid$ \\
  1663 ``$\textit{left}~(N~\_~\_~t~\_) = t$'' \\[2\smallskipamount]
  1664 \textbf{primrec} \textit{right} \textbf{where} \\
  1665 ``$\textit{right}~\Lambda = \Lambda$'' $\,\mid$ \\
  1666 ``$\textit{right}~(N~\_~\_~\_~u) = u$''
  1667 \postw
  1668 
  1669 The wellformedness criterion for AA trees is fairly complex. Wikipedia states it
  1670 as follows \cite{wikipedia-2009-aa-trees}:
  1671 
  1672 \kern.2\parskip %% TYPESETTING
  1673 
  1674 \pre
  1675 Each node has a level field, and the following invariants must remain true for
  1676 the tree to be valid:
  1677 
  1678 \raggedright
  1679 
  1680 \kern-.4\parskip %% TYPESETTING
  1681 
  1682 \begin{enum}
  1683 \item[]
  1684 \begin{enum}
  1685 \item[1.] The level of a leaf node is one.
  1686 \item[2.] The level of a left child is strictly less than that of its parent.
  1687 \item[3.] The level of a right child is less than or equal to that of its parent.
  1688 \item[4.] The level of a right grandchild is strictly less than that of its grandparent.
  1689 \item[5.] Every node of level greater than one must have two children.
  1690 \end{enum}
  1691 \end{enum}
  1692 \post
  1693 
  1694 \kern.4\parskip %% TYPESETTING
  1695 
  1696 The \textit{wf} predicate formalizes this description:
  1697 
  1698 \prew
  1699 \textbf{primrec} \textit{wf} \textbf{where} \\
  1700 ``$\textit{wf}~\Lambda = \textit{True}$'' $\,\mid$ \\
  1701 ``$\textit{wf}~(N~\_~k~t~u) =$ \\
  1702 \phantom{``}$(\textrm{if}~t = \Lambda~\textrm{then}$ \\
  1703 \phantom{``$(\quad$}$k = 1 \mathrel{\land} (u = \Lambda \mathrel{\lor} (\textit{level}~u = 1 \mathrel{\land} \textit{left}~u = \Lambda \mathrel{\land} \textit{right}~u = \Lambda))$ \\
  1704 \phantom{``$($}$\textrm{else}$ \\
  1705 \hbox{}\phantom{``$(\quad$}$\textit{wf}~t \mathrel{\land} \textit{wf}~u
  1706 \mathrel{\land} u \not= \Lambda \mathrel{\land} \textit{level}~t < k
  1707 \mathrel{\land} \textit{level}~u \le k$ \\
  1708 \hbox{}\phantom{``$(\quad$}${\land}\; \textit{level}~(\textit{right}~u) < k)$''
  1709 \postw
  1710 
  1711 Rebalancing the tree upon insertion and removal of elements is performed by two
  1712 auxiliary functions called \textit{skew} and \textit{split}, defined below:
  1713 
  1714 \prew
  1715 \textbf{primrec} \textit{skew} \textbf{where} \\
  1716 ``$\textit{skew}~\Lambda = \Lambda$'' $\,\mid$ \\
  1717 ``$\textit{skew}~(N~x~k~t~u) = {}$ \\
  1718 \phantom{``}$(\textrm{if}~t \not= \Lambda \mathrel{\land} k =
  1719 \textit{level}~t~\textrm{then}$ \\
  1720 \phantom{``(\quad}$N~(\textit{data}~t)~k~(\textit{left}~t)~(N~x~k~
  1721 (\textit{right}~t)~u)$ \\
  1722 \phantom{``(}$\textrm{else}$ \\
  1723 \phantom{``(\quad}$N~x~k~t~u)$''
  1724 \postw
  1725 
  1726 \prew
  1727 \textbf{primrec} \textit{split} \textbf{where} \\
  1728 ``$\textit{split}~\Lambda = \Lambda$'' $\,\mid$ \\
  1729 ``$\textit{split}~(N~x~k~t~u) = {}$ \\
  1730 \phantom{``}$(\textrm{if}~u \not= \Lambda \mathrel{\land} k =
  1731 \textit{level}~(\textit{right}~u)~\textrm{then}$ \\
  1732 \phantom{``(\quad}$N~(\textit{data}~u)~(\textit{Suc}~k)~
  1733 (N~x~k~t~(\textit{left}~u))~(\textit{right}~u)$ \\
  1734 \phantom{``(}$\textrm{else}$ \\
  1735 \phantom{``(\quad}$N~x~k~t~u)$''
  1736 \postw
  1737 
  1738 Performing a \textit{skew} or a \textit{split} should have no impact on the set
  1739 of elements stored in the tree:
  1740 
  1741 \prew
  1742 \textbf{theorem}~\textit{dataset\_skew\_split\/}:\\
  1743 ``$\textit{dataset}~(\textit{skew}~t) = \textit{dataset}~t$'' \\
  1744 ``$\textit{dataset}~(\textit{split}~t) = \textit{dataset}~t$'' \\
  1745 \textbf{nitpick} \\[2\smallskipamount]
  1746 {\slshape Nitpick ran out of time after checking 7 of 8 scopes.}
  1747 \postw
  1748 
  1749 Furthermore, applying \textit{skew} or \textit{split} to a well-formed tree
  1750 should not alter the tree:
  1751 
  1752 \prew
  1753 \textbf{theorem}~\textit{wf\_skew\_split\/}:\\
  1754 ``$\textit{wf}~t\,\Longrightarrow\, \textit{skew}~t = t$'' \\
  1755 ``$\textit{wf}~t\,\Longrightarrow\, \textit{split}~t = t$'' \\
  1756 \textbf{nitpick} \\[2\smallskipamount]
  1757 {\slshape Nitpick found no counterexample.}
  1758 \postw
  1759 
  1760 Insertion is implemented recursively. It preserves the sort order:
  1761 
  1762 \prew
  1763 \textbf{primrec}~\textit{insort} \textbf{where} \\
  1764 ``$\textit{insort}~\Lambda~x = N~x~1~\Lambda~\Lambda$'' $\,\mid$ \\
  1765 ``$\textit{insort}~(N~y~k~t~u)~x =$ \\
  1766 \phantom{``}$({*}~(\textit{split} \circ \textit{skew})~{*})~(N~y~k~(\textrm{if}~x < y~\textrm{then}~\textit{insort}~t~x~\textrm{else}~t)$ \\
  1767 \phantom{``$({*}~(\textit{split} \circ \textit{skew})~{*})~(N~y~k~$}$(\textrm{if}~x > y~\textrm{then}~\textit{insort}~u~x~\textrm{else}~u))$''
  1768 \postw
  1769 
  1770 Notice that we deliberately commented out the application of \textit{skew} and
  1771 \textit{split}. Let's see if this causes any problems:
  1772 
  1773 \prew
  1774 \textbf{theorem}~\textit{wf\_insort\/}:\kern.4em ``$\textit{wf}~t\,\Longrightarrow\, \textit{wf}~(\textit{insort}~t~x)$'' \\
  1775 \textbf{nitpick} \\[2\smallskipamount]
  1776 \slshape Nitpick found a counterexample for \textit{card} $'a$ = 4: \\[2\smallskipamount]
  1777 \hbox{}\qquad Free variables: \nopagebreak \\
  1778 \hbox{}\qquad\qquad $t = N~a_1~1~\Lambda~\Lambda$ \\
  1779 \hbox{}\qquad\qquad $x = a_2$
  1780 \postw
  1781 
  1782 It's hard to see why this is a counterexample. To improve readability, we will
  1783 restrict the theorem to \textit{nat}, so that we don't need to look up the value
  1784 of the $\textit{op}~{<}$ constant to find out which element is smaller than the
  1785 other. In addition, we will tell Nitpick to display the value of
  1786 $\textit{insort}~t~x$ using the \textit{eval} option. This gives
  1787 
  1788 \prew
  1789 \textbf{theorem} \textit{wf\_insort\_nat\/}:\kern.4em ``$\textit{wf}~t\,\Longrightarrow\, \textit{wf}~(\textit{insort}~t~(x\Colon\textit{nat}))$'' \\
  1790 \textbf{nitpick} [\textit{eval} = ``$\textit{insort}~t~x$''] \\[2\smallskipamount]
  1791 \slshape Nitpick found a counterexample: \\[2\smallskipamount]
  1792 \hbox{}\qquad Free variables: \nopagebreak \\
  1793 \hbox{}\qquad\qquad $t = N~1~1~\Lambda~\Lambda$ \\
  1794 \hbox{}\qquad\qquad $x = 0$ \\
  1795 \hbox{}\qquad Evaluated term: \\
  1796 \hbox{}\qquad\qquad $\textit{insort}~t~x = N~1~1~(N~0~1~\Lambda~\Lambda)~\Lambda$
  1797 \postw
  1798 
  1799 Nitpick's output reveals that the element $0$ was added as a left child of $1$,
  1800 where both have a level of 1. This violates the second AA tree invariant, which
  1801 states that a left child's level must be less than its parent's. This shouldn't
  1802 come as a surprise, considering that we commented out the tree rebalancing code.
  1803 Reintroducing the code seems to solve the problem:
  1804 
  1805 \prew
  1806 \textbf{theorem}~\textit{wf\_insort\/}:\kern.4em ``$\textit{wf}~t\,\Longrightarrow\, \textit{wf}~(\textit{insort}~t~x)$'' \\
  1807 \textbf{nitpick} \\[2\smallskipamount]
  1808 {\slshape Nitpick ran out of time after checking 7 of 8 scopes.}
  1809 \postw
  1810 
  1811 Insertion should transform the set of elements represented by the tree in the
  1812 obvious way:
  1813 
  1814 \prew
  1815 \textbf{theorem} \textit{dataset\_insort\/}:\kern.4em
  1816 ``$\textit{dataset}~(\textit{insort}~t~x) = \{x\} \cup \textit{dataset}~t$'' \\
  1817 \textbf{nitpick} \\[2\smallskipamount]
  1818 {\slshape Nitpick ran out of time after checking 6 of 8 scopes.}
  1819 \postw
  1820 
  1821 We could continue like this and sketch a complete theory of AA trees. Once the
  1822 definitions and main theorems are in place and have been thoroughly tested using
  1823 Nitpick, we could start working on the proofs. Developing theories this way
  1824 usually saves time, because faulty theorems and definitions are discovered much
  1825 earlier in the process.
  1826 
  1827 \section{Option Reference}
  1828 \label{option-reference}
  1829 
  1830 \def\flushitem#1{\item[]\noindent\kern-\leftmargin \textbf{#1}}
  1831 \def\qty#1{$\left<\textit{#1}\right>$}
  1832 \def\qtybf#1{$\mathbf{\left<\textbf{\textit{#1}}\right>}$}
  1833 \def\optrue#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{bool}$\bigr]$\quad [\textit{true}]\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
  1834 \def\opfalse#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{bool}$\bigr]$\quad [\textit{false}]\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
  1835 \def\opsmart#1#2{\flushitem{\textit{#1} $\bigl[$= \qtybf{bool\_or\_smart}$\bigr]$\quad [\textit{smart}]\hfill (neg.: \textit{#2})}\nopagebreak\\[\parskip]}
  1836 \def\opnodefault#1#2{\flushitem{\textit{#1} = \qtybf{#2}} \nopagebreak\\[\parskip]}
  1837 \def\opdefault#1#2#3{\flushitem{\textit{#1} = \qtybf{#2}\quad [\textit{#3}]} \nopagebreak\\[\parskip]}
  1838 \def\oparg#1#2#3{\flushitem{\textit{#1} \qtybf{#2} = \qtybf{#3}} \nopagebreak\\[\parskip]}
  1839 \def\opargbool#1#2#3{\flushitem{\textit{#1} \qtybf{#2} $\bigl[$= \qtybf{bool}$\bigr]$\hfill (neg.: \textit{#3})}\nopagebreak\\[\parskip]}
  1840 \def\opargboolorsmart#1#2#3{\flushitem{\textit{#1} \qtybf{#2} $\bigl[$= \qtybf{bool\_or\_smart}$\bigr]$\hfill (neg.: \textit{#3})}\nopagebreak\\[\parskip]}
  1841 
  1842 Nitpick's behavior can be influenced by various options, which can be specified
  1843 in brackets after the \textbf{nitpick} command. Default values can be set
  1844 using \textbf{nitpick\_\allowbreak params}. For example:
  1845 
  1846 \prew
  1847 \textbf{nitpick\_params} [\textit{verbose}, \,\textit{timeout} = 60$\,s$]
  1848 \postw
  1849 
  1850 The options are categorized as follows:\ mode of operation
  1851 (\S\ref{mode-of-operation}), scope of search (\S\ref{scope-of-search}), output
  1852 format (\S\ref{output-format}), automatic counterexample checks
  1853 (\S\ref{authentication}), optimizations
  1854 (\S\ref{optimizations}), and timeouts (\S\ref{timeouts}).
  1855 
  1856 You can instruct Nitpick to run automatically on newly entered theorems by
  1857 enabling the ``Auto Nitpick'' option from the ``Isabelle'' menu in Proof
  1858 General. For automatic runs, \textit{user\_axioms} (\S\ref{mode-of-operation})
  1859 and \textit{assms} (\S\ref{mode-of-operation}) are implicitly enabled,
  1860 \textit{blocking} (\S\ref{mode-of-operation}), \textit{verbose}
  1861 (\S\ref{output-format}), and \textit{debug} (\S\ref{output-format}) are
  1862 disabled, \textit{max\_potential} (\S\ref{output-format}) is taken to be 0, and
  1863 \textit{timeout} (\S\ref{timeouts}) is superseded by the ``Auto Counterexample
  1864 Time Limit'' in Proof General's ``Isabelle'' menu. Nitpick's output is also more
  1865 concise.
  1866 
  1867 The number of options can be overwhelming at first glance. Do not let that worry
  1868 you: Nitpick's defaults have been chosen so that it almost always does the right
  1869 thing, and the most important options have been covered in context in
  1870 \S\ref{first-steps}.
  1871 
  1872 The descriptions below refer to the following syntactic quantities:
  1873 
  1874 \begin{enum}
  1875 \item[$\bullet$] \qtybf{string}: A string.
  1876 \item[$\bullet$] \qtybf{bool\/}: \textit{true} or \textit{false}.
  1877 \item[$\bullet$] \qtybf{bool\_or\_smart\/}: \textit{true}, \textit{false}, or \textit{smart}.
  1878 \item[$\bullet$] \qtybf{int\/}: An integer. Negative integers are prefixed with a hyphen.
  1879 \item[$\bullet$] \qtybf{int\_or\_smart\/}: An integer or \textit{smart}.
  1880 \item[$\bullet$] \qtybf{int\_range}: An integer (e.g., 3) or a range
  1881 of nonnegative integers (e.g., $1$--$4$). The range symbol `--' can be entered as \texttt{-} (hyphen) or \texttt{\char`\\\char`\<midarrow\char`\>}.
  1882 
  1883 \item[$\bullet$] \qtybf{int\_seq}: A comma-separated sequence of ranges of integers (e.g.,~1{,}3{,}\allowbreak6--8).
  1884 \item[$\bullet$] \qtybf{time}: An integer followed by $\textit{min}$ (minutes), $s$ (seconds), or \textit{ms}
  1885 (milliseconds), or the keyword \textit{none} ($\infty$ years).
  1886 \item[$\bullet$] \qtybf{const\/}: The name of a HOL constant.
  1887 \item[$\bullet$] \qtybf{term}: A HOL term (e.g., ``$f~x$'').
  1888 \item[$\bullet$] \qtybf{term\_list\/}: A space-separated list of HOL terms (e.g.,
  1889 ``$f~x$''~``$g~y$'').
  1890 \item[$\bullet$] \qtybf{type}: A HOL type.
  1891 \end{enum}
  1892 
  1893 Default values are indicated in square brackets. Boolean options have a negated
  1894 counterpart (e.g., \textit{blocking} vs.\ \textit{no\_blocking}). When setting
  1895 Boolean options, ``= \textit{true}'' may be omitted.
  1896 
  1897 \subsection{Mode of Operation}
  1898 \label{mode-of-operation}
  1899 
  1900 \begin{enum}
  1901 \optrue{blocking}{non\_blocking}
  1902 Specifies whether the \textbf{nitpick} command should operate synchronously.
  1903 The asynchronous (non-blocking) mode lets the user start proving the putative
  1904 theorem while Nitpick looks for a counterexample, but it can also be more
  1905 confusing. For technical reasons, automatic runs currently always block.
  1906 
  1907 \optrue{falsify}{satisfy}
  1908 Specifies whether Nitpick should look for falsifying examples (countermodels) or
  1909 satisfying examples (models). This manual assumes throughout that
  1910 \textit{falsify} is enabled.
  1911 
  1912 \opsmart{user\_axioms}{no\_user\_axioms}
  1913 Specifies whether the user-defined axioms (specified using 
  1914 \textbf{axiomatization} and \textbf{axioms}) should be considered. If the option
  1915 is set to \textit{smart}, Nitpick performs an ad hoc axiom selection based on
  1916 the constants that occur in the formula to falsify. The option is implicitly set
  1917 to \textit{true} for automatic runs.
  1918 
  1919 \textbf{Warning:} If the option is set to \textit{true}, Nitpick might
  1920 nonetheless ignore some polymorphic axioms. Counterexamples generated under
  1921 these conditions are tagged as ``quasi genuine.'' The \textit{debug}
  1922 (\S\ref{output-format}) option can be used to find out which axioms were
  1923 considered.
  1924 
  1925 \nopagebreak
  1926 {\small See also \textit{assms} (\S\ref{mode-of-operation}) and \textit{debug}
  1927 (\S\ref{output-format}).}
  1928 
  1929 \optrue{assms}{no\_assms}
  1930 Specifies whether the relevant assumptions in structured proofs should be
  1931 considered. The option is implicitly enabled for automatic runs.
  1932 
  1933 \nopagebreak
  1934 {\small See also \textit{user\_axioms} (\S\ref{mode-of-operation}).}
  1935 
  1936 \opfalse{overlord}{no\_overlord}
  1937 Specifies whether Nitpick should put its temporary files in
  1938 \texttt{\$ISABELLE\_\allowbreak HOME\_\allowbreak USER}, which is useful for
  1939 debugging Nitpick but also unsafe if several instances of the tool are run
  1940 simultaneously. The files are identified by the extensions
  1941 \texttt{.kki}, \texttt{.cnf}, \texttt{.out}, and
  1942 \texttt{.err}; you may safely remove them after Nitpick has run.
  1943 
  1944 \nopagebreak
  1945 {\small See also \textit{debug} (\S\ref{output-format}).}
  1946 \end{enum}
  1947 
  1948 \subsection{Scope of Search}
  1949 \label{scope-of-search}
  1950 
  1951 \begin{enum}
  1952 \oparg{card}{type}{int\_seq}
  1953 Specifies the sequence of cardinalities to use for a given type.
  1954 For free types, and often also for \textbf{typedecl}'d types, it usually makes
  1955 sense to specify cardinalities as a range of the form \textit{$1$--$n$}.
  1956 
  1957 \nopagebreak
  1958 {\small See also \textit{box} (\S\ref{scope-of-search}) and \textit{mono}
  1959 (\S\ref{scope-of-search}).}
  1960 
  1961 \opdefault{card}{int\_seq}{$\mathbf{1}$--$\mathbf{8}$}
  1962 Specifies the default sequence of cardinalities to use. This can be overridden
  1963 on a per-type basis using the \textit{card}~\qty{type} option described above.
  1964 
  1965 \oparg{max}{const}{int\_seq}
  1966 Specifies the sequence of maximum multiplicities to use for a given
  1967 (co)in\-duc\-tive datatype constructor. A constructor's multiplicity is the
  1968 number of distinct values that it can construct. Nonsensical values (e.g.,
  1969 \textit{max}~[]~$=$~2) are silently repaired. This option is only available for
  1970 datatypes equipped with several constructors.
  1971 
  1972 \opnodefault{max}{int\_seq}
  1973 Specifies the default sequence of maximum multiplicities to use for
  1974 (co)in\-duc\-tive datatype constructors. This can be overridden on a per-constructor
  1975 basis using the \textit{max}~\qty{const} option described above.
  1976 
  1977 \opsmart{binary\_ints}{unary\_ints}
  1978 Specifies whether natural numbers and integers should be encoded using a unary
  1979 or binary notation. In unary mode, the cardinality fully specifies the subset
  1980 used to approximate the type. For example:
  1981 %
  1982 $$\hbox{\begin{tabular}{@{}rll@{}}%
  1983 \textit{card nat} = 4 & induces & $\{0,\, 1,\, 2,\, 3\}$ \\
  1984 \textit{card int} = 4 & induces & $\{-1,\, 0,\, +1,\, +2\}$ \\
  1985 \textit{card int} = 5 & induces & $\{-2,\, -1,\, 0,\, +1,\, +2\}.$%
  1986 \end{tabular}}$$
  1987 %
  1988 In general:
  1989 %
  1990 $$\hbox{\begin{tabular}{@{}rll@{}}%
  1991 \textit{card nat} = $K$ & induces & $\{0,\, \ldots,\, K - 1\}$ \\
  1992 \textit{card int} = $K$ & induces & $\{-\lceil K/2 \rceil + 1,\, \ldots,\, +\lfloor K/2 \rfloor\}.$%
  1993 \end{tabular}}$$
  1994 %
  1995 In binary mode, the cardinality specifies the number of distinct values that can
  1996 be constructed. Each of these value is represented by a bit pattern whose length
  1997 is specified by the \textit{bits} (\S\ref{scope-of-search}) option. By default,
  1998 Nitpick attempts to choose the more appropriate encoding by inspecting the
  1999 formula at hand, preferring the binary notation for problems involving
  2000 multiplicative operators or large constants.
  2001 
  2002 \textbf{Warning:} For technical reasons, Nitpick always reverts to unary for
  2003 problems that refer to the types \textit{rat} or \textit{real} or the constants
  2004 \textit{Suc}, \textit{gcd}, or \textit{lcm}.
  2005 
  2006 {\small See also \textit{bits} (\S\ref{scope-of-search}) and
  2007 \textit{show\_datatypes} (\S\ref{output-format}).}
  2008 
  2009 \opdefault{bits}{int\_seq}{$\mathbf{1},\mathbf{2},\mathbf{3},\mathbf{4},\mathbf{6},\mathbf{8},\mathbf{10},\mathbf{12}$}
  2010 Specifies the number of bits to use to represent natural numbers and integers in
  2011 binary, excluding the sign bit. The minimum is 1 and the maximum is 31.
  2012 
  2013 {\small See also \textit{binary\_ints} (\S\ref{scope-of-search}).}
  2014 
  2015 \opargboolorsmart{wf}{const}{non\_wf}
  2016 Specifies whether the specified (co)in\-duc\-tively defined predicate is
  2017 well-founded. The option can take the following values:
  2018 
  2019 \begin{enum}
  2020 \item[$\bullet$] \textbf{\textit{true}}: Tentatively treat the (co)in\-duc\-tive
  2021 predicate as if it were well-founded. Since this is generally not sound when the
  2022 predicate is not well-founded, the counterexamples are tagged as ``quasi
  2023 genuine.''
  2024 
  2025 \item[$\bullet$] \textbf{\textit{false}}: Treat the (co)in\-duc\-tive predicate
  2026 as if it were not well-founded. The predicate is then unrolled as prescribed by
  2027 the \textit{star\_linear\_preds}, \textit{iter}~\qty{const}, and \textit{iter}
  2028 options.
  2029 
  2030 \item[$\bullet$] \textbf{\textit{smart}}: Try to prove that the inductive
  2031 predicate is well-founded using Isabelle's \textit{lexicographic\_order} and
  2032 \textit{size\_change} tactics. If this succeeds (or the predicate occurs with an
  2033 appropriate polarity in the formula to falsify), use an efficient fixed point
  2034 equation as specification of the predicate; otherwise, unroll the predicates
  2035 according to the \textit{iter}~\qty{const} and \textit{iter} options.
  2036 \end{enum}
  2037 
  2038 \nopagebreak
  2039 {\small See also \textit{iter} (\S\ref{scope-of-search}),
  2040 \textit{star\_linear\_preds} (\S\ref{optimizations}), and \textit{tac\_timeout}
  2041 (\S\ref{timeouts}).}
  2042 
  2043 \opsmart{wf}{non\_wf}
  2044 Specifies the default wellfoundedness setting to use. This can be overridden on
  2045 a per-predicate basis using the \textit{wf}~\qty{const} option above.
  2046 
  2047 \oparg{iter}{const}{int\_seq}
  2048 Specifies the sequence of iteration counts to use when unrolling a given
  2049 (co)in\-duc\-tive predicate. By default, unrolling is applied for inductive
  2050 predicates that occur negatively and coinductive predicates that occur
  2051 positively in the formula to falsify and that cannot be proved to be
  2052 well-founded, but this behavior is influenced by the \textit{wf} option. The
  2053 iteration counts are automatically bounded by the cardinality of the predicate's
  2054 domain.
  2055 
  2056 {\small See also \textit{wf} (\S\ref{scope-of-search}) and
  2057 \textit{star\_linear\_preds} (\S\ref{optimizations}).}
  2058 
  2059 \opdefault{iter}{int\_seq}{$\mathbf{1{,}2{,}4{,}8{,}12{,}16{,}24{,}32}$}
  2060 Specifies the sequence of iteration counts to use when unrolling (co)in\-duc\-tive
  2061 predicates. This can be overridden on a per-predicate basis using the
  2062 \textit{iter} \qty{const} option above.
  2063 
  2064 \opdefault{bisim\_depth}{int\_seq}{$\mathbf{7}$}
  2065 Specifies the sequence of iteration counts to use when unrolling the
  2066 bisimilarity predicate generated by Nitpick for coinductive datatypes. A value
  2067 of $-1$ means that no predicate is generated, in which case Nitpick performs an
  2068 after-the-fact check to see if the known coinductive datatype values are
  2069 bidissimilar. If two values are found to be bisimilar, the counterexample is
  2070 tagged as ``quasi genuine.'' The iteration counts are automatically bounded by
  2071 the sum of the cardinalities of the coinductive datatypes occurring in the
  2072 formula to falsify.
  2073 
  2074 \opargboolorsmart{box}{type}{dont\_box}
  2075 Specifies whether Nitpick should attempt to wrap (``box'') a given function or
  2076 product type in an isomorphic datatype internally. Boxing is an effective mean
  2077 to reduce the search space and speed up Nitpick, because the isomorphic datatype
  2078 is approximated by a subset of the possible function or pair values.
  2079 Like other drastic optimizations, it can also prevent the discovery of
  2080 counterexamples. The option can take the following values:
  2081 
  2082 \begin{enum}
  2083 \item[$\bullet$] \textbf{\textit{true}}: Box the specified type whenever
  2084 practicable.
  2085 \item[$\bullet$] \textbf{\textit{false}}: Never box the type.
  2086 \item[$\bullet$] \textbf{\textit{smart}}: Box the type only in contexts where it
  2087 is likely to help. For example, $n$-tuples where $n > 2$ and arguments to
  2088 higher-order functions are good candidates for boxing.
  2089 \end{enum}
  2090 
  2091 \nopagebreak
  2092 {\small See also \textit{finitize} (\S\ref{scope-of-search}), \textit{verbose}
  2093 (\S\ref{output-format}), and \textit{debug} (\S\ref{output-format}).}
  2094 
  2095 \opsmart{box}{dont\_box}
  2096 Specifies the default boxing setting to use. This can be overridden on a
  2097 per-type basis using the \textit{box}~\qty{type} option described above.
  2098 
  2099 \opargboolorsmart{finitize}{type}{dont\_finitize}
  2100 Specifies whether Nitpick should attempt to finitize a given type, which can be
  2101 a function type or an infinite ``shallow datatype'' (an infinite datatype whose
  2102 constructors don't appear in the problem).
  2103 
  2104 For function types, Nitpick performs a monotonicity analysis to detect functions
  2105 that are constant at all but finitely many points (e.g., finite sets) and treats
  2106 such occurrences specially, thereby increasing the precision. The option can
  2107 then take the following values:
  2108 
  2109 \begin{enum}
  2110 \item[$\bullet$] \textbf{\textit{false}}: Don't attempt to finitize the type.
  2111 \item[$\bullet$] \textbf{\textit{true}} or \textbf{\textit{smart}}: Finitize the
  2112 type wherever possible.
  2113 \end{enum}
  2114 
  2115 The semantics of the option is somewhat different for infinite shallow
  2116 datatypes:
  2117 
  2118 \begin{enum}
  2119 \item[$\bullet$] \textbf{\textit{true}}: Finitize the datatype. Since this is
  2120 unsound, counterexamples generated under these conditions are tagged as ``quasi
  2121 genuine.''
  2122 \item[$\bullet$] \textbf{\textit{false}}: Don't attempt to finitize the datatype.
  2123 \item[$\bullet$] \textbf{\textit{smart}}: Perform a monotonicity analysis to
  2124 detect whether the datatype can be safely finitized before finitizing it.
  2125 \end{enum}
  2126 
  2127 Like other drastic optimizations, finitization can sometimes prevent the
  2128 discovery of counterexamples.
  2129 
  2130 \nopagebreak
  2131 {\small See also \textit{box} (\S\ref{scope-of-search}), \textit{mono}
  2132 (\S\ref{scope-of-search}), \textit{verbose} (\S\ref{output-format}), and
  2133 \textit{debug} (\S\ref{output-format}).}
  2134 
  2135 \opsmart{finitize}{dont\_finitize}
  2136 Specifies the default finitization setting to use. This can be overridden on a
  2137 per-type basis using the \textit{finitize}~\qty{type} option described above.
  2138 
  2139 \opargboolorsmart{mono}{type}{non\_mono}
  2140 Specifies whether the given type should be considered monotonic when enumerating
  2141 scopes and finitizing types. If the option is set to \textit{smart}, Nitpick
  2142 performs a monotonicity check on the type. Setting this option to \textit{true}
  2143 can reduce the number of scopes tried, but it can also diminish the chance of
  2144 finding a counterexample, as demonstrated in \S\ref{scope-monotonicity}.
  2145 
  2146 \nopagebreak
  2147 {\small See also \textit{card} (\S\ref{scope-of-search}),
  2148 \textit{finitize} (\S\ref{scope-of-search}),
  2149 \textit{merge\_type\_vars} (\S\ref{scope-of-search}), and \textit{verbose}
  2150 (\S\ref{output-format}).}
  2151 
  2152 \opsmart{mono}{non\_mono}
  2153 Specifies the default monotonicity setting to use. This can be overridden on a
  2154 per-type basis using the \textit{mono}~\qty{type} option described above.
  2155 
  2156 \opfalse{merge\_type\_vars}{dont\_merge\_type\_vars}
  2157 Specifies whether type variables with the same sort constraints should be
  2158 merged. Setting this option to \textit{true} can reduce the number of scopes
  2159 tried and the size of the generated Kodkod formulas, but it also diminishes the
  2160 theoretical chance of finding a counterexample.
  2161 
  2162 {\small See also \textit{mono} (\S\ref{scope-of-search}).}
  2163 
  2164 \opargbool{std}{type}{non\_std}
  2165 Specifies whether the given (recursive) datatype should be given standard
  2166 models. Nonstandard models are unsound but can help debug structural induction
  2167 proofs, as explained in \S\ref{inductive-properties}.
  2168 
  2169 \optrue{std}{non\_std}
  2170 Specifies the default standardness to use. This can be overridden on a per-type
  2171 basis using the \textit{std}~\qty{type} option described above.
  2172 \end{enum}
  2173 
  2174 \subsection{Output Format}
  2175 \label{output-format}
  2176 
  2177 \begin{enum}
  2178 \opfalse{verbose}{quiet}
  2179 Specifies whether the \textbf{nitpick} command should explain what it does. This
  2180 option is useful to determine which scopes are tried or which SAT solver is
  2181 used. This option is implicitly disabled for automatic runs.
  2182 
  2183 \opfalse{debug}{no\_debug}
  2184 Specifies whether Nitpick should display additional debugging information beyond
  2185 what \textit{verbose} already displays. Enabling \textit{debug} also enables
  2186 \textit{verbose} and \textit{show\_all} behind the scenes. The \textit{debug}
  2187 option is implicitly disabled for automatic runs.
  2188 
  2189 \nopagebreak
  2190 {\small See also \textit{overlord} (\S\ref{mode-of-operation}) and
  2191 \textit{batch\_size} (\S\ref{optimizations}).}
  2192 
  2193 \optrue{show\_skolems}{hide\_skolem}
  2194 Specifies whether the values of Skolem constants should be displayed as part of
  2195 counterexamples. Skolem constants correspond to bound variables in the original
  2196 formula and usually help us to understand why the counterexample falsifies the
  2197 formula.
  2198 
  2199 \opfalse{show\_datatypes}{hide\_datatypes}
  2200 Specifies whether the subsets used to approximate (co)in\-duc\-tive datatypes should
  2201 be displayed as part of counterexamples. Such subsets are sometimes helpful when
  2202 investigating whether a potential counterexample is genuine or spurious, but
  2203 their potential for clutter is real.
  2204 
  2205 \opfalse{show\_consts}{hide\_consts}
  2206 Specifies whether the values of constants occurring in the formula (including
  2207 its axioms) should be displayed along with any counterexample. These values are
  2208 sometimes helpful when investigating why a counterexample is
  2209 genuine, but they can clutter the output.
  2210 
  2211 \opfalse{show\_all}{dont\_show\_all}
  2212 Enabling this option effectively enables \textit{show\_skolems},
  2213 \textit{show\_datatypes}, and \textit{show\_consts}.
  2214 
  2215 \opdefault{max\_potential}{int}{$\mathbf{1}$}
  2216 Specifies the maximum number of potential counterexamples to display. Setting
  2217 this option to 0 speeds up the search for a genuine counterexample. This option
  2218 is implicitly set to 0 for automatic runs. If you set this option to a value
  2219 greater than 1, you will need an incremental SAT solver, such as
  2220 \textit{MiniSat\_JNI} (recommended) and \textit{SAT4J}. Be aware that many of
  2221 the counterexamples may be identical.
  2222 
  2223 \nopagebreak
  2224 {\small See also \textit{check\_potential} (\S\ref{authentication}) and
  2225 \textit{sat\_solver} (\S\ref{optimizations}).}
  2226 
  2227 \opdefault{max\_genuine}{int}{$\mathbf{1}$}
  2228 Specifies the maximum number of genuine counterexamples to display. If you set
  2229 this option to a value greater than 1, you will need an incremental SAT solver,
  2230 such as \textit{MiniSat\_JNI} (recommended) and \textit{SAT4J}. Be aware that
  2231 many of the counterexamples may be identical.
  2232 
  2233 \nopagebreak
  2234 {\small See also \textit{check\_genuine} (\S\ref{authentication}) and
  2235 \textit{sat\_solver} (\S\ref{optimizations}).}
  2236 
  2237 \opnodefault{eval}{term\_list}
  2238 Specifies the list of terms whose values should be displayed along with
  2239 counterexamples. This option suffers from an ``observer effect'': Nitpick might
  2240 find different counterexamples for different values of this option.
  2241 
  2242 \oparg{format}{term}{int\_seq}
  2243 Specifies how to uncurry the value displayed for a variable or constant.
  2244 Uncurrying sometimes increases the readability of the output for high-arity
  2245 functions. For example, given the variable $y \mathbin{\Colon} {'a}\Rightarrow
  2246 {'b}\Rightarrow {'c}\Rightarrow {'d}\Rightarrow {'e}\Rightarrow {'f}\Rightarrow
  2247 {'g}$, setting \textit{format}~$y$ = 3 tells Nitpick to group the last three
  2248 arguments, as if the type had been ${'a}\Rightarrow {'b}\Rightarrow
  2249 {'c}\Rightarrow {'d}\times {'e}\times {'f}\Rightarrow {'g}$. In general, a list
  2250 of values $n_1,\ldots,n_k$ tells Nitpick to show the last $n_k$ arguments as an
  2251 $n_k$-tuple, the previous $n_{k-1}$ arguments as an $n_{k-1}$-tuple, and so on;
  2252 arguments that are not accounted for are left alone, as if the specification had
  2253 been $1,\ldots,1,n_1,\ldots,n_k$.
  2254 
  2255 \opdefault{format}{int\_seq}{$\mathbf{1}$}
  2256 Specifies the default format to use. Irrespective of the default format, the
  2257 extra arguments to a Skolem constant corresponding to the outer bound variables
  2258 are kept separated from the remaining arguments, the \textbf{for} arguments of
  2259 an inductive definitions are kept separated from the remaining arguments, and
  2260 the iteration counter of an unrolled inductive definition is shown alone. The
  2261 default format can be overridden on a per-variable or per-constant basis using
  2262 the \textit{format}~\qty{term} option described above.
  2263 \end{enum}
  2264 
  2265 \subsection{Authentication}
  2266 \label{authentication}
  2267 
  2268 \begin{enum}
  2269 \opfalse{check\_potential}{trust\_potential}
  2270 Specifies whether potential counterexamples should be given to Isabelle's
  2271 \textit{auto} tactic to assess their validity. If a potential counterexample is
  2272 shown to be genuine, Nitpick displays a message to this effect and terminates.
  2273 
  2274 \nopagebreak
  2275 {\small See also \textit{max\_potential} (\S\ref{output-format}).}
  2276 
  2277 \opfalse{check\_genuine}{trust\_genuine}
  2278 Specifies whether genuine and quasi genuine counterexamples should be given to
  2279 Isabelle's \textit{auto} tactic to assess their validity. If a ``genuine''
  2280 counterexample is shown to be spurious, the user is kindly asked to send a bug
  2281 report to the author at
  2282 \texttt{blan{\color{white}nospam}\kern-\wd\boxA{}chette@in.tum.de}.
  2283 
  2284 \nopagebreak
  2285 {\small See also \textit{max\_genuine} (\S\ref{output-format}).}
  2286 
  2287 \opnodefault{expect}{string}
  2288 Specifies the expected outcome, which must be one of the following:
  2289 
  2290 \begin{enum}
  2291 \item[$\bullet$] \textbf{\textit{genuine}}: Nitpick found a genuine counterexample.
  2292 \item[$\bullet$] \textbf{\textit{quasi\_genuine}}: Nitpick found a ``quasi
  2293 genuine'' counterexample (i.e., a counterexample that is genuine unless
  2294 it contradicts a missing axiom or a dangerous option was used inappropriately).
  2295 \item[$\bullet$] \textbf{\textit{potential}}: Nitpick found a potential counterexample.
  2296 \item[$\bullet$] \textbf{\textit{none}}: Nitpick found no counterexample.
  2297 \item[$\bullet$] \textbf{\textit{unknown}}: Nitpick encountered some problem (e.g.,
  2298 Kodkod ran out of memory).
  2299 \end{enum}
  2300 
  2301 Nitpick emits an error if the actual outcome differs from the expected outcome.
  2302 This option is useful for regression testing.
  2303 \end{enum}
  2304 
  2305 \subsection{Optimizations}
  2306 \label{optimizations}
  2307 
  2308 \def\cpp{C\nobreak\raisebox{.1ex}{+}\nobreak\raisebox{.1ex}{+}}
  2309 
  2310 \sloppy
  2311 
  2312 \begin{enum}
  2313 \opdefault{sat\_solver}{string}{smart}
  2314 Specifies which SAT solver to use. SAT solvers implemented in C or \cpp{} tend
  2315 to be faster than their Java counterparts, but they can be more difficult to
  2316 install. Also, if you set the \textit{max\_potential} (\S\ref{output-format}) or
  2317 \textit{max\_genuine} (\S\ref{output-format}) option to a value greater than 1,
  2318 you will need an incremental SAT solver, such as \textit{MiniSat\_JNI}
  2319 (recommended) or \textit{SAT4J}.
  2320 
  2321 The supported solvers are listed below:
  2322 
  2323 \let\foo
  2324 
  2325 \begin{enum}
  2326 
  2327 \item[$\bullet$] \textbf{\textit{MiniSat}}: MiniSat is an efficient solver
  2328 written in \cpp{}. To use MiniSat, set the environment variable
  2329 \texttt{MINISAT\_HOME} to the directory that contains the \texttt{minisat}
  2330 executable.%
  2331 \footnote{Important note for Cygwin users: The path must be specified using
  2332 native Windows syntax. Make sure to escape backslashes properly.%
  2333 \label{cygwin-paths}}
  2334 The \cpp{} sources and executables for MiniSat are available at
  2335 \url{http://minisat.se/MiniSat.html}. Nitpick has been tested with versions 1.14
  2336 and 2.0 beta (2007-07-21).
  2337 
  2338 \item[$\bullet$] \textbf{\textit{MiniSat\_JNI}}: The JNI (Java Native Interface)
  2339 version of MiniSat is bundled with Kodkodi and is precompiled for the major
  2340 platforms. It is also available from \texttt{native\-solver.\allowbreak tgz},
  2341 which you will find on Kodkod's web site \cite{kodkod-2009}. Unlike the standard
  2342 version of MiniSat, the JNI version can be used incrementally.
  2343 
  2344 \item[$\bullet$] \textbf{\textit{PicoSAT}}: PicoSAT is an efficient solver
  2345 written in C. You can install a standard version of
  2346 PicoSAT and set the environment variable \texttt{PICOSAT\_HOME} to the directory
  2347 that contains the \texttt{picosat} executable.%
  2348 \footref{cygwin-paths}
  2349 The C sources for PicoSAT are
  2350 available at \url{http://fmv.jku.at/picosat/} and are also bundled with Kodkodi.
  2351 Nitpick has been tested with version 913.
  2352 
  2353 \item[$\bullet$] \textbf{\textit{zChaff}}: zChaff is an efficient solver written
  2354 in \cpp{}. To use zChaff, set the environment variable \texttt{ZCHAFF\_HOME} to
  2355 the directory that contains the \texttt{zchaff} executable.%
  2356 \footref{cygwin-paths}
  2357 The \cpp{} sources and executables for zChaff are available at
  2358 \url{http://www.princeton.edu/~chaff/zchaff.html}. Nitpick has been tested with
  2359 versions 2004-05-13, 2004-11-15, and 2007-03-12.
  2360 
  2361 \item[$\bullet$] \textbf{\textit{zChaff\_JNI}}: The JNI version of zChaff is
  2362 bundled with Kodkodi and is precompiled for the major
  2363 platforms. It is also available from \texttt{native\-solver.\allowbreak tgz},
  2364 which you will find on Kodkod's web site \cite{kodkod-2009}.
  2365 
  2366 \item[$\bullet$] \textbf{\textit{RSat}}: RSat is an efficient solver written in
  2367 \cpp{}. To use RSat, set the environment variable \texttt{RSAT\_HOME} to the
  2368 directory that contains the \texttt{rsat} executable.%
  2369 \footref{cygwin-paths}
  2370 The \cpp{} sources for RSat are available at
  2371 \url{http://reasoning.cs.ucla.edu/rsat/}. Nitpick has been tested with version
  2372 2.01.
  2373 
  2374 \item[$\bullet$] \textbf{\textit{BerkMin}}: BerkMin561 is an efficient solver
  2375 written in C. To use BerkMin, set the environment variable
  2376 \texttt{BERKMIN\_HOME} to the directory that contains the \texttt{BerkMin561}
  2377 executable.\footref{cygwin-paths}
  2378 The BerkMin executables are available at
  2379 \url{http://eigold.tripod.com/BerkMin.html}.
  2380 
  2381 \item[$\bullet$] \textbf{\textit{BerkMin\_Alloy}}: Variant of BerkMin that is
  2382 included with Alloy 4 and calls itself ``sat56'' in its banner text. To use this
  2383 version of BerkMin, set the environment variable
  2384 \texttt{BERKMINALLOY\_HOME} to the directory that contains the \texttt{berkmin}
  2385 executable.%
  2386 \footref{cygwin-paths}
  2387 
  2388 \item[$\bullet$] \textbf{\textit{Jerusat}}: Jerusat 1.3 is an efficient solver
  2389 written in C. To use Jerusat, set the environment variable
  2390 \texttt{JERUSAT\_HOME} to the directory that contains the \texttt{Jerusat1.3}
  2391 executable.%
  2392 \footref{cygwin-paths}
  2393 The C sources for Jerusat are available at
  2394 \url{http://www.cs.tau.ac.il/~ale1/Jerusat1.3.tgz}.
  2395 
  2396 \item[$\bullet$] \textbf{\textit{SAT4J}}: SAT4J is a reasonably efficient solver
  2397 written in Java that can be used incrementally. It is bundled with Kodkodi and
  2398 requires no further installation or configuration steps. Do not attempt to
  2399 install the official SAT4J packages, because their API is incompatible with
  2400 Kodkod.
  2401 
  2402 \item[$\bullet$] \textbf{\textit{SAT4J\_Light}}: Variant of SAT4J that is
  2403 optimized for small problems. It can also be used incrementally.
  2404 
  2405 \item[$\bullet$] \textbf{\textit{HaifaSat}}: HaifaSat 1.0 beta is an
  2406 experimental solver written in \cpp. To use HaifaSat, set the environment
  2407 variable \texttt{HAIFASAT\_\allowbreak HOME} to the directory that contains the
  2408 \texttt{HaifaSat} executable.%
  2409 \footref{cygwin-paths}
  2410 The \cpp{} sources for HaifaSat are available at
  2411 \url{http://cs.technion.ac.il/~gershman/HaifaSat.htm}.
  2412 
  2413 \item[$\bullet$] \textbf{\textit{smart}}: If \textit{sat\_solver} is set to
  2414 \textit{smart}, Nitpick selects the first solver among MiniSat,
  2415 PicoSAT, zChaff, RSat, BerkMin, BerkMin\_Alloy, Jerusat, MiniSat\_JNI, and zChaff\_JNI
  2416 that is recognized by Isabelle. If none is found, it falls back on SAT4J, which
  2417 should always be available. If \textit{verbose} (\S\ref{output-format}) is
  2418 enabled, Nitpick displays which SAT solver was chosen.
  2419 \end{enum}
  2420 \fussy
  2421 
  2422 \opdefault{batch\_size}{int\_or\_smart}{smart}
  2423 Specifies the maximum number of Kodkod problems that should be lumped together
  2424 when invoking Kodkodi. Each problem corresponds to one scope. Lumping problems
  2425 together ensures that Kodkodi is launched less often, but it makes the verbose
  2426 output less readable and is sometimes detrimental to performance. If
  2427 \textit{batch\_size} is set to \textit{smart}, the actual value used is 1 if
  2428 \textit{debug} (\S\ref{output-format}) is set and 64 otherwise.
  2429 
  2430 \optrue{destroy\_constrs}{dont\_destroy\_constrs}
  2431 Specifies whether formulas involving (co)in\-duc\-tive datatype constructors should
  2432 be rewritten to use (automatically generated) discriminators and destructors.
  2433 This optimization can drastically reduce the size of the Boolean formulas given
  2434 to the SAT solver.
  2435 
  2436 \nopagebreak
  2437 {\small See also \textit{debug} (\S\ref{output-format}).}
  2438 
  2439 \optrue{specialize}{dont\_specialize}
  2440 Specifies whether functions invoked with static arguments should be specialized.
  2441 This optimization can drastically reduce the search space, especially for
  2442 higher-order functions.
  2443 
  2444 \nopagebreak
  2445 {\small See also \textit{debug} (\S\ref{output-format}) and
  2446 \textit{show\_consts} (\S\ref{output-format}).}
  2447 
  2448 \optrue{star\_linear\_preds}{dont\_star\_linear\_preds}
  2449 Specifies whether Nitpick should use Kodkod's transitive closure operator to
  2450 encode non-well-founded ``linear inductive predicates,'' i.e., inductive
  2451 predicates for which each the predicate occurs in at most one assumption of each
  2452 introduction rule. Using the reflexive transitive closure is in principle
  2453 equivalent to setting \textit{iter} to the cardinality of the predicate's
  2454 domain, but it is usually more efficient.
  2455 
  2456 {\small See also \textit{wf} (\S\ref{scope-of-search}), \textit{debug}
  2457 (\S\ref{output-format}), and \textit{iter} (\S\ref{scope-of-search}).}
  2458 
  2459 \optrue{fast\_descrs}{full\_descrs}
  2460 Specifies whether Nitpick should optimize the definite and indefinite
  2461 description operators (THE and SOME). The optimized versions usually help
  2462 Nitpick generate more counterexamples or at least find them faster, but only the
  2463 unoptimized versions are complete when all types occurring in the formula are
  2464 finite.
  2465 
  2466 {\small See also \textit{debug} (\S\ref{output-format}).}
  2467 
  2468 \optrue{peephole\_optim}{no\_peephole\_optim}
  2469 Specifies whether Nitpick should simplify the generated Kodkod formulas using a
  2470 peephole optimizer. These optimizations can make a significant difference.
  2471 Unless you are tracking down a bug in Nitpick or distrust the peephole
  2472 optimizer, you should leave this option enabled.
  2473 
  2474 \opdefault{max\_threads}{int}{0}
  2475 Specifies the maximum number of threads to use in Kodkod. If this option is set
  2476 to 0, Kodkod will compute an appropriate value based on the number of processor
  2477 cores available.
  2478 
  2479 \nopagebreak
  2480 {\small See also \textit{batch\_size} (\S\ref{optimizations}) and
  2481 \textit{timeout} (\S\ref{timeouts}).}
  2482 \end{enum}
  2483 
  2484 \subsection{Timeouts}
  2485 \label{timeouts}
  2486 
  2487 \begin{enum}
  2488 \opdefault{timeout}{time}{$\mathbf{30}$ s}
  2489 Specifies the maximum amount of time that the \textbf{nitpick} command should
  2490 spend looking for a counterexample. Nitpick tries to honor this constraint as
  2491 well as it can but offers no guarantees. For automatic runs,
  2492 \textit{timeout} is ignored; instead, Auto Quickcheck and Auto Nitpick share
  2493 a time slot whose length is specified by the ``Auto Counterexample Time
  2494 Limit'' option in Proof General.
  2495 
  2496 \nopagebreak
  2497 {\small See also \textit{max\_threads} (\S\ref{optimizations}).}
  2498 
  2499 \opdefault{tac\_timeout}{time}{$\mathbf{500}$\,ms}
  2500 Specifies the maximum amount of time that the \textit{auto} tactic should use
  2501 when checking a counterexample, and similarly that \textit{lexicographic\_order}
  2502 and \textit{size\_change} should use when checking whether a (co)in\-duc\-tive
  2503 predicate is well-founded. Nitpick tries to honor this constraint as well as it
  2504 can but offers no guarantees.
  2505 
  2506 \nopagebreak
  2507 {\small See also \textit{wf} (\S\ref{scope-of-search}),
  2508 \textit{check\_potential} (\S\ref{authentication}),
  2509 and \textit{check\_genuine} (\S\ref{authentication}).}
  2510 \end{enum}
  2511 
  2512 \section{Attribute Reference}
  2513 \label{attribute-reference}
  2514 
  2515 Nitpick needs to consider the definitions of all constants occurring in a
  2516 formula in order to falsify it. For constants introduced using the
  2517 \textbf{definition} command, the definition is simply the associated
  2518 \textit{\_def} axiom. In contrast, instead of using the internal representation
  2519 of functions synthesized by Isabelle's \textbf{primrec}, \textbf{function}, and
  2520 \textbf{nominal\_primrec} packages, Nitpick relies on the more natural
  2521 equational specification entered by the user.
  2522 
  2523 Behind the scenes, Isabelle's built-in packages and theories rely on the
  2524 following attributes to affect Nitpick's behavior:
  2525 
  2526 \begin{enum}
  2527 \flushitem{\textit{nitpick\_def}}
  2528 
  2529 \nopagebreak
  2530 This attribute specifies an alternative definition of a constant. The
  2531 alternative definition should be logically equivalent to the constant's actual
  2532 axiomatic definition and should be of the form
  2533 
  2534 \qquad $c~{?}x_1~\ldots~{?}x_n \,\equiv\, t$,
  2535 
  2536 where ${?}x_1, \ldots, {?}x_n$ are distinct variables and $c$ does not occur in
  2537 $t$.
  2538 
  2539 \flushitem{\textit{nitpick\_simp}}
  2540 
  2541 \nopagebreak
  2542 This attribute specifies the equations that constitute the specification of a
  2543 constant. For functions defined using the \textbf{primrec}, \textbf{function},
  2544 and \textbf{nominal\_\allowbreak primrec} packages, this corresponds to the
  2545 \textit{simps} rules. The equations must be of the form
  2546 
  2547 \qquad $c~t_1~\ldots\ t_n \,=\, u.$
  2548 
  2549 \flushitem{\textit{nitpick\_psimp}}
  2550 
  2551 \nopagebreak
  2552 This attribute specifies the equations that constitute the partial specification
  2553 of a constant. For functions defined using the \textbf{function} package, this
  2554 corresponds to the \textit{psimps} rules. The conditional equations must be of
  2555 the form
  2556 
  2557 \qquad $\lbrakk P_1;\> \ldots;\> P_m\rbrakk \,\Longrightarrow\, c\ t_1\ \ldots\ t_n \,=\, u$.
  2558 
  2559 \flushitem{\textit{nitpick\_intro}}
  2560 
  2561 \nopagebreak
  2562 This attribute specifies the introduction rules of a (co)in\-duc\-tive predicate.
  2563 For predicates defined using the \textbf{inductive} or \textbf{coinductive}
  2564 command, this corresponds to the \textit{intros} rules. The introduction rules
  2565 must be of the form
  2566 
  2567 \qquad $\lbrakk P_1;\> \ldots;\> P_m;\> M~(c\ t_{11}\ \ldots\ t_{1n});\>
  2568 \ldots;\> M~(c\ t_{k1}\ \ldots\ t_{kn})\rbrakk$ \\
  2569 \hbox{}\qquad ${\Longrightarrow}\;\, c\ u_1\ \ldots\ u_n$,
  2570 
  2571 where the $P_i$'s are side conditions that do not involve $c$ and $M$ is an
  2572 optional monotonic operator. The order of the assumptions is irrelevant.
  2573 
  2574 \flushitem{\textit{nitpick\_choice\_spec}}
  2575 
  2576 \nopagebreak
  2577 This attribute specifies the (free-form) specification of a constant defined
  2578 using the \hbox{(\textbf{ax\_})}\allowbreak\textbf{specification} command.
  2579 
  2580 \end{enum}
  2581 
  2582 When faced with a constant, Nitpick proceeds as follows:
  2583 
  2584 \begin{enum}
  2585 \item[1.] If the \textit{nitpick\_simp} set associated with the constant
  2586 is not empty, Nitpick uses these rules as the specification of the constant.
  2587 
  2588 \item[2.] Otherwise, if the \textit{nitpick\_psimp} set associated with
  2589 the constant is not empty, it uses these rules as the specification of the
  2590 constant.
  2591 
  2592 \item[3.] Otherwise, if the constant was defined using the
  2593 \hbox{(\textbf{ax\_})}\allowbreak\textbf{specification} command and the
  2594 \textit{nitpick\_choice\_spec} set associated with the constant is not empty, it
  2595 uses these theorems as the specification of the constant.
  2596 
  2597 \item[4.] Otherwise, it looks up the definition of the constant:
  2598 
  2599 \begin{enum}
  2600 \item[1.] If the \textit{nitpick\_def} set associated with the constant
  2601 is not empty, it uses the latest rule added to the set as the definition of the
  2602 constant; otherwise it uses the actual definition axiom.
  2603 \item[2.] If the definition is of the form
  2604 
  2605 \qquad $c~{?}x_1~\ldots~{?}x_m \,\equiv\, \lambda y_1~\ldots~y_n.\; \textit{lfp}~(\lambda f.\; t)$,
  2606 
  2607 then Nitpick assumes that the definition was made using an inductive package and
  2608 based on the introduction rules marked with \textit{nitpick\_\allowbreak
  2609 \allowbreak intros} tries to determine whether the definition is
  2610 well-founded.
  2611 \end{enum}
  2612 \end{enum}
  2613 
  2614 As an illustration, consider the inductive definition
  2615 
  2616 \prew
  2617 \textbf{inductive}~\textit{odd}~\textbf{where} \\
  2618 ``\textit{odd}~1'' $\,\mid$ \\
  2619 ``\textit{odd}~$n\,\Longrightarrow\, \textit{odd}~(\textit{Suc}~(\textit{Suc}~n))$''
  2620 \postw
  2621 
  2622 Isabelle automatically attaches the \textit{nitpick\_intro} attribute to
  2623 the above rules. Nitpick then uses the \textit{lfp}-based definition in
  2624 conjunction with these rules. To override this, we can specify an alternative
  2625 definition as follows:
  2626 
  2627 \prew
  2628 \textbf{lemma} $\mathit{odd\_def}'$ [\textit{nitpick\_def}]:\kern.4em ``$\textit{odd}~n \,\equiv\, n~\textrm{mod}~2 = 1$''
  2629 \postw
  2630 
  2631 Nitpick then expands all occurrences of $\mathit{odd}~n$ to $n~\textrm{mod}~2
  2632 = 1$. Alternatively, we can specify an equational specification of the constant:
  2633 
  2634 \prew
  2635 \textbf{lemma} $\mathit{odd\_simp}'$ [\textit{nitpick\_simp}]:\kern.4em ``$\textit{odd}~n = (n~\textrm{mod}~2 = 1)$''
  2636 \postw
  2637 
  2638 Such tweaks should be done with great care, because Nitpick will assume that the
  2639 constant is completely defined by its equational specification. For example, if
  2640 you make ``$\textit{odd}~(2 * k + 1)$'' a \textit{nitpick\_simp} rule and neglect to provide rules to handle the $2 * k$ case, Nitpick will define
  2641 $\textit{odd}~n$ arbitrarily for even values of $n$. The \textit{debug}
  2642 (\S\ref{output-format}) option is extremely useful to understand what is going
  2643 on when experimenting with \textit{nitpick\_} attributes.
  2644 
  2645 \section{Standard ML Interface}
  2646 \label{standard-ml-interface}
  2647 
  2648 Nitpick provides a rich Standard ML interface used mainly for internal purposes
  2649 and debugging. Among the most interesting functions exported by Nitpick are
  2650 those that let you invoke the tool programmatically and those that let you
  2651 register and unregister custom coinductive datatypes as well as term
  2652 postprocessors.
  2653 
  2654 \subsection{Invocation of Nitpick}
  2655 \label{invocation-of-nitpick}
  2656 
  2657 The \textit{Nitpick} structure offers the following functions for invoking your
  2658 favorite counterexample generator:
  2659 
  2660 \prew
  2661 $\textbf{val}\,~\textit{pick\_nits\_in\_term} : \\
  2662 \hbox{}\quad\textit{Proof.state} \rightarrow \textit{params} \rightarrow \textit{bool} \rightarrow \textit{term~list} \rightarrow \textit{term} \\
  2663 \hbox{}\quad{\rightarrow}\; \textit{string} * \textit{Proof.state}$ \\
  2664 $\textbf{val}\,~\textit{pick\_nits\_in\_subgoal} : \\
  2665 \hbox{}\quad\textit{Proof.state} \rightarrow \textit{params} \rightarrow \textit{bool} \rightarrow \textit{int} \rightarrow \textit{string} * \textit{Proof.state}$
  2666 \postw
  2667 
  2668 The return value is a new proof state paired with an outcome string
  2669 (``genuine'', ``quasi\_genuine'', ``potential'', ``none'', or ``unknown''). The
  2670 \textit{params} type is a large record that lets you set Nitpick's options. The
  2671 current default options can be retrieved by calling the following function
  2672 defined in the \textit{Nitpick\_Isar} structure:
  2673 
  2674 \prew
  2675 $\textbf{val}\,~\textit{default\_params} :\,
  2676 \textit{theory} \rightarrow (\textit{string} * \textit{string})~\textit{list} \rightarrow \textit{params}$
  2677 \postw
  2678 
  2679 The second argument lets you override option values before they are parsed and
  2680 put into a \textit{params} record. Here is an example:
  2681 
  2682 \prew
  2683 $\textbf{val}\,~\textit{params} = \textit{Nitpick\_Isar.default\_params}~\textit{thy}~[(\textrm{``}\textrm{timeout\/}\textrm{''},\, \textrm{``}\textrm{none}\textrm{''})]$ \\
  2684 $\textbf{val}\,~(\textit{outcome},\, \textit{state}') = \textit{Nitpick.pick\_nits\_in\_subgoal}~\begin{aligned}[t]
  2685 & \textit{state}~\textit{params}~\textit{false} \\[-2pt]
  2686 & \textit{subgoal}\end{aligned}$
  2687 \postw
  2688 
  2689 \let\antiq=\textrm
  2690 
  2691 \subsection{Registration of Coinductive Datatypes}
  2692 \label{registration-of-coinductive-datatypes}
  2693 
  2694 If you have defined a custom coinductive datatype, you can tell Nitpick about
  2695 it, so that it can use an efficient Kodkod axiomatization similar to the one it
  2696 uses for lazy lists. The interface for registering and unregistering coinductive
  2697 datatypes consists of the following pair of functions defined in the
  2698 \textit{Nitpick} structure:
  2699 
  2700 \prew
  2701 $\textbf{val}\,~\textit{register\_codatatype} :\,
  2702 \textit{typ} \rightarrow \textit{string} \rightarrow \textit{styp~list} \rightarrow \textit{theory} \rightarrow \textit{theory}$ \\
  2703 $\textbf{val}\,~\textit{unregister\_codatatype} :\,
  2704 \textit{typ} \rightarrow \textit{theory} \rightarrow \textit{theory}$
  2705 \postw
  2706 
  2707 The type $'a~\textit{llist}$ of lazy lists is already registered; had it
  2708 not been, you could have told Nitpick about it by adding the following line
  2709 to your theory file:
  2710 
  2711 \prew
  2712 $\textbf{setup}~\,\{{*}\,~\!\begin{aligned}[t]
  2713 & \textit{Nitpick.register\_codatatype} \\[-2pt]
  2714 & \qquad @\{\antiq{typ}~``\kern1pt'a~\textit{llist\/}\textrm{''}\}~@\{\antiq{const\_name}~ \textit{llist\_case}\} \\[-2pt] %% TYPESETTING
  2715 & \qquad (\textit{map}~\textit{dest\_Const}~[@\{\antiq{term}~\textit{LNil}\},\, @\{\antiq{term}~\textit{LCons}\}])\,\ {*}\}\end{aligned}$
  2716 \postw
  2717 
  2718 The \textit{register\_codatatype} function takes a coinductive type, its case
  2719 function, and the list of its constructors. The case function must take its
  2720 arguments in the order that the constructors are listed. If no case function
  2721 with the correct signature is available, simply pass the empty string.
  2722 
  2723 On the other hand, if your goal is to cripple Nitpick, add the following line to
  2724 your theory file and try to check a few conjectures about lazy lists:
  2725 
  2726 \prew
  2727 $\textbf{setup}~\,\{{*}\,~\textit{Nitpick.unregister\_codatatype}~@\{\antiq{typ}~``
  2728 \kern1pt'a~\textit{list\/}\textrm{''}\}\ \,{*}\}$
  2729 \postw
  2730 
  2731 Inductive datatypes can be registered as coinductive datatypes, given
  2732 appropriate coinductive constructors. However, doing so precludes
  2733 the use of the inductive constructors---Nitpick will generate an error if they
  2734 are needed.
  2735 
  2736 \subsection{Registration of Term Postprocessors}
  2737 \label{registration-of-term-postprocessors}
  2738 
  2739 It is possible to change the output of any term that Nitpick considers a
  2740 datatype by registering a term postprocessor. The interface for registering and
  2741 unregistering postprocessors consists of the following pair of functions defined
  2742 in the \textit{Nitpick} structure:
  2743 
  2744 \prew
  2745 $\textbf{type}\,~\textit{term\_postprocessor}\,~{=} {}$ \\
  2746 $\hbox{}\quad\textit{Proof.context} \rightarrow \textit{string} \rightarrow (\textit{typ} \rightarrow \textit{term~list\/}) \rightarrow \textit{typ} \rightarrow \textit{term} \rightarrow \textit{term}$ \\
  2747 $\textbf{val}\,~\textit{register\_term\_postprocessors} : {}$ \\
  2748 $\hbox{}\quad\textit{typ} \rightarrow \textit{term\_postprocessor} \rightarrow \textit{theory} \rightarrow \textit{theory}$ \\
  2749 $\textbf{val}\,~\textit{unregister\_term\_postprocessors} :\,
  2750 \textit{typ} \rightarrow \textit{theory} \rightarrow \textit{theory}$
  2751 \postw
  2752 
  2753 \S\ref{typedefs-quotient-types-records-rationals-and-reals} and
  2754 \texttt{src/HOL/Library/Multiset.thy} illustrate this feature in context.
  2755 
  2756 \section{Known Bugs and Limitations}
  2757 \label{known-bugs-and-limitations}
  2758 
  2759 Here are the known bugs and limitations in Nitpick at the time of writing:
  2760 
  2761 \begin{enum}
  2762 \item[$\bullet$] Underspecified functions defined using the \textbf{primrec},
  2763 \textbf{function}, or \textbf{nominal\_\allowbreak primrec} packages can lead
  2764 Nitpick to generate spurious counterexamples for theorems that refer to values
  2765 for which the function is not defined. For example:
  2766 
  2767 \prew
  2768 \textbf{primrec} \textit{prec} \textbf{where} \\
  2769 ``$\textit{prec}~(\textit{Suc}~n) = n$'' \\[2\smallskipamount]
  2770 \textbf{lemma} ``$\textit{prec}~0 = \undef$'' \\
  2771 \textbf{nitpick} \\[2\smallskipamount]
  2772 \quad{\slshape Nitpick found a counterexample for \textit{card nat}~= 2: 
  2773 \nopagebreak
  2774 \\[2\smallskipamount]
  2775 \hbox{}\qquad Empty assignment} \nopagebreak\\[2\smallskipamount]
  2776 \textbf{by}~(\textit{auto simp}:~\textit{prec\_def})
  2777 \postw
  2778 
  2779 Such theorems are considered bad style because they rely on the internal
  2780 representation of functions synthesized by Isabelle, which is an implementation
  2781 detail.
  2782 
  2783 \item[$\bullet$] Axioms that restrict the possible values of the
  2784 \textit{undefined} constant are in general ignored.
  2785 
  2786 \item[$\bullet$] Nitpick maintains a global cache of wellfoundedness conditions,
  2787 which can become invalid if you change the definition of an inductive predicate
  2788 that is registered in the cache. To clear the cache,
  2789 run Nitpick with the \textit{tac\_timeout} option set to a new value (e.g.,
  2790 501$\,\textit{ms}$).
  2791 
  2792 \item[$\bullet$] Nitpick produces spurious counterexamples when invoked after a
  2793 \textbf{guess} command in a structured proof.
  2794 
  2795 \item[$\bullet$] The \textit{nitpick\_} attributes and the
  2796 \textit{Nitpick.register\_} functions can cause havoc if used improperly.
  2797 
  2798 \item[$\bullet$] Although this has never been observed, arbitrary theorem
  2799 morphisms could possibly confuse Nitpick, resulting in spurious counterexamples.
  2800 
  2801 \item[$\bullet$] All constants, types, free variables, and schematic variables
  2802 whose names start with \textit{Nitpick}{.} are reserved for internal use.
  2803 \end{enum}
  2804 
  2805 \let\em=\sl
  2806 \bibliography{../manual}{}
  2807 \bibliographystyle{abbrv}
  2808 
  2809 \end{document}