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