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