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