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