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