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