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