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