doc-src/IsarRef/Thy/document/HOL_Specific.tex
author wenzelm
Mon, 02 May 2011 20:34:34 +0200
changeset 43497 6ac8c55c657e
parent 43488 77d239840285
child 43498 8749742785b8
permissions -rw-r--r--
eliminated some duplicate "def" positions;
     1 %
     2 \begin{isabellebody}%
     3 \def\isabellecontext{HOL{\isaliteral{5F}{\isacharunderscore}}Specific}%
     4 %
     5 \isadelimtheory
     6 %
     7 \endisadelimtheory
     8 %
     9 \isatagtheory
    10 \isacommand{theory}\isamarkupfalse%
    11 \ HOL{\isaliteral{5F}{\isacharunderscore}}Specific\isanewline
    12 \isakeyword{imports}\ Main\isanewline
    13 \isakeyword{begin}%
    14 \endisatagtheory
    15 {\isafoldtheory}%
    16 %
    17 \isadelimtheory
    18 %
    19 \endisadelimtheory
    20 %
    21 \isamarkupchapter{Isabelle/HOL \label{ch:hol}%
    22 }
    23 \isamarkuptrue%
    24 %
    25 \isamarkupsection{Typedef axiomatization \label{sec:hol-typedef}%
    26 }
    27 \isamarkuptrue%
    28 %
    29 \begin{isamarkuptext}%
    30 \begin{matharray}{rcl}
    31     \indexdef{HOL}{command}{typedef}\hypertarget{command.HOL.typedef}{\hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
    32   \end{matharray}
    33 
    34   \begin{railoutput}
    35 \rail@begin{2}{\isa{}}
    36 \rail@term{\hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}}[]
    37 \rail@bar
    38 \rail@nextbar{1}
    39 \rail@nont{\isa{altname}}[]
    40 \rail@endbar
    41 \rail@nont{\isa{abstype}}[]
    42 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
    43 \rail@nont{\isa{repset}}[]
    44 \rail@end
    45 \rail@begin{3}{\isa{altname}}
    46 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
    47 \rail@bar
    48 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
    49 \rail@nextbar{1}
    50 \rail@term{\isa{\isakeyword{open}}}[]
    51 \rail@nextbar{2}
    52 \rail@term{\isa{\isakeyword{open}}}[]
    53 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
    54 \rail@endbar
    55 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
    56 \rail@end
    57 \rail@begin{2}{\isa{abstype}}
    58 \rail@nont{\hyperlink{syntax.typespecsorts}{\mbox{\isa{typespecsorts}}}}[]
    59 \rail@bar
    60 \rail@nextbar{1}
    61 \rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
    62 \rail@endbar
    63 \rail@end
    64 \rail@begin{2}{\isa{repset}}
    65 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
    66 \rail@bar
    67 \rail@nextbar{1}
    68 \rail@term{\isa{\isakeyword{morphisms}}}[]
    69 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
    70 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
    71 \rail@endbar
    72 \rail@end
    73 \end{railoutput}
    74 
    75 
    76   \begin{description}
    77 
    78   \item \hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{29}{\isacharparenright}}\ t\ {\isaliteral{3D}{\isacharequal}}\ A{\isaliteral{22}{\isachardoublequote}}}
    79   axiomatizes a Gordon/HOL-style type definition in the background
    80   theory of the current context, depending on a non-emptiness result
    81   of the set \isa{A} (which needs to be proven interactively).
    82 
    83   The raw type may not depend on parameters or assumptions of the
    84   context --- this is logically impossible in Isabelle/HOL --- but the
    85   non-emptiness property can be local, potentially resulting in
    86   multiple interpretations in target contexts.  Thus the established
    87   bijection between the representing set \isa{A} and the new type
    88   \isa{t} may semantically depend on local assumptions.
    89 
    90   By default, \hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}} defines both a type \isa{t}
    91   and a set (term constant) of the same name, unless an alternative
    92   base name is given in parentheses, or the ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}open{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}''
    93   declaration is used to suppress a separate constant definition
    94   altogether.  The injection from type to set is called \isa{Rep{\isaliteral{5F}{\isacharunderscore}}t},
    95   its inverse \isa{Abs{\isaliteral{5F}{\isacharunderscore}}t} --- this may be changed via an explicit
    96   \hyperlink{keyword.HOL.morphisms}{\mbox{\isa{\isakeyword{morphisms}}}} declaration.
    97 
    98   Theorems \isa{Rep{\isaliteral{5F}{\isacharunderscore}}t}, \isa{Rep{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}inverse}, and \isa{Abs{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}inverse} provide the most basic characterization as a
    99   corresponding injection/surjection pair (in both directions).  Rules
   100   \isa{Rep{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}inject} and \isa{Abs{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}inject} provide a slightly
   101   more convenient view on the injectivity part, suitable for automated
   102   proof tools (e.g.\ in \hyperlink{attribute.simp}{\mbox{\isa{simp}}} or \hyperlink{attribute.iff}{\mbox{\isa{iff}}}
   103   declarations).  Rules \isa{Rep{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}cases}/\isa{Rep{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}induct}, and
   104   \isa{Abs{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}cases}/\isa{Abs{\isaliteral{5F}{\isacharunderscore}}t{\isaliteral{5F}{\isacharunderscore}}induct} provide alternative views
   105   on surjectivity; these are already declared as set or type rules for
   106   the generic \hyperlink{method.cases}{\mbox{\isa{cases}}} and \hyperlink{method.induct}{\mbox{\isa{induct}}} methods.
   107 
   108   An alternative name for the set definition (and other derived
   109   entities) may be specified in parentheses; the default is to use
   110   \isa{t} as indicated before.
   111 
   112   \end{description}%
   113 \end{isamarkuptext}%
   114 \isamarkuptrue%
   115 %
   116 \isamarkupsection{Adhoc tuples%
   117 }
   118 \isamarkuptrue%
   119 %
   120 \begin{isamarkuptext}%
   121 \begin{matharray}{rcl}
   122     \indexdef{HOL}{attribute}{split\_format}\hypertarget{attribute.HOL.split-format}{\hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{attribute} \\
   123   \end{matharray}
   124 
   125   \begin{railoutput}
   126 \rail@begin{2}{\isa{}}
   127 \rail@term{\hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}}[]
   128 \rail@bar
   129 \rail@nextbar{1}
   130 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   131 \rail@term{\isa{complete}}[]
   132 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   133 \rail@endbar
   134 \rail@end
   135 \end{railoutput}
   136 
   137 
   138   \begin{description}
   139 
   140   \item \hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isaliteral{5F}{\isacharunderscore}}format}}}\ \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}complete{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} causes
   141   arguments in function applications to be represented canonically
   142   according to their tuple type structure.
   143 
   144   Note that this operation tends to invent funny names for new local
   145   parameters introduced.
   146 
   147   \end{description}%
   148 \end{isamarkuptext}%
   149 \isamarkuptrue%
   150 %
   151 \isamarkupsection{Records \label{sec:hol-record}%
   152 }
   153 \isamarkuptrue%
   154 %
   155 \begin{isamarkuptext}%
   156 In principle, records merely generalize the concept of tuples, where
   157   components may be addressed by labels instead of just position.  The
   158   logical infrastructure of records in Isabelle/HOL is slightly more
   159   advanced, though, supporting truly extensible record schemes.  This
   160   admits operations that are polymorphic with respect to record
   161   extension, yielding ``object-oriented'' effects like (single)
   162   inheritance.  See also \cite{NaraschewskiW-TPHOLs98} for more
   163   details on object-oriented verification and record subtyping in HOL.%
   164 \end{isamarkuptext}%
   165 \isamarkuptrue%
   166 %
   167 \isamarkupsubsection{Basic concepts%
   168 }
   169 \isamarkuptrue%
   170 %
   171 \begin{isamarkuptext}%
   172 Isabelle/HOL supports both \emph{fixed} and \emph{schematic} records
   173   at the level of terms and types.  The notation is as follows:
   174 
   175   \begin{center}
   176   \begin{tabular}{l|l|l}
   177     & record terms & record types \\ \hline
   178     fixed & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ B{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   179     schematic & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3D}{\isacharequal}}\ m{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} &
   180       \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ B{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ M{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   181   \end{tabular}
   182   \end{center}
   183 
   184   \noindent The ASCII representation of \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} is \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{7C}{\isacharbar}}\ x\ {\isaliteral{3D}{\isacharequal}}\ a\ {\isaliteral{7C}{\isacharbar}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}.
   185 
   186   A fixed record \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} has field \isa{x} of value
   187   \isa{a} and field \isa{y} of value \isa{b}.  The corresponding
   188   type is \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ B{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}, assuming that \isa{{\isaliteral{22}{\isachardoublequote}}a\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ A{\isaliteral{22}{\isachardoublequote}}}
   189   and \isa{{\isaliteral{22}{\isachardoublequote}}b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ B{\isaliteral{22}{\isachardoublequote}}}.
   190 
   191   A record scheme like \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3D}{\isacharequal}}\ m{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} contains fields
   192   \isa{x} and \isa{y} as before, but also possibly further fields
   193   as indicated by the ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}'' notation (which is actually part
   194   of the syntax).  The improper field ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}'' of a record
   195   scheme is called the \emph{more part}.  Logically it is just a free
   196   variable, which is occasionally referred to as ``row variable'' in
   197   the literature.  The more part of a record scheme may be
   198   instantiated by zero or more further components.  For example, the
   199   previous scheme may get instantiated to \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ z\ {\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3D}{\isacharequal}}\ m{\isaliteral{27}{\isacharprime}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}, where \isa{m{\isaliteral{27}{\isacharprime}}} refers to a different more part.
   200   Fixed records are special instances of record schemes, where
   201   ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}'' is properly terminated by the \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ unit{\isaliteral{22}{\isachardoublequote}}}
   202   element.  In fact, \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} is just an abbreviation
   203   for \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{29}{\isacharparenright}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}.
   204 
   205   \medskip Two key observations make extensible records in a simply
   206   typed language like HOL work out:
   207 
   208   \begin{enumerate}
   209 
   210   \item the more part is internalized, as a free term or type
   211   variable,
   212 
   213   \item field names are externalized, they cannot be accessed within
   214   the logic as first-class values.
   215 
   216   \end{enumerate}
   217 
   218   \medskip In Isabelle/HOL record types have to be defined explicitly,
   219   fixing their field names and types, and their (optional) parent
   220   record.  Afterwards, records may be formed using above syntax, while
   221   obeying the canonical order of fields as given by their declaration.
   222   The record package provides several standard operations like
   223   selectors and updates.  The common setup for various generic proof
   224   tools enable succinct reasoning patterns.  See also the Isabelle/HOL
   225   tutorial \cite{isabelle-hol-book} for further instructions on using
   226   records in practice.%
   227 \end{isamarkuptext}%
   228 \isamarkuptrue%
   229 %
   230 \isamarkupsubsection{Record specifications%
   231 }
   232 \isamarkuptrue%
   233 %
   234 \begin{isamarkuptext}%
   235 \begin{matharray}{rcl}
   236     \indexdef{HOL}{command}{record}\hypertarget{command.HOL.record}{\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
   237   \end{matharray}
   238 
   239   \begin{railoutput}
   240 \rail@begin{2}{\isa{}}
   241 \rail@term{\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}}[]
   242 \rail@nont{\hyperlink{syntax.typespecsorts}{\mbox{\isa{typespecsorts}}}}[]
   243 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
   244 \rail@bar
   245 \rail@nextbar{1}
   246 \rail@nont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
   247 \rail@term{\isa{{\isaliteral{2B}{\isacharplus}}}}[]
   248 \rail@endbar
   249 \rail@plus
   250 \rail@nont{\hyperlink{syntax.constdecl}{\mbox{\isa{constdecl}}}}[]
   251 \rail@nextplus{1}
   252 \rail@endplus
   253 \rail@end
   254 \end{railoutput}
   255 
   256 
   257   \begin{description}
   258 
   259   \item \hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{29}{\isacharparenright}}\ t\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{5C3C7461753E}{\isasymtau}}\ {\isaliteral{2B}{\isacharplus}}\ c\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ c\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{22}{\isachardoublequote}}} defines extensible record type \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{22}{\isachardoublequote}}},
   260   derived from the optional parent record \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7461753E}{\isasymtau}}{\isaliteral{22}{\isachardoublequote}}} by adding new
   261   field components \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} etc.
   262 
   263   The type variables of \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7461753E}{\isasymtau}}{\isaliteral{22}{\isachardoublequote}}} and \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} need to be
   264   covered by the (distinct) parameters \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{22}{\isachardoublequote}}}.  Type constructor \isa{t} has to be new, while \isa{{\isaliteral{5C3C7461753E}{\isasymtau}}} needs to specify an instance of an existing record type.  At
   265   least one new field \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} has to be specified.
   266   Basically, field names need to belong to a unique record.  This is
   267   not a real restriction in practice, since fields are qualified by
   268   the record name internally.
   269 
   270   The parent record specification \isa{{\isaliteral{5C3C7461753E}{\isasymtau}}} is optional; if omitted
   271   \isa{t} becomes a root record.  The hierarchy of all records
   272   declared within a theory context forms a forest structure, i.e.\ a
   273   set of trees starting with a root record each.  There is no way to
   274   merge multiple parent records!
   275 
   276   For convenience, \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{22}{\isachardoublequote}}} is made a
   277   type abbreviation for the fixed record type \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ c\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}, likewise is \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{5F}{\isacharunderscore}}scheme{\isaliteral{22}{\isachardoublequote}}} made an abbreviation for
   278   \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ c\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}.
   279 
   280   \end{description}%
   281 \end{isamarkuptext}%
   282 \isamarkuptrue%
   283 %
   284 \isamarkupsubsection{Record operations%
   285 }
   286 \isamarkuptrue%
   287 %
   288 \begin{isamarkuptext}%
   289 Any record definition of the form presented above produces certain
   290   standard operations.  Selectors and updates are provided for any
   291   field, including the improper one ``\isa{more}''.  There are also
   292   cumulative record constructor functions.  To simplify the
   293   presentation below, we assume for now that \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{22}{\isachardoublequote}}} is a root record with fields \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ c\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{22}{\isachardoublequote}}}.
   294 
   295   \medskip \textbf{Selectors} and \textbf{updates} are available for
   296   any field (including ``\isa{more}''):
   297 
   298   \begin{matharray}{lll}
   299     \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} \\
   300     \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{5F}{\isacharunderscore}}update{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   301   \end{matharray}
   302 
   303   There is special syntax for application of updates: \isa{{\isaliteral{22}{\isachardoublequote}}r{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} abbreviates term \isa{{\isaliteral{22}{\isachardoublequote}}x{\isaliteral{5F}{\isacharunderscore}}update\ a\ r{\isaliteral{22}{\isachardoublequote}}}.  Further notation for
   304   repeated updates is also available: \isa{{\isaliteral{22}{\isachardoublequote}}r{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}z\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} may be written \isa{{\isaliteral{22}{\isachardoublequote}}r{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ z\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}.  Note that
   305   because of postfix notation the order of fields shown here is
   306   reverse than in the actual term.  Since repeated updates are just
   307   function applications, fields may be freely permuted in \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}x\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ a{\isaliteral{2C}{\isacharcomma}}\ y\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ b{\isaliteral{2C}{\isacharcomma}}\ z\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3D}{\isacharequal}}\ c{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}}, as far as logical equality is concerned.
   308   Thus commutativity of independent updates can be proven within the
   309   logic for any two fields, but not as a general theorem.
   310 
   311   \medskip The \textbf{make} operation provides a cumulative record
   312   constructor function:
   313 
   314   \begin{matharray}{lll}
   315     \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}make{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   316   \end{matharray}
   317 
   318   \medskip We now reconsider the case of non-root records, which are
   319   derived of some parent.  In general, the latter may depend on
   320   another parent as well, resulting in a list of \emph{ancestor
   321   records}.  Appending the lists of fields of all ancestors results in
   322   a certain field prefix.  The record package automatically takes care
   323   of this by lifting operations over this context of ancestor fields.
   324   Assuming that \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E7375623E}{}\isactrlsub m{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{22}{\isachardoublequote}}} has ancestor
   325   fields \isa{{\isaliteral{22}{\isachardoublequote}}b\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C72686F3E}{\isasymrho}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ b\isaliteral{5C3C5E7375623E}{}\isactrlsub k\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C72686F3E}{\isasymrho}}\isaliteral{5C3C5E7375623E}{}\isactrlsub k{\isaliteral{22}{\isachardoublequote}}},
   326   the above record operations will get the following types:
   327 
   328   \medskip
   329   \begin{tabular}{lll}
   330     \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{22}{\isachardoublequote}}} \\
   331     \isa{{\isaliteral{22}{\isachardoublequote}}c\isaliteral{5C3C5E7375623E}{}\isactrlsub i{\isaliteral{5F}{\isacharunderscore}}update{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub i\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   332     \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}make{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C72686F3E}{\isasymrho}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C72686F3E}{\isasymrho}}\isaliteral{5C3C5E7375623E}{}\isactrlsub k\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   333   \end{tabular}
   334   \medskip
   335 
   336   \noindent Some further operations address the extension aspect of a
   337   derived record scheme specifically: \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}fields{\isaliteral{22}{\isachardoublequote}}} produces a
   338   record fragment consisting of exactly the new fields introduced here
   339   (the result may serve as a more part elsewhere); \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}extend{\isaliteral{22}{\isachardoublequote}}}
   340   takes a fixed record and adds a given more part; \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}truncate{\isaliteral{22}{\isachardoublequote}}} restricts a record scheme to a fixed record.
   341 
   342   \medskip
   343   \begin{tabular}{lll}
   344     \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}fields{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   345     \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}extend{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   346     \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}truncate{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ {\isaliteral{5C3C7A6574613E}{\isasymzeta}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C6C706172723E}{\isasymlparr}}\isaliteral{5C3C5E7665633E}{}\isactrlvec b\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C72686F3E}{\isasymrho}}{\isaliteral{2C}{\isacharcomma}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec c\ {\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}\ \isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C7369676D613E}{\isasymsigma}}{\isaliteral{5C3C72706172723E}{\isasymrparr}}{\isaliteral{22}{\isachardoublequote}}} \\
   347   \end{tabular}
   348   \medskip
   349 
   350   \noindent Note that \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}make{\isaliteral{22}{\isachardoublequote}}} and \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}fields{\isaliteral{22}{\isachardoublequote}}} coincide
   351   for root records.%
   352 \end{isamarkuptext}%
   353 \isamarkuptrue%
   354 %
   355 \isamarkupsubsection{Derived rules and proof tools%
   356 }
   357 \isamarkuptrue%
   358 %
   359 \begin{isamarkuptext}%
   360 The record package proves several results internally, declaring
   361   these facts to appropriate proof tools.  This enables users to
   362   reason about record structures quite conveniently.  Assume that
   363   \isa{t} is a record type as specified above.
   364 
   365   \begin{enumerate}
   366 
   367   \item Standard conversions for selectors or updates applied to
   368   record constructor terms are made part of the default Simplifier
   369   context; thus proofs by reduction of basic operations merely require
   370   the \hyperlink{method.simp}{\mbox{\isa{simp}}} method without further arguments.  These rules
   371   are available as \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}simps{\isaliteral{22}{\isachardoublequote}}}, too.
   372 
   373   \item Selectors applied to updated records are automatically reduced
   374   by an internal simplification procedure, which is also part of the
   375   standard Simplifier setup.
   376 
   377   \item Inject equations of a form analogous to \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}x{\isaliteral{2C}{\isacharcomma}}\ y{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{3D}{\isacharequal}}\ {\isaliteral{28}{\isacharparenleft}}x{\isaliteral{27}{\isacharprime}}{\isaliteral{2C}{\isacharcomma}}\ y{\isaliteral{27}{\isacharprime}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ x\ {\isaliteral{3D}{\isacharequal}}\ x{\isaliteral{27}{\isacharprime}}\ {\isaliteral{5C3C616E643E}{\isasymand}}\ y\ {\isaliteral{3D}{\isacharequal}}\ y{\isaliteral{27}{\isacharprime}}{\isaliteral{22}{\isachardoublequote}}} are declared to the Simplifier and Classical
   378   Reasoner as \hyperlink{attribute.iff}{\mbox{\isa{iff}}} rules.  These rules are available as
   379   \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}iffs{\isaliteral{22}{\isachardoublequote}}}.
   380 
   381   \item The introduction rule for record equality analogous to \isa{{\isaliteral{22}{\isachardoublequote}}x\ r\ {\isaliteral{3D}{\isacharequal}}\ x\ r{\isaliteral{27}{\isacharprime}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ y\ r\ {\isaliteral{3D}{\isacharequal}}\ y\ r{\isaliteral{27}{\isacharprime}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ r\ {\isaliteral{3D}{\isacharequal}}\ r{\isaliteral{27}{\isacharprime}}{\isaliteral{22}{\isachardoublequote}}} is declared to the Simplifier,
   382   and as the basic rule context as ``\hyperlink{attribute.intro}{\mbox{\isa{intro}}}\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3F}{\isacharquery}}{\isaliteral{22}{\isachardoublequote}}}''.
   383   The rule is called \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}equality{\isaliteral{22}{\isachardoublequote}}}.
   384 
   385   \item Representations of arbitrary record expressions as canonical
   386   constructor terms are provided both in \hyperlink{method.cases}{\mbox{\isa{cases}}} and \hyperlink{method.induct}{\mbox{\isa{induct}}} format (cf.\ the generic proof methods of the same name,
   387   \secref{sec:cases-induct}).  Several variations are available, for
   388   fixed records, record schemes, more parts etc.
   389 
   390   The generic proof methods are sufficiently smart to pick the most
   391   sensible rule according to the type of the indicated record
   392   expression: users just need to apply something like ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}cases\ r{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}'' to a certain proof problem.
   393 
   394   \item The derived record operations \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}make{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}fields{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}extend{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}truncate{\isaliteral{22}{\isachardoublequote}}} are \emph{not}
   395   treated automatically, but usually need to be expanded by hand,
   396   using the collective fact \isa{{\isaliteral{22}{\isachardoublequote}}t{\isaliteral{2E}{\isachardot}}defs{\isaliteral{22}{\isachardoublequote}}}.
   397 
   398   \end{enumerate}%
   399 \end{isamarkuptext}%
   400 \isamarkuptrue%
   401 %
   402 \isamarkupsection{Datatypes \label{sec:hol-datatype}%
   403 }
   404 \isamarkuptrue%
   405 %
   406 \begin{isamarkuptext}%
   407 \begin{matharray}{rcl}
   408     \indexdef{HOL}{command}{datatype}\hypertarget{command.HOL.datatype}{\hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
   409     \indexdef{HOL}{command}{rep\_datatype}\hypertarget{command.HOL.rep-datatype}{\hyperlink{command.HOL.rep-datatype}{\mbox{\isa{\isacommand{rep{\isaliteral{5F}{\isacharunderscore}}datatype}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
   410   \end{matharray}
   411 
   412   \begin{railoutput}
   413 \rail@begin{2}{\isa{}}
   414 \rail@term{\hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}}}[]
   415 \rail@plus
   416 \rail@nont{\isa{dtspec}}[]
   417 \rail@nextplus{1}
   418 \rail@cterm{\isa{\isakeyword{and}}}[]
   419 \rail@endplus
   420 \rail@end
   421 \rail@begin{3}{\isa{}}
   422 \rail@term{\hyperlink{command.HOL.rep-datatype}{\mbox{\isa{\isacommand{rep{\isaliteral{5F}{\isacharunderscore}}datatype}}}}}[]
   423 \rail@bar
   424 \rail@nextbar{1}
   425 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   426 \rail@plus
   427 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
   428 \rail@nextplus{2}
   429 \rail@endplus
   430 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   431 \rail@endbar
   432 \rail@plus
   433 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
   434 \rail@nextplus{1}
   435 \rail@endplus
   436 \rail@end
   437 \rail@begin{2}{\isa{dtspec}}
   438 \rail@bar
   439 \rail@nextbar{1}
   440 \rail@nont{\hyperlink{syntax.parname}{\mbox{\isa{parname}}}}[]
   441 \rail@endbar
   442 \rail@nont{\hyperlink{syntax.typespec}{\mbox{\isa{typespec}}}}[]
   443 \rail@bar
   444 \rail@nextbar{1}
   445 \rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
   446 \rail@endbar
   447 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
   448 \rail@plus
   449 \rail@nont{\isa{cons}}[]
   450 \rail@nextplus{1}
   451 \rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
   452 \rail@endplus
   453 \rail@end
   454 \rail@begin{2}{\isa{cons}}
   455 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
   456 \rail@plus
   457 \rail@nextplus{1}
   458 \rail@cnont{\hyperlink{syntax.type}{\mbox{\isa{type}}}}[]
   459 \rail@endplus
   460 \rail@bar
   461 \rail@nextbar{1}
   462 \rail@nont{\hyperlink{syntax.mixfix}{\mbox{\isa{mixfix}}}}[]
   463 \rail@endbar
   464 \rail@end
   465 \end{railoutput}
   466 
   467 
   468   \begin{description}
   469 
   470   \item \hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}} defines inductive datatypes in
   471   HOL.
   472 
   473   \item \hyperlink{command.HOL.rep-datatype}{\mbox{\isa{\isacommand{rep{\isaliteral{5F}{\isacharunderscore}}datatype}}}} represents existing types as
   474   inductive ones, generating the standard infrastructure of derived
   475   concepts (primitive recursion etc.).
   476 
   477   \end{description}
   478 
   479   The induction and exhaustion theorems generated provide case names
   480   according to the constructors involved, while parameters are named
   481   after the types (see also \secref{sec:cases-induct}).
   482 
   483   See \cite{isabelle-HOL} for more details on datatypes, but beware of
   484   the old-style theory syntax being used there!  Apart from proper
   485   proof methods for case-analysis and induction, there are also
   486   emulations of ML tactics \hyperlink{method.HOL.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}} and \hyperlink{method.HOL.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}} available, see \secref{sec:hol-induct-tac}; these admit
   487   to refer directly to the internal structure of subgoals (including
   488   internally bound parameters).%
   489 \end{isamarkuptext}%
   490 \isamarkuptrue%
   491 %
   492 \isamarkupsection{Functorial structure of types%
   493 }
   494 \isamarkuptrue%
   495 %
   496 \begin{isamarkuptext}%
   497 \begin{matharray}{rcl}
   498     \indexdef{HOL}{command}{enriched\_type}\hypertarget{command.HOL.enriched-type}{\hyperlink{command.HOL.enriched-type}{\mbox{\isa{\isacommand{enriched{\isaliteral{5F}{\isacharunderscore}}type}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}
   499   \end{matharray}
   500 
   501   \begin{railoutput}
   502 \rail@begin{2}{\isa{}}
   503 \rail@term{\hyperlink{command.HOL.enriched-type}{\mbox{\isa{\isacommand{enriched{\isaliteral{5F}{\isacharunderscore}}type}}}}}[]
   504 \rail@bar
   505 \rail@nextbar{1}
   506 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
   507 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
   508 \rail@endbar
   509 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
   510 \rail@end
   511 \end{railoutput}
   512 
   513 
   514   \begin{description}
   515 
   516   \item \hyperlink{command.HOL.enriched-type}{\mbox{\isa{\isacommand{enriched{\isaliteral{5F}{\isacharunderscore}}type}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}prefix{\isaliteral{3A}{\isacharcolon}}\ m{\isaliteral{22}{\isachardoublequote}}} allows to
   517   prove and register properties about the functorial structure of type
   518   constructors.  These properties then can be used by other packages
   519   to deal with those type constructors in certain type constructions.
   520   Characteristic theorems are noted in the current local theory.  By
   521   default, they are prefixed with the base name of the type
   522   constructor, an explicit prefix can be given alternatively.
   523 
   524   The given term \isa{{\isaliteral{22}{\isachardoublequote}}m{\isaliteral{22}{\isachardoublequote}}} is considered as \emph{mapper} for the
   525   corresponding type constructor and must conform to the following
   526   type pattern:
   527 
   528   \begin{matharray}{lll}
   529     \isa{{\isaliteral{22}{\isachardoublequote}}m{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} &
   530       \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E697375623E}{}\isactrlisub k\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{28}{\isacharparenleft}}\isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{29}{\isacharparenright}}\ t\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{28}{\isacharparenleft}}\isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{29}{\isacharparenright}}\ t{\isaliteral{22}{\isachardoublequote}}} \\
   531   \end{matharray}
   532 
   533   \noindent where \isa{t} is the type constructor, \isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{22}{\isachardoublequote}}} and \isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7665633E}{}\isactrlvec {\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{22}{\isachardoublequote}}} are distinct
   534   type variables free in the local theory and \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}{\isaliteral{22}{\isachardoublequote}}},
   535   \ldots, \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C7369676D613E}{\isasymsigma}}\isaliteral{5C3C5E697375623E}{}\isactrlisub k{\isaliteral{22}{\isachardoublequote}}} is a subsequence of \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub {\isadigit{1}}{\isaliteral{22}{\isachardoublequote}}}, \ldots,
   536   \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C626574613E}{\isasymbeta}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n\ {\isaliteral{5C3C52696768746172726F773E}{\isasymRightarrow}}\ {\isaliteral{5C3C616C7068613E}{\isasymalpha}}\isaliteral{5C3C5E697375623E}{}\isactrlisub n{\isaliteral{22}{\isachardoublequote}}}.
   537 
   538   \end{description}%
   539 \end{isamarkuptext}%
   540 \isamarkuptrue%
   541 %
   542 \isamarkupsection{Recursive functions \label{sec:recursion}%
   543 }
   544 \isamarkuptrue%
   545 %
   546 \begin{isamarkuptext}%
   547 \begin{matharray}{rcl}
   548     \indexdef{HOL}{command}{primrec}\hypertarget{command.HOL.primrec}{\hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
   549     \indexdef{HOL}{command}{fun}\hypertarget{command.HOL.fun}{\hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
   550     \indexdef{HOL}{command}{function}\hypertarget{command.HOL.function}{\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
   551     \indexdef{HOL}{command}{termination}\hypertarget{command.HOL.termination}{\hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
   552   \end{matharray}
   553 
   554   \begin{railoutput}
   555 \rail@begin{2}{\isa{}}
   556 \rail@term{\hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}}}[]
   557 \rail@bar
   558 \rail@nextbar{1}
   559 \rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
   560 \rail@endbar
   561 \rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
   562 \rail@term{\isa{\isakeyword{where}}}[]
   563 \rail@nont{\isa{equations}}[]
   564 \rail@end
   565 \rail@begin{4}{\isa{}}
   566 \rail@bar
   567 \rail@term{\hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}}}[]
   568 \rail@nextbar{1}
   569 \rail@term{\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}}[]
   570 \rail@endbar
   571 \rail@bar
   572 \rail@nextbar{1}
   573 \rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
   574 \rail@endbar
   575 \rail@bar
   576 \rail@nextbar{1}
   577 \rail@nont{\isa{functionopts}}[]
   578 \rail@endbar
   579 \rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
   580 \rail@cr{3}
   581 \rail@term{\isa{\isakeyword{where}}}[]
   582 \rail@nont{\isa{equations}}[]
   583 \rail@end
   584 \rail@begin{3}{\isa{equations}}
   585 \rail@plus
   586 \rail@bar
   587 \rail@nextbar{1}
   588 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
   589 \rail@endbar
   590 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
   591 \rail@nextplus{2}
   592 \rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
   593 \rail@endplus
   594 \rail@end
   595 \rail@begin{3}{\isa{functionopts}}
   596 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   597 \rail@plus
   598 \rail@bar
   599 \rail@term{\isa{sequential}}[]
   600 \rail@nextbar{1}
   601 \rail@term{\isa{domintros}}[]
   602 \rail@endbar
   603 \rail@nextplus{2}
   604 \rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
   605 \rail@endplus
   606 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   607 \rail@end
   608 \rail@begin{2}{\isa{}}
   609 \rail@term{\hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}}[]
   610 \rail@bar
   611 \rail@nextbar{1}
   612 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
   613 \rail@endbar
   614 \rail@end
   615 \end{railoutput}
   616 
   617 
   618   \begin{description}
   619 
   620   \item \hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}} defines primitive recursive
   621   functions over datatypes, see also \cite{isabelle-HOL}.
   622 
   623   \item \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} defines functions by general
   624   wellfounded recursion. A detailed description with examples can be
   625   found in \cite{isabelle-function}. The function is specified by a
   626   set of (possibly conditional) recursive equations with arbitrary
   627   pattern matching. The command generates proof obligations for the
   628   completeness and the compatibility of patterns.
   629 
   630   The defined function is considered partial, and the resulting
   631   simplification rules (named \isa{{\isaliteral{22}{\isachardoublequote}}f{\isaliteral{2E}{\isachardot}}psimps{\isaliteral{22}{\isachardoublequote}}}) and induction rule
   632   (named \isa{{\isaliteral{22}{\isachardoublequote}}f{\isaliteral{2E}{\isachardot}}pinduct{\isaliteral{22}{\isachardoublequote}}}) are guarded by a generated domain
   633   predicate \isa{{\isaliteral{22}{\isachardoublequote}}f{\isaliteral{5F}{\isacharunderscore}}dom{\isaliteral{22}{\isachardoublequote}}}. The \hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}
   634   command can then be used to establish that the function is total.
   635 
   636   \item \hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}} is a shorthand notation for ``\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}sequential{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}, followed by automated
   637   proof attempts regarding pattern matching and termination.  See
   638   \cite{isabelle-function} for further details.
   639 
   640   \item \hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}~\isa{f} commences a
   641   termination proof for the previously defined function \isa{f}.  If
   642   this is omitted, the command refers to the most recent function
   643   definition.  After the proof is closed, the recursive equations and
   644   the induction principle is established.
   645 
   646   \end{description}
   647 
   648   Recursive definitions introduced by the \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}
   649   command accommodate
   650   reasoning by induction (cf.\ \secref{sec:cases-induct}): rule \isa{{\isaliteral{22}{\isachardoublequote}}c{\isaliteral{2E}{\isachardot}}induct{\isaliteral{22}{\isachardoublequote}}} (where \isa{c} is the name of the function definition)
   651   refers to a specific induction rule, with parameters named according
   652   to the user-specified equations. Cases are numbered (starting from 1).
   653 
   654   For \hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}}, the induction principle coincides
   655   with structural recursion on the datatype the recursion is carried
   656   out.
   657 
   658   The equations provided by these packages may be referred later as
   659   theorem list \isa{{\isaliteral{22}{\isachardoublequote}}f{\isaliteral{2E}{\isachardot}}simps{\isaliteral{22}{\isachardoublequote}}}, where \isa{f} is the (collective)
   660   name of the functions defined.  Individual equations may be named
   661   explicitly as well.
   662 
   663   The \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} command accepts the following
   664   options.
   665 
   666   \begin{description}
   667 
   668   \item \isa{sequential} enables a preprocessor which disambiguates
   669   overlapping patterns by making them mutually disjoint.  Earlier
   670   equations take precedence over later ones.  This allows to give the
   671   specification in a format very similar to functional programming.
   672   Note that the resulting simplification and induction rules
   673   correspond to the transformed specification, not the one given
   674   originally. This usually means that each equation given by the user
   675   may result in several theorems.  Also note that this automatic
   676   transformation only works for ML-style datatype patterns.
   677 
   678   \item \isa{domintros} enables the automated generation of
   679   introduction rules for the domain predicate. While mostly not
   680   needed, they can be helpful in some proofs about partial functions.
   681 
   682   \end{description}%
   683 \end{isamarkuptext}%
   684 \isamarkuptrue%
   685 %
   686 \isamarkupsubsection{Proof methods related to recursive definitions%
   687 }
   688 \isamarkuptrue%
   689 %
   690 \begin{isamarkuptext}%
   691 \begin{matharray}{rcl}
   692     \indexdef{HOL}{method}{pat\_completeness}\hypertarget{method.HOL.pat-completeness}{\hyperlink{method.HOL.pat-completeness}{\mbox{\isa{pat{\isaliteral{5F}{\isacharunderscore}}completeness}}}} & : & \isa{method} \\
   693     \indexdef{HOL}{method}{relation}\hypertarget{method.HOL.relation}{\hyperlink{method.HOL.relation}{\mbox{\isa{relation}}}} & : & \isa{method} \\
   694     \indexdef{HOL}{method}{lexicographic\_order}\hypertarget{method.HOL.lexicographic-order}{\hyperlink{method.HOL.lexicographic-order}{\mbox{\isa{lexicographic{\isaliteral{5F}{\isacharunderscore}}order}}}} & : & \isa{method} \\
   695     \indexdef{HOL}{method}{size\_change}\hypertarget{method.HOL.size-change}{\hyperlink{method.HOL.size-change}{\mbox{\isa{size{\isaliteral{5F}{\isacharunderscore}}change}}}} & : & \isa{method} \\
   696   \end{matharray}
   697 
   698   \begin{railoutput}
   699 \rail@begin{1}{\isa{}}
   700 \rail@term{\hyperlink{method.HOL.relation}{\mbox{\isa{relation}}}}[]
   701 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
   702 \rail@end
   703 \rail@begin{2}{\isa{}}
   704 \rail@term{\hyperlink{method.HOL.lexicographic-order}{\mbox{\isa{lexicographic{\isaliteral{5F}{\isacharunderscore}}order}}}}[]
   705 \rail@plus
   706 \rail@nextplus{1}
   707 \rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
   708 \rail@endplus
   709 \rail@end
   710 \rail@begin{2}{\isa{}}
   711 \rail@term{\hyperlink{method.HOL.size-change}{\mbox{\isa{size{\isaliteral{5F}{\isacharunderscore}}change}}}}[]
   712 \rail@nont{\isa{orders}}[]
   713 \rail@plus
   714 \rail@nextplus{1}
   715 \rail@cnont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
   716 \rail@endplus
   717 \rail@end
   718 \rail@begin{4}{\isa{orders}}
   719 \rail@plus
   720 \rail@nextplus{1}
   721 \rail@bar
   722 \rail@term{\isa{max}}[]
   723 \rail@nextbar{2}
   724 \rail@term{\isa{min}}[]
   725 \rail@nextbar{3}
   726 \rail@term{\isa{ms}}[]
   727 \rail@endbar
   728 \rail@endplus
   729 \rail@end
   730 \end{railoutput}
   731 
   732 
   733   \begin{description}
   734 
   735   \item \hyperlink{method.HOL.pat-completeness}{\mbox{\isa{pat{\isaliteral{5F}{\isacharunderscore}}completeness}}} is a specialized method to
   736   solve goals regarding the completeness of pattern matching, as
   737   required by the \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} package (cf.\
   738   \cite{isabelle-function}).
   739 
   740   \item \hyperlink{method.HOL.relation}{\mbox{\isa{relation}}}~\isa{R} introduces a termination
   741   proof using the relation \isa{R}.  The resulting proof state will
   742   contain goals expressing that \isa{R} is wellfounded, and that the
   743   arguments of recursive calls decrease with respect to \isa{R}.
   744   Usually, this method is used as the initial proof step of manual
   745   termination proofs.
   746 
   747   \item \hyperlink{method.HOL.lexicographic-order}{\mbox{\isa{lexicographic{\isaliteral{5F}{\isacharunderscore}}order}}} attempts a fully
   748   automated termination proof by searching for a lexicographic
   749   combination of size measures on the arguments of the function. The
   750   method accepts the same arguments as the \hyperlink{method.auto}{\mbox{\isa{auto}}} method,
   751   which it uses internally to prove local descents.  The same context
   752   modifiers as for \hyperlink{method.auto}{\mbox{\isa{auto}}} are accepted, see
   753   \secref{sec:clasimp}.
   754 
   755   In case of failure, extensive information is printed, which can help
   756   to analyse the situation (cf.\ \cite{isabelle-function}).
   757 
   758   \item \hyperlink{method.HOL.size-change}{\mbox{\isa{size{\isaliteral{5F}{\isacharunderscore}}change}}} also works on termination goals,
   759   using a variation of the size-change principle, together with a
   760   graph decomposition technique (see \cite{krauss_phd} for details).
   761   Three kinds of orders are used internally: \isa{max}, \isa{min},
   762   and \isa{ms} (multiset), which is only available when the theory
   763   \isa{Multiset} is loaded. When no order kinds are given, they are
   764   tried in order. The search for a termination proof uses SAT solving
   765   internally.
   766 
   767  For local descent proofs, the same context modifiers as for \hyperlink{method.auto}{\mbox{\isa{auto}}} are accepted, see \secref{sec:clasimp}.
   768 
   769   \end{description}%
   770 \end{isamarkuptext}%
   771 \isamarkuptrue%
   772 %
   773 \isamarkupsubsection{Functions with explicit partiality%
   774 }
   775 \isamarkuptrue%
   776 %
   777 \begin{isamarkuptext}%
   778 \begin{matharray}{rcl}
   779     \indexdef{HOL}{command}{partial\_function}\hypertarget{command.HOL.partial-function}{\hyperlink{command.HOL.partial-function}{\mbox{\isa{\isacommand{partial{\isaliteral{5F}{\isacharunderscore}}function}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
   780     \indexdef{HOL}{attribute}{partial\_function\_mono}\hypertarget{attribute.HOL.partial-function-mono}{\hyperlink{attribute.HOL.partial-function-mono}{\mbox{\isa{partial{\isaliteral{5F}{\isacharunderscore}}function{\isaliteral{5F}{\isacharunderscore}}mono}}}} & : & \isa{attribute} \\
   781   \end{matharray}
   782 
   783   \begin{railoutput}
   784 \rail@begin{5}{\isa{}}
   785 \rail@term{\hyperlink{command.HOL.partial-function}{\mbox{\isa{\isacommand{partial{\isaliteral{5F}{\isacharunderscore}}function}}}}}[]
   786 \rail@bar
   787 \rail@nextbar{1}
   788 \rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
   789 \rail@endbar
   790 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   791 \rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
   792 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   793 \rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
   794 \rail@cr{3}
   795 \rail@term{\isa{\isakeyword{where}}}[]
   796 \rail@bar
   797 \rail@nextbar{4}
   798 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
   799 \rail@endbar
   800 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
   801 \rail@end
   802 \end{railoutput}
   803 
   804 
   805   \begin{description}
   806 
   807   \item \hyperlink{command.HOL.partial-function}{\mbox{\isa{\isacommand{partial{\isaliteral{5F}{\isacharunderscore}}function}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}mode{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} defines
   808   recursive functions based on fixpoints in complete partial
   809   orders. No termination proof is required from the user or
   810   constructed internally. Instead, the possibility of non-termination
   811   is modelled explicitly in the result type, which contains an
   812   explicit bottom element.
   813 
   814   Pattern matching and mutual recursion are currently not supported.
   815   Thus, the specification consists of a single function described by a
   816   single recursive equation.
   817 
   818   There are no fixed syntactic restrictions on the body of the
   819   function, but the induced functional must be provably monotonic
   820   wrt.\ the underlying order.  The monotonicitity proof is performed
   821   internally, and the definition is rejected when it fails. The proof
   822   can be influenced by declaring hints using the
   823   \hyperlink{attribute.HOL.partial-function-mono}{\mbox{\isa{partial{\isaliteral{5F}{\isacharunderscore}}function{\isaliteral{5F}{\isacharunderscore}}mono}}} attribute.
   824 
   825   The mandatory \isa{mode} argument specifies the mode of operation
   826   of the command, which directly corresponds to a complete partial
   827   order on the result type. By default, the following modes are
   828   defined:
   829 
   830   \begin{description}
   831   \item \isa{option} defines functions that map into the \isa{option} type. Here, the value \isa{None} is used to model a
   832   non-terminating computation. Monotonicity requires that if \isa{None} is returned by a recursive call, then the overall result
   833   must also be \isa{None}. This is best achieved through the use of
   834   the monadic operator \isa{{\isaliteral{22}{\isachardoublequote}}Option{\isaliteral{2E}{\isachardot}}bind{\isaliteral{22}{\isachardoublequote}}}.
   835 
   836   \item \isa{tailrec} defines functions with an arbitrary result
   837   type and uses the slightly degenerated partial order where \isa{{\isaliteral{22}{\isachardoublequote}}undefined{\isaliteral{22}{\isachardoublequote}}} is the bottom element.  Now, monotonicity requires that
   838   if \isa{undefined} is returned by a recursive call, then the
   839   overall result must also be \isa{undefined}. In practice, this is
   840   only satisfied when each recursive call is a tail call, whose result
   841   is directly returned. Thus, this mode of operation allows the
   842   definition of arbitrary tail-recursive functions.
   843   \end{description}
   844 
   845   Experienced users may define new modes by instantiating the locale
   846   \isa{{\isaliteral{22}{\isachardoublequote}}partial{\isaliteral{5F}{\isacharunderscore}}function{\isaliteral{5F}{\isacharunderscore}}definitions{\isaliteral{22}{\isachardoublequote}}} appropriately.
   847 
   848   \item \hyperlink{attribute.HOL.partial-function-mono}{\mbox{\isa{partial{\isaliteral{5F}{\isacharunderscore}}function{\isaliteral{5F}{\isacharunderscore}}mono}}} declares rules for
   849   use in the internal monononicity proofs of partial function
   850   definitions.
   851 
   852   \end{description}%
   853 \end{isamarkuptext}%
   854 \isamarkuptrue%
   855 %
   856 \isamarkupsubsection{Old-style recursive function definitions (TFL)%
   857 }
   858 \isamarkuptrue%
   859 %
   860 \begin{isamarkuptext}%
   861 The old TFL commands \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} and \hyperlink{command.HOL.recdef-tc}{\mbox{\isa{\isacommand{recdef{\isaliteral{5F}{\isacharunderscore}}tc}}}} for defining recursive are mostly obsolete; \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} or \hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}} should be used instead.
   862 
   863   \begin{matharray}{rcl}
   864     \indexdef{HOL}{command}{recdef}\hypertarget{command.HOL.recdef}{\hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
   865     \indexdef{HOL}{command}{recdef\_tc}\hypertarget{command.HOL.recdef-tc}{\hyperlink{command.HOL.recdef-tc}{\mbox{\isa{\isacommand{recdef{\isaliteral{5F}{\isacharunderscore}}tc}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
   866   \end{matharray}
   867 
   868   \begin{railoutput}
   869 \rail@begin{5}{\isa{}}
   870 \rail@term{\hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}}}[]
   871 \rail@bar
   872 \rail@nextbar{1}
   873 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   874 \rail@term{\isa{\isakeyword{permissive}}}[]
   875 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   876 \rail@endbar
   877 \rail@cr{3}
   878 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
   879 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
   880 \rail@plus
   881 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
   882 \rail@nextplus{4}
   883 \rail@endplus
   884 \rail@bar
   885 \rail@nextbar{4}
   886 \rail@nont{\isa{hints}}[]
   887 \rail@endbar
   888 \rail@end
   889 \rail@begin{2}{\isa{}}
   890 \rail@nont{\isa{recdeftc}}[]
   891 \rail@bar
   892 \rail@nextbar{1}
   893 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
   894 \rail@endbar
   895 \rail@nont{\isa{tc}}[]
   896 \rail@end
   897 \rail@begin{2}{\isa{hints}}
   898 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   899 \rail@term{\isa{\isakeyword{hints}}}[]
   900 \rail@plus
   901 \rail@nextplus{1}
   902 \rail@cnont{\isa{recdefmod}}[]
   903 \rail@endplus
   904 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   905 \rail@end
   906 \rail@begin{4}{\isa{recdefmod}}
   907 \rail@bar
   908 \rail@bar
   909 \rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}}[]
   910 \rail@nextbar{1}
   911 \rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}}[]
   912 \rail@nextbar{2}
   913 \rail@term{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}[]
   914 \rail@endbar
   915 \rail@bar
   916 \rail@nextbar{1}
   917 \rail@term{\isa{add}}[]
   918 \rail@nextbar{2}
   919 \rail@term{\isa{del}}[]
   920 \rail@endbar
   921 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
   922 \rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
   923 \rail@nextbar{3}
   924 \rail@nont{\hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}}[]
   925 \rail@endbar
   926 \rail@end
   927 \rail@begin{2}{\isa{tc}}
   928 \rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
   929 \rail@bar
   930 \rail@nextbar{1}
   931 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
   932 \rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
   933 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
   934 \rail@endbar
   935 \rail@end
   936 \end{railoutput}
   937 
   938 
   939   \begin{description}
   940 
   941   \item \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} defines general well-founded
   942   recursive functions (using the TFL package), see also
   943   \cite{isabelle-HOL}.  The ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}permissive{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}}'' option tells
   944   TFL to recover from failed proof attempts, returning unfinished
   945   results.  The \isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}, \isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}, and \isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf} hints refer to auxiliary rules to be used in the internal
   946   automated proof process of TFL.  Additional \hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}}
   947   declarations (cf.\ \secref{sec:clasimp}) may be given to tune the
   948   context of the Simplifier (cf.\ \secref{sec:simplifier}) and
   949   Classical reasoner (cf.\ \secref{sec:classical}).
   950 
   951   \item \hyperlink{command.HOL.recdef-tc}{\mbox{\isa{\isacommand{recdef{\isaliteral{5F}{\isacharunderscore}}tc}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}c\ {\isaliteral{28}{\isacharparenleft}}i{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} recommences the
   952   proof for leftover termination condition number \isa{i} (default
   953   1) as generated by a \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} definition of
   954   constant \isa{c}.
   955 
   956   Note that in most cases, \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} is able to finish
   957   its internal proofs without manual intervention.
   958 
   959   \end{description}
   960 
   961   \medskip Hints for \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} may be also declared
   962   globally, using the following attributes.
   963 
   964   \begin{matharray}{rcl}
   965     \indexdef{HOL}{attribute}{recdef\_simp}\hypertarget{attribute.HOL.recdef-simp}{\hyperlink{attribute.HOL.recdef-simp}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}}}} & : & \isa{attribute} \\
   966     \indexdef{HOL}{attribute}{recdef\_cong}\hypertarget{attribute.HOL.recdef-cong}{\hyperlink{attribute.HOL.recdef-cong}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}}}} & : & \isa{attribute} \\
   967     \indexdef{HOL}{attribute}{recdef\_wf}\hypertarget{attribute.HOL.recdef-wf}{\hyperlink{attribute.HOL.recdef-wf}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}}} & : & \isa{attribute} \\
   968   \end{matharray}
   969 
   970   \begin{railoutput}
   971 \rail@begin{3}{\isa{}}
   972 \rail@bar
   973 \rail@term{\hyperlink{attribute.HOL.recdef-simp}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}simp}}}}[]
   974 \rail@nextbar{1}
   975 \rail@term{\hyperlink{attribute.HOL.recdef-cong}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}cong}}}}[]
   976 \rail@nextbar{2}
   977 \rail@term{\hyperlink{attribute.HOL.recdef-wf}{\mbox{\isa{recdef{\isaliteral{5F}{\isacharunderscore}}wf}}}}[]
   978 \rail@endbar
   979 \rail@bar
   980 \rail@nextbar{1}
   981 \rail@term{\isa{add}}[]
   982 \rail@nextbar{2}
   983 \rail@term{\isa{del}}[]
   984 \rail@endbar
   985 \rail@end
   986 \end{railoutput}%
   987 \end{isamarkuptext}%
   988 \isamarkuptrue%
   989 %
   990 \isamarkupsection{Inductive and coinductive definitions \label{sec:hol-inductive}%
   991 }
   992 \isamarkuptrue%
   993 %
   994 \begin{isamarkuptext}%
   995 An \textbf{inductive definition} specifies the least predicate (or
   996   set) \isa{R} closed under given rules: applying a rule to elements
   997   of \isa{R} yields a result within \isa{R}.  For example, a
   998   structural operational semantics is an inductive definition of an
   999   evaluation relation.
  1000 
  1001   Dually, a \textbf{coinductive definition} specifies the greatest
  1002   predicate~/ set \isa{R} that is consistent with given rules: every
  1003   element of \isa{R} can be seen as arising by applying a rule to
  1004   elements of \isa{R}.  An important example is using bisimulation
  1005   relations to formalise equivalence of processes and infinite data
  1006   structures.
  1007 
  1008   \medskip The HOL package is related to the ZF one, which is
  1009   described in a separate paper,\footnote{It appeared in CADE
  1010   \cite{paulson-CADE}; a longer version is distributed with Isabelle.}
  1011   which you should refer to in case of difficulties.  The package is
  1012   simpler than that of ZF thanks to implicit type-checking in HOL.
  1013   The types of the (co)inductive predicates (or sets) determine the
  1014   domain of the fixedpoint definition, and the package does not have
  1015   to use inference rules for type-checking.
  1016 
  1017   \begin{matharray}{rcl}
  1018     \indexdef{HOL}{command}{inductive}\hypertarget{command.HOL.inductive}{\hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
  1019     \indexdef{HOL}{command}{inductive\_set}\hypertarget{command.HOL.inductive-set}{\hyperlink{command.HOL.inductive-set}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}set}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
  1020     \indexdef{HOL}{command}{coinductive}\hypertarget{command.HOL.coinductive}{\hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
  1021     \indexdef{HOL}{command}{coinductive\_set}\hypertarget{command.HOL.coinductive-set}{\hyperlink{command.HOL.coinductive-set}{\mbox{\isa{\isacommand{coinductive{\isaliteral{5F}{\isacharunderscore}}set}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
  1022     \indexdef{HOL}{attribute}{mono}\hypertarget{attribute.HOL.mono}{\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}} & : & \isa{attribute} \\
  1023   \end{matharray}
  1024 
  1025   \begin{railoutput}
  1026 \rail@begin{7}{\isa{}}
  1027 \rail@bar
  1028 \rail@term{\hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}}[]
  1029 \rail@nextbar{1}
  1030 \rail@term{\hyperlink{command.HOL.inductive-set}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}set}}}}}[]
  1031 \rail@nextbar{2}
  1032 \rail@term{\hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}}[]
  1033 \rail@nextbar{3}
  1034 \rail@term{\hyperlink{command.HOL.coinductive-set}{\mbox{\isa{\isacommand{coinductive{\isaliteral{5F}{\isacharunderscore}}set}}}}}[]
  1035 \rail@endbar
  1036 \rail@bar
  1037 \rail@nextbar{1}
  1038 \rail@nont{\hyperlink{syntax.target}{\mbox{\isa{target}}}}[]
  1039 \rail@endbar
  1040 \rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
  1041 \rail@bar
  1042 \rail@nextbar{1}
  1043 \rail@term{\isa{\isakeyword{for}}}[]
  1044 \rail@nont{\hyperlink{syntax.fixes}{\mbox{\isa{fixes}}}}[]
  1045 \rail@endbar
  1046 \rail@cr{5}
  1047 \rail@bar
  1048 \rail@nextbar{6}
  1049 \rail@term{\isa{\isakeyword{where}}}[]
  1050 \rail@nont{\isa{clauses}}[]
  1051 \rail@endbar
  1052 \rail@bar
  1053 \rail@nextbar{6}
  1054 \rail@term{\isa{\isakeyword{monos}}}[]
  1055 \rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
  1056 \rail@endbar
  1057 \rail@end
  1058 \rail@begin{3}{\isa{clauses}}
  1059 \rail@plus
  1060 \rail@bar
  1061 \rail@nextbar{1}
  1062 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
  1063 \rail@endbar
  1064 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
  1065 \rail@nextplus{2}
  1066 \rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
  1067 \rail@endplus
  1068 \rail@end
  1069 \rail@begin{3}{\isa{}}
  1070 \rail@term{\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}}[]
  1071 \rail@bar
  1072 \rail@nextbar{1}
  1073 \rail@term{\isa{add}}[]
  1074 \rail@nextbar{2}
  1075 \rail@term{\isa{del}}[]
  1076 \rail@endbar
  1077 \rail@end
  1078 \end{railoutput}
  1079 
  1080 
  1081   \begin{description}
  1082 
  1083   \item \hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}} and \hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}} define (co)inductive predicates from the
  1084   introduction rules given in the \hyperlink{keyword.where}{\mbox{\isa{\isakeyword{where}}}} part.  The
  1085   optional \hyperlink{keyword.for}{\mbox{\isa{\isakeyword{for}}}} part contains a list of parameters of the
  1086   (co)inductive predicates that remain fixed throughout the
  1087   definition.  The optional \hyperlink{keyword.monos}{\mbox{\isa{\isakeyword{monos}}}} section contains
  1088   \emph{monotonicity theorems}, which are required for each operator
  1089   applied to a recursive set in the introduction rules.  There
  1090   \emph{must} be a theorem of the form \isa{{\isaliteral{22}{\isachardoublequote}}A\ {\isaliteral{5C3C6C653E}{\isasymle}}\ B\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ M\ A\ {\isaliteral{5C3C6C653E}{\isasymle}}\ M\ B{\isaliteral{22}{\isachardoublequote}}},
  1091   for each premise \isa{{\isaliteral{22}{\isachardoublequote}}M\ R\isaliteral{5C3C5E7375623E}{}\isactrlsub i\ t{\isaliteral{22}{\isachardoublequote}}} in an introduction rule!
  1092 
  1093   \item \hyperlink{command.HOL.inductive-set}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}set}}}} and \hyperlink{command.HOL.coinductive-set}{\mbox{\isa{\isacommand{coinductive{\isaliteral{5F}{\isacharunderscore}}set}}}} are wrappers for to the previous commands,
  1094   allowing the definition of (co)inductive sets.
  1095 
  1096   \item \hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}} declares monotonicity rules.  These
  1097   rule are involved in the automated monotonicity proof of \hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}.
  1098 
  1099   \end{description}%
  1100 \end{isamarkuptext}%
  1101 \isamarkuptrue%
  1102 %
  1103 \isamarkupsubsection{Derived rules%
  1104 }
  1105 \isamarkuptrue%
  1106 %
  1107 \begin{isamarkuptext}%
  1108 Each (co)inductive definition \isa{R} adds definitions to the
  1109   theory and also proves some theorems:
  1110 
  1111   \begin{description}
  1112 
  1113   \item \isa{R{\isaliteral{2E}{\isachardot}}intros} is the list of introduction rules as proven
  1114   theorems, for the recursive predicates (or sets).  The rules are
  1115   also available individually, using the names given them in the
  1116   theory file;
  1117 
  1118   \item \isa{R{\isaliteral{2E}{\isachardot}}cases} is the case analysis (or elimination) rule;
  1119 
  1120   \item \isa{R{\isaliteral{2E}{\isachardot}}induct} or \isa{R{\isaliteral{2E}{\isachardot}}coinduct} is the (co)induction
  1121   rule.
  1122 
  1123   \end{description}
  1124 
  1125   When several predicates \isa{{\isaliteral{22}{\isachardoublequote}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ R\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{22}{\isachardoublequote}}} are
  1126   defined simultaneously, the list of introduction rules is called
  1127   \isa{{\isaliteral{22}{\isachardoublequote}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{5F}{\isacharunderscore}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{5F}{\isacharunderscore}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{2E}{\isachardot}}intros{\isaliteral{22}{\isachardoublequote}}}, the case analysis rules are
  1128   called \isa{{\isaliteral{22}{\isachardoublequote}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{2E}{\isachardot}}cases{\isaliteral{2C}{\isacharcomma}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{2C}{\isacharcomma}}\ R\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{2E}{\isachardot}}cases{\isaliteral{22}{\isachardoublequote}}}, and the list
  1129   of mutual induction rules is called \isa{{\isaliteral{22}{\isachardoublequote}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{5F}{\isacharunderscore}}{\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{5F}{\isacharunderscore}}R\isaliteral{5C3C5E7375623E}{}\isactrlsub n{\isaliteral{2E}{\isachardot}}inducts{\isaliteral{22}{\isachardoublequote}}}.%
  1130 \end{isamarkuptext}%
  1131 \isamarkuptrue%
  1132 %
  1133 \isamarkupsubsection{Monotonicity theorems%
  1134 }
  1135 \isamarkuptrue%
  1136 %
  1137 \begin{isamarkuptext}%
  1138 Each theory contains a default set of theorems that are used in
  1139   monotonicity proofs.  New rules can be added to this set via the
  1140   \hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}} attribute.  The HOL theory \isa{Inductive}
  1141   shows how this is done.  In general, the following monotonicity
  1142   theorems may be added:
  1143 
  1144   \begin{itemize}
  1145 
  1146   \item Theorems of the form \isa{{\isaliteral{22}{\isachardoublequote}}A\ {\isaliteral{5C3C6C653E}{\isasymle}}\ B\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ M\ A\ {\isaliteral{5C3C6C653E}{\isasymle}}\ M\ B{\isaliteral{22}{\isachardoublequote}}}, for proving
  1147   monotonicity of inductive definitions whose introduction rules have
  1148   premises involving terms such as \isa{{\isaliteral{22}{\isachardoublequote}}M\ R\isaliteral{5C3C5E7375623E}{}\isactrlsub i\ t{\isaliteral{22}{\isachardoublequote}}}.
  1149 
  1150   \item Monotonicity theorems for logical operators, which are of the
  1151   general form \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{28}{\isacharparenleft}}{\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C4C6F6E6772696768746172726F773E}{\isasymLongrightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}{\isaliteral{22}{\isachardoublequote}}}.  For example, in
  1152   the case of the operator \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6F723E}{\isasymor}}{\isaliteral{22}{\isachardoublequote}}}, the corresponding theorem is
  1153   \[
  1154   \infer{\isa{{\isaliteral{22}{\isachardoublequote}}P\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C6F723E}{\isasymor}}\ P\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ Q\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C6F723E}{\isasymor}}\ Q\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}{\isaliteral{22}{\isachardoublequote}}}}{\isa{{\isaliteral{22}{\isachardoublequote}}P\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ Q\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}{\isaliteral{22}{\isachardoublequote}}} & \isa{{\isaliteral{22}{\isachardoublequote}}P\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ Q\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{2}}{\isaliteral{22}{\isachardoublequote}}}}
  1155   \]
  1156 
  1157   \item De Morgan style equations for reasoning about the ``polarity''
  1158   of expressions, e.g.
  1159   \[
  1160   \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ P\ {\isaliteral{5C3C6C6F6E676C65667472696768746172726F773E}{\isasymlongleftrightarrow}}\ P{\isaliteral{22}{\isachardoublequote}}} \qquad\qquad
  1161   \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{5C3C6E6F743E}{\isasymnot}}\ {\isaliteral{28}{\isacharparenleft}}P\ {\isaliteral{5C3C616E643E}{\isasymand}}\ Q{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6C6F6E676C65667472696768746172726F773E}{\isasymlongleftrightarrow}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ P\ {\isaliteral{5C3C6F723E}{\isasymor}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ Q{\isaliteral{22}{\isachardoublequote}}}
  1162   \]
  1163 
  1164   \item Equations for reducing complex operators to more primitive
  1165   ones whose monotonicity can easily be proved, e.g.
  1166   \[
  1167   \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{28}{\isacharparenleft}}P\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ Q{\isaliteral{29}{\isacharparenright}}\ {\isaliteral{5C3C6C6F6E676C65667472696768746172726F773E}{\isasymlongleftrightarrow}}\ {\isaliteral{5C3C6E6F743E}{\isasymnot}}\ P\ {\isaliteral{5C3C6F723E}{\isasymor}}\ Q{\isaliteral{22}{\isachardoublequote}}} \qquad\qquad
  1168   \isa{{\isaliteral{22}{\isachardoublequote}}Ball\ A\ P\ {\isaliteral{5C3C65717569763E}{\isasymequiv}}\ {\isaliteral{5C3C666F72616C6C3E}{\isasymforall}}x{\isaliteral{2E}{\isachardot}}\ x\ {\isaliteral{5C3C696E3E}{\isasymin}}\ A\ {\isaliteral{5C3C6C6F6E6772696768746172726F773E}{\isasymlongrightarrow}}\ P\ x{\isaliteral{22}{\isachardoublequote}}}
  1169   \]
  1170 
  1171   \end{itemize}
  1172 
  1173   %FIXME: Example of an inductive definition%
  1174 \end{isamarkuptext}%
  1175 \isamarkuptrue%
  1176 %
  1177 \isamarkupsection{Arithmetic proof support%
  1178 }
  1179 \isamarkuptrue%
  1180 %
  1181 \begin{isamarkuptext}%
  1182 \begin{matharray}{rcl}
  1183     \indexdef{HOL}{method}{arith}\hypertarget{method.HOL.arith}{\hyperlink{method.HOL.arith}{\mbox{\isa{arith}}}} & : & \isa{method} \\
  1184     \indexdef{HOL}{attribute}{arith}\hypertarget{attribute.HOL.arith}{\hyperlink{attribute.HOL.arith}{\mbox{\isa{arith}}}} & : & \isa{attribute} \\
  1185     \indexdef{HOL}{attribute}{arith\_split}\hypertarget{attribute.HOL.arith-split}{\hyperlink{attribute.HOL.arith-split}{\mbox{\isa{arith{\isaliteral{5F}{\isacharunderscore}}split}}}} & : & \isa{attribute} \\
  1186   \end{matharray}
  1187 
  1188   The \hyperlink{method.HOL.arith}{\mbox{\isa{arith}}} method decides linear arithmetic problems
  1189   (on types \isa{nat}, \isa{int}, \isa{real}).  Any current
  1190   facts are inserted into the goal before running the procedure.
  1191 
  1192   The \hyperlink{attribute.HOL.arith}{\mbox{\isa{arith}}} attribute declares facts that are
  1193   always supplied to the arithmetic provers implicitly.
  1194 
  1195   The \hyperlink{attribute.HOL.arith-split}{\mbox{\isa{arith{\isaliteral{5F}{\isacharunderscore}}split}}} attribute declares case split
  1196   rules to be expanded before \hyperlink{method.HOL.arith}{\mbox{\isa{arith}}} is invoked.
  1197 
  1198   Note that a simpler (but faster) arithmetic prover is
  1199   already invoked by the Simplifier.%
  1200 \end{isamarkuptext}%
  1201 \isamarkuptrue%
  1202 %
  1203 \isamarkupsection{Intuitionistic proof search%
  1204 }
  1205 \isamarkuptrue%
  1206 %
  1207 \begin{isamarkuptext}%
  1208 \begin{matharray}{rcl}
  1209     \indexdef{HOL}{method}{iprover}\hypertarget{method.HOL.iprover}{\hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}}} & : & \isa{method} \\
  1210   \end{matharray}
  1211 
  1212   \begin{railoutput}
  1213 \rail@begin{2}{\isa{}}
  1214 \rail@term{\hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}}}[]
  1215 \rail@plus
  1216 \rail@nextplus{1}
  1217 \rail@cnont{\hyperlink{syntax.rulemod}{\mbox{\isa{rulemod}}}}[]
  1218 \rail@endplus
  1219 \rail@end
  1220 \end{railoutput}
  1221 
  1222 
  1223   The \hyperlink{method.HOL.iprover}{\mbox{\isa{iprover}}} method performs intuitionistic proof
  1224   search, depending on specifically declared rules from the context,
  1225   or given as explicit arguments.  Chained facts are inserted into the
  1226   goal before commencing proof search.
  1227 
  1228   Rules need to be classified as \hyperlink{attribute.Pure.intro}{\mbox{\isa{intro}}},
  1229   \hyperlink{attribute.Pure.elim}{\mbox{\isa{elim}}}, or \hyperlink{attribute.Pure.dest}{\mbox{\isa{dest}}}; here the
  1230   ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{21}{\isacharbang}}{\isaliteral{22}{\isachardoublequote}}}'' indicator refers to ``safe'' rules, which may be
  1231   applied aggressively (without considering back-tracking later).
  1232   Rules declared with ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{3F}{\isacharquery}}{\isaliteral{22}{\isachardoublequote}}}'' are ignored in proof search (the
  1233   single-step \hyperlink{method.Pure.rule}{\mbox{\isa{rule}}} method still observes these).  An
  1234   explicit weight annotation may be given as well; otherwise the
  1235   number of rule premises will be taken into account here.%
  1236 \end{isamarkuptext}%
  1237 \isamarkuptrue%
  1238 %
  1239 \isamarkupsection{Coherent Logic%
  1240 }
  1241 \isamarkuptrue%
  1242 %
  1243 \begin{isamarkuptext}%
  1244 \begin{matharray}{rcl}
  1245     \indexdef{HOL}{method}{coherent}\hypertarget{method.HOL.coherent}{\hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}}} & : & \isa{method} \\
  1246   \end{matharray}
  1247 
  1248   \begin{railoutput}
  1249 \rail@begin{2}{\isa{}}
  1250 \rail@term{\hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}}}[]
  1251 \rail@bar
  1252 \rail@nextbar{1}
  1253 \rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
  1254 \rail@endbar
  1255 \rail@end
  1256 \end{railoutput}
  1257 
  1258 
  1259   The \hyperlink{method.HOL.coherent}{\mbox{\isa{coherent}}} method solves problems of
  1260   \emph{Coherent Logic} \cite{Bezem-Coquand:2005}, which covers
  1261   applications in confluence theory, lattice theory and projective
  1262   geometry.  See \verb|~~/src/HOL/ex/Coherent.thy| for some
  1263   examples.%
  1264 \end{isamarkuptext}%
  1265 \isamarkuptrue%
  1266 %
  1267 \isamarkupsection{Proving propositions%
  1268 }
  1269 \isamarkuptrue%
  1270 %
  1271 \begin{isamarkuptext}%
  1272 In addition to the standard proof methods, a number of diagnosis
  1273   tools search for proofs and provide an Isar proof snippet on success.
  1274   These tools are available via the following commands.
  1275 
  1276   \begin{matharray}{rcl}
  1277     \indexdef{HOL}{command}{solve\_direct}\hypertarget{command.HOL.solve-direct}{\hyperlink{command.HOL.solve-direct}{\mbox{\isa{\isacommand{solve{\isaliteral{5F}{\isacharunderscore}}direct}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1278     \indexdef{HOL}{command}{try}\hypertarget{command.HOL.try}{\hyperlink{command.HOL.try}{\mbox{\isa{\isacommand{try}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1279     \indexdef{HOL}{command}{sledgehammer}\hypertarget{command.HOL.sledgehammer}{\hyperlink{command.HOL.sledgehammer}{\mbox{\isa{\isacommand{sledgehammer}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1280     \indexdef{HOL}{command}{sledgehammer\_params}\hypertarget{command.HOL.sledgehammer-params}{\hyperlink{command.HOL.sledgehammer-params}{\mbox{\isa{\isacommand{sledgehammer{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
  1281   \end{matharray}
  1282 
  1283   \begin{railoutput}
  1284 \rail@begin{6}{\isa{}}
  1285 \rail@term{\hyperlink{command.HOL.try}{\mbox{\isa{\isacommand{try}}}}}[]
  1286 \rail@bar
  1287 \rail@nextbar{1}
  1288 \rail@plus
  1289 \rail@bar
  1290 \rail@term{\isa{simp}}[]
  1291 \rail@nextbar{2}
  1292 \rail@term{\isa{intro}}[]
  1293 \rail@nextbar{3}
  1294 \rail@term{\isa{elim}}[]
  1295 \rail@nextbar{4}
  1296 \rail@term{\isa{dest}}[]
  1297 \rail@endbar
  1298 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
  1299 \rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
  1300 \rail@nextplus{5}
  1301 \rail@endplus
  1302 \rail@endbar
  1303 \rail@bar
  1304 \rail@nextbar{1}
  1305 \rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
  1306 \rail@endbar
  1307 \rail@end
  1308 \rail@begin{2}{\isa{}}
  1309 \rail@term{\hyperlink{command.HOL.sledgehammer}{\mbox{\isa{\isacommand{sledgehammer}}}}}[]
  1310 \rail@bar
  1311 \rail@nextbar{1}
  1312 \rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
  1313 \rail@nont{\isa{args}}[]
  1314 \rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
  1315 \rail@endbar
  1316 \rail@bar
  1317 \rail@nextbar{1}
  1318 \rail@nont{\isa{facts}}[]
  1319 \rail@endbar
  1320 \rail@bar
  1321 \rail@nextbar{1}
  1322 \rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
  1323 \rail@endbar
  1324 \rail@end
  1325 \rail@begin{2}{\isa{}}
  1326 \rail@term{\hyperlink{command.HOL.sledgehammer-params}{\mbox{\isa{\isacommand{sledgehammer{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
  1327 \rail@bar
  1328 \rail@nextbar{1}
  1329 \rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
  1330 \rail@nont{\isa{args}}[]
  1331 \rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
  1332 \rail@endbar
  1333 \rail@end
  1334 \rail@begin{2}{\isa{args}}
  1335 \rail@plus
  1336 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  1337 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
  1338 \rail@nont{\isa{value}}[]
  1339 \rail@nextplus{1}
  1340 \rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
  1341 \rail@endplus
  1342 \rail@end
  1343 \rail@begin{5}{\isa{facts}}
  1344 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1345 \rail@bar
  1346 \rail@nextbar{1}
  1347 \rail@plus
  1348 \rail@bar
  1349 \rail@nextbar{2}
  1350 \rail@bar
  1351 \rail@term{\isa{add}}[]
  1352 \rail@nextbar{3}
  1353 \rail@term{\isa{del}}[]
  1354 \rail@endbar
  1355 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
  1356 \rail@endbar
  1357 \rail@nont{\hyperlink{syntax.thmrefs}{\mbox{\isa{thmrefs}}}}[]
  1358 \rail@nextplus{4}
  1359 \rail@endplus
  1360 \rail@endbar
  1361 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1362 \rail@end
  1363 \end{railoutput}
  1364  % FIXME try: proper clasimpmod!?
  1365   % FIXME check args "value"
  1366 
  1367   \begin{description}
  1368 
  1369   \item \hyperlink{command.HOL.solve-direct}{\mbox{\isa{\isacommand{solve{\isaliteral{5F}{\isacharunderscore}}direct}}}} checks whether the current subgoals can
  1370     be solved directly by an existing theorem. Duplicate lemmas can be detected
  1371     in this way.
  1372 
  1373   \item \hyperlink{command.HOL.try}{\mbox{\isa{\isacommand{try}}}} attempts to prove a subgoal using a combination
  1374     of standard proof methods (\isa{auto}, \isa{simp}, \isa{blast}, etc.).
  1375     Additional facts supplied via \isa{{\isaliteral{22}{\isachardoublequote}}simp{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}}, \isa{{\isaliteral{22}{\isachardoublequote}}intro{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}},
  1376     \isa{{\isaliteral{22}{\isachardoublequote}}elim{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}}, and \isa{{\isaliteral{22}{\isachardoublequote}}dest{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}} are passed to the appropriate proof
  1377     methods.
  1378 
  1379   \item \hyperlink{command.HOL.sledgehammer}{\mbox{\isa{\isacommand{sledgehammer}}}} attempts to prove a subgoal using external
  1380     automatic provers (resolution provers and SMT solvers). See the Sledgehammer
  1381     manual \cite{isabelle-sledgehammer} for details.
  1382 
  1383   \item \hyperlink{command.HOL.sledgehammer-params}{\mbox{\isa{\isacommand{sledgehammer{\isaliteral{5F}{\isacharunderscore}}params}}}} changes
  1384     \hyperlink{command.HOL.sledgehammer}{\mbox{\isa{\isacommand{sledgehammer}}}} configuration options persistently.
  1385 
  1386   \end{description}%
  1387 \end{isamarkuptext}%
  1388 \isamarkuptrue%
  1389 %
  1390 \isamarkupsection{Checking and refuting propositions%
  1391 }
  1392 \isamarkuptrue%
  1393 %
  1394 \begin{isamarkuptext}%
  1395 Identifying incorrect propositions usually involves evaluation of
  1396   particular assignments and systematic counterexample search.  This
  1397   is supported by the following commands.
  1398 
  1399   \begin{matharray}{rcl}
  1400     \indexdef{HOL}{command}{value}\hypertarget{command.HOL.value}{\hyperlink{command.HOL.value}{\mbox{\isa{\isacommand{value}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1401     \indexdef{HOL}{command}{quickcheck}\hypertarget{command.HOL.quickcheck}{\hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1402     \indexdef{HOL}{command}{refute}\hypertarget{command.HOL.refute}{\hyperlink{command.HOL.refute}{\mbox{\isa{\isacommand{refute}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1403     \indexdef{HOL}{command}{nitpick}\hypertarget{command.HOL.nitpick}{\hyperlink{command.HOL.nitpick}{\mbox{\isa{\isacommand{nitpick}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}proof\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1404     \indexdef{HOL}{command}{quickcheck\_params}\hypertarget{command.HOL.quickcheck-params}{\hyperlink{command.HOL.quickcheck-params}{\mbox{\isa{\isacommand{quickcheck{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1405     \indexdef{HOL}{command}{refute\_params}\hypertarget{command.HOL.refute-params}{\hyperlink{command.HOL.refute-params}{\mbox{\isa{\isacommand{refute{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1406     \indexdef{HOL}{command}{nitpick\_params}\hypertarget{command.HOL.nitpick-params}{\hyperlink{command.HOL.nitpick-params}{\mbox{\isa{\isacommand{nitpick{\isaliteral{5F}{\isacharunderscore}}params}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
  1407   \end{matharray}
  1408 
  1409   \begin{railoutput}
  1410 \rail@begin{2}{\isa{}}
  1411 \rail@term{\hyperlink{command.HOL.value}{\mbox{\isa{\isacommand{value}}}}}[]
  1412 \rail@bar
  1413 \rail@nextbar{1}
  1414 \rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
  1415 \rail@nont{\isa{name}}[]
  1416 \rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
  1417 \rail@endbar
  1418 \rail@bar
  1419 \rail@nextbar{1}
  1420 \rail@nont{\isa{modes}}[]
  1421 \rail@endbar
  1422 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  1423 \rail@end
  1424 \rail@begin{3}{\isa{}}
  1425 \rail@bar
  1426 \rail@term{\hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}}}[]
  1427 \rail@nextbar{1}
  1428 \rail@term{\hyperlink{command.HOL.refute}{\mbox{\isa{\isacommand{refute}}}}}[]
  1429 \rail@nextbar{2}
  1430 \rail@term{\hyperlink{command.HOL.nitpick}{\mbox{\isa{\isacommand{nitpick}}}}}[]
  1431 \rail@endbar
  1432 \rail@bar
  1433 \rail@nextbar{1}
  1434 \rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
  1435 \rail@nont{\isa{args}}[]
  1436 \rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
  1437 \rail@endbar
  1438 \rail@bar
  1439 \rail@nextbar{1}
  1440 \rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
  1441 \rail@endbar
  1442 \rail@end
  1443 \rail@begin{3}{\isa{}}
  1444 \rail@bar
  1445 \rail@term{\hyperlink{command.HOL.quickcheck-params}{\mbox{\isa{\isacommand{quickcheck{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
  1446 \rail@nextbar{1}
  1447 \rail@term{\hyperlink{command.HOL.refute-params}{\mbox{\isa{\isacommand{refute{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
  1448 \rail@nextbar{2}
  1449 \rail@term{\hyperlink{command.HOL.nitpick-params}{\mbox{\isa{\isacommand{nitpick{\isaliteral{5F}{\isacharunderscore}}params}}}}}[]
  1450 \rail@endbar
  1451 \rail@bar
  1452 \rail@nextbar{1}
  1453 \rail@term{\isa{{\isaliteral{5B}{\isacharbrackleft}}}}[]
  1454 \rail@nont{\isa{args}}[]
  1455 \rail@term{\isa{{\isaliteral{5D}{\isacharbrackright}}}}[]
  1456 \rail@endbar
  1457 \rail@end
  1458 \rail@begin{2}{\isa{modes}}
  1459 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1460 \rail@plus
  1461 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  1462 \rail@nextplus{1}
  1463 \rail@endplus
  1464 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1465 \rail@end
  1466 \rail@begin{2}{\isa{args}}
  1467 \rail@plus
  1468 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  1469 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
  1470 \rail@nont{\isa{value}}[]
  1471 \rail@nextplus{1}
  1472 \rail@cterm{\isa{{\isaliteral{2C}{\isacharcomma}}}}[]
  1473 \rail@endplus
  1474 \rail@end
  1475 \end{railoutput}
  1476  % FIXME check "value"
  1477 
  1478   \begin{description}
  1479 
  1480   \item \hyperlink{command.HOL.value}{\mbox{\isa{\isacommand{value}}}}~\isa{t} evaluates and prints a
  1481     term; optionally \isa{modes} can be specified, which are
  1482     appended to the current print mode (see also \cite{isabelle-ref}).
  1483     Internally, the evaluation is performed by registered evaluators,
  1484     which are invoked sequentially until a result is returned.
  1485     Alternatively a specific evaluator can be selected using square
  1486     brackets; typical evaluators use the current set of code equations
  1487     to normalize and include \isa{simp} for fully symbolic evaluation
  1488     using the simplifier, \isa{nbe} for \emph{normalization by evaluation}
  1489     and \emph{code} for code generation in SML.
  1490 
  1491   \item \hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}} tests the current goal for
  1492     counterexamples using a series of assignments for its
  1493     free variables; by default the first subgoal is tested, an other
  1494     can be selected explicitly using an optional goal index.
  1495     Assignments can be chosen exhausting the search space upto a given
  1496     size or using a fixed number of random assignments in the search space.
  1497     By default, quickcheck uses exhaustive testing.
  1498     A number of configuration options are supported for
  1499     \hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}}, notably:
  1500 
  1501     \begin{description}
  1502 
  1503     \item[\isa{tester}] specifies how to explore the search space
  1504       (e.g. exhaustive or random).
  1505       An unknown configuration option is treated as an argument to tester,
  1506       making \isa{{\isaliteral{22}{\isachardoublequote}}tester\ {\isaliteral{3D}{\isacharequal}}{\isaliteral{22}{\isachardoublequote}}} optional.
  1507     \item[\isa{size}] specifies the maximum size of the search space
  1508     for assignment values.
  1509 
  1510     \item[\isa{eval}] takes a term or a list of terms and evaluates
  1511       these terms under the variable assignment found by quickcheck.
  1512 
  1513     \item[\isa{iterations}] sets how many sets of assignments are
  1514     generated for each particular size.
  1515 
  1516     \item[\isa{no{\isaliteral{5F}{\isacharunderscore}}assms}] specifies whether assumptions in
  1517     structured proofs should be ignored.
  1518 
  1519     \item[\isa{timeout}] sets the time limit in seconds.
  1520 
  1521     \item[\isa{default{\isaliteral{5F}{\isacharunderscore}}type}] sets the type(s) generally used to
  1522     instantiate type variables.
  1523 
  1524     \item[\isa{report}] if set quickcheck reports how many tests
  1525     fulfilled the preconditions.
  1526 
  1527     \item[\isa{quiet}] if not set quickcheck informs about the
  1528     current size for assignment values.
  1529 
  1530     \item[\isa{expect}] can be used to check if the user's
  1531     expectation was met (\isa{no{\isaliteral{5F}{\isacharunderscore}}expectation}, \isa{no{\isaliteral{5F}{\isacharunderscore}}counterexample}, or \isa{counterexample}).
  1532 
  1533     \end{description}
  1534 
  1535     These option can be given within square brackets.
  1536 
  1537   \item \hyperlink{command.HOL.quickcheck-params}{\mbox{\isa{\isacommand{quickcheck{\isaliteral{5F}{\isacharunderscore}}params}}}} changes
  1538     \hyperlink{command.HOL.quickcheck}{\mbox{\isa{\isacommand{quickcheck}}}} configuration options persistently.
  1539 
  1540   \item \hyperlink{command.HOL.refute}{\mbox{\isa{\isacommand{refute}}}} tests the current goal for
  1541     counterexamples using a reduction to SAT. The following configuration
  1542     options are supported:
  1543 
  1544     \begin{description}
  1545 
  1546     \item[\isa{minsize}] specifies the minimum size (cardinality) of the
  1547       models to search for.
  1548 
  1549     \item[\isa{maxsize}] specifies the maximum size (cardinality) of the
  1550       models to search for. Nonpositive values mean $\infty$.
  1551 
  1552     \item[\isa{maxvars}] specifies the maximum number of Boolean variables
  1553     to use when transforming the term into a propositional formula.
  1554     Nonpositive values mean $\infty$.
  1555 
  1556     \item[\isa{satsolver}] specifies the SAT solver to use.
  1557 
  1558     \item[\isa{no{\isaliteral{5F}{\isacharunderscore}}assms}] specifies whether assumptions in
  1559     structured proofs should be ignored.
  1560 
  1561     \item[\isa{maxtime}] sets the time limit in seconds.
  1562 
  1563     \item[\isa{expect}] can be used to check if the user's
  1564     expectation was met (\isa{genuine}, \isa{potential},
  1565     \isa{none}, or \isa{unknown}).
  1566 
  1567     \end{description}
  1568 
  1569     These option can be given within square brackets.
  1570 
  1571   \item \hyperlink{command.HOL.refute-params}{\mbox{\isa{\isacommand{refute{\isaliteral{5F}{\isacharunderscore}}params}}}} changes
  1572     \hyperlink{command.HOL.refute}{\mbox{\isa{\isacommand{refute}}}} configuration options persistently.
  1573 
  1574   \item \hyperlink{command.HOL.nitpick}{\mbox{\isa{\isacommand{nitpick}}}} tests the current goal for counterexamples
  1575     using a reduction to first-order relational logic. See the Nitpick manual
  1576     \cite{isabelle-nitpick} for details.
  1577 
  1578   \item \hyperlink{command.HOL.nitpick-params}{\mbox{\isa{\isacommand{nitpick{\isaliteral{5F}{\isacharunderscore}}params}}}} changes
  1579     \hyperlink{command.HOL.nitpick}{\mbox{\isa{\isacommand{nitpick}}}} configuration options persistently.
  1580 
  1581   \end{description}%
  1582 \end{isamarkuptext}%
  1583 \isamarkuptrue%
  1584 %
  1585 \isamarkupsection{Unstructured case analysis and induction \label{sec:hol-induct-tac}%
  1586 }
  1587 \isamarkuptrue%
  1588 %
  1589 \begin{isamarkuptext}%
  1590 The following tools of Isabelle/HOL support cases analysis and
  1591   induction in unstructured tactic scripts; see also
  1592   \secref{sec:cases-induct} for proper Isar versions of similar ideas.
  1593 
  1594   \begin{matharray}{rcl}
  1595     \indexdef{HOL}{method}{case\_tac}\hypertarget{method.HOL.case-tac}{\hyperlink{method.HOL.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{method} \\
  1596     \indexdef{HOL}{method}{induct\_tac}\hypertarget{method.HOL.induct-tac}{\hyperlink{method.HOL.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{method} \\
  1597     \indexdef{HOL}{method}{ind\_cases}\hypertarget{method.HOL.ind-cases}{\hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{method} \\
  1598     \indexdef{HOL}{command}{inductive\_cases}\hypertarget{command.HOL.inductive-cases}{\hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}local{\isaliteral{5F}{\isacharunderscore}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ local{\isaliteral{5F}{\isacharunderscore}}theory{\isaliteral{22}{\isachardoublequote}}} \\
  1599   \end{matharray}
  1600 
  1601   \begin{railoutput}
  1602 \rail@begin{2}{\isa{}}
  1603 \rail@term{\hyperlink{method.HOL.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
  1604 \rail@bar
  1605 \rail@nextbar{1}
  1606 \rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
  1607 \rail@endbar
  1608 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  1609 \rail@bar
  1610 \rail@nextbar{1}
  1611 \rail@nont{\isa{rule}}[]
  1612 \rail@endbar
  1613 \rail@end
  1614 \rail@begin{3}{\isa{}}
  1615 \rail@term{\hyperlink{method.HOL.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}}}[]
  1616 \rail@bar
  1617 \rail@nextbar{1}
  1618 \rail@nont{\hyperlink{syntax.goalspec}{\mbox{\isa{goalspec}}}}[]
  1619 \rail@endbar
  1620 \rail@bar
  1621 \rail@nextbar{1}
  1622 \rail@plus
  1623 \rail@nont{\hyperlink{syntax.insts}{\mbox{\isa{insts}}}}[]
  1624 \rail@nextplus{2}
  1625 \rail@cterm{\isa{\isakeyword{and}}}[]
  1626 \rail@endplus
  1627 \rail@endbar
  1628 \rail@bar
  1629 \rail@nextbar{1}
  1630 \rail@nont{\isa{rule}}[]
  1631 \rail@endbar
  1632 \rail@end
  1633 \rail@begin{3}{\isa{}}
  1634 \rail@term{\hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}}}[]
  1635 \rail@plus
  1636 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
  1637 \rail@nextplus{1}
  1638 \rail@endplus
  1639 \rail@bar
  1640 \rail@nextbar{1}
  1641 \rail@term{\isa{\isakeyword{for}}}[]
  1642 \rail@plus
  1643 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  1644 \rail@nextplus{2}
  1645 \rail@endplus
  1646 \rail@endbar
  1647 \rail@end
  1648 \rail@begin{3}{\isa{}}
  1649 \rail@term{\hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}}}[]
  1650 \rail@plus
  1651 \rail@bar
  1652 \rail@nextbar{1}
  1653 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
  1654 \rail@endbar
  1655 \rail@plus
  1656 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
  1657 \rail@nextplus{1}
  1658 \rail@endplus
  1659 \rail@nextplus{2}
  1660 \rail@cterm{\isa{\isakeyword{and}}}[]
  1661 \rail@endplus
  1662 \rail@end
  1663 \rail@begin{1}{\isa{rule}}
  1664 \rail@term{\isa{rule}}[]
  1665 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
  1666 \rail@nont{\hyperlink{syntax.thmref}{\mbox{\isa{thmref}}}}[]
  1667 \rail@end
  1668 \end{railoutput}
  1669 
  1670 
  1671   \begin{description}
  1672 
  1673   \item \hyperlink{method.HOL.case-tac}{\mbox{\isa{case{\isaliteral{5F}{\isacharunderscore}}tac}}} and \hyperlink{method.HOL.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}} admit
  1674   to reason about inductive types.  Rules are selected according to
  1675   the declarations by the \hyperlink{attribute.cases}{\mbox{\isa{cases}}} and \hyperlink{attribute.induct}{\mbox{\isa{induct}}}
  1676   attributes, cf.\ \secref{sec:cases-induct}.  The \hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}} package already takes care of this.
  1677 
  1678   These unstructured tactics feature both goal addressing and dynamic
  1679   instantiation.  Note that named rule cases are \emph{not} provided
  1680   as would be by the proper \hyperlink{method.cases}{\mbox{\isa{cases}}} and \hyperlink{method.induct}{\mbox{\isa{induct}}} proof
  1681   methods (see \secref{sec:cases-induct}).  Unlike the \hyperlink{method.induct}{\mbox{\isa{induct}}} method, \hyperlink{method.induct-tac}{\mbox{\isa{induct{\isaliteral{5F}{\isacharunderscore}}tac}}} does not handle structured rule
  1682   statements, only the compact object-logic conclusion of the subgoal
  1683   being addressed.
  1684 
  1685   \item \hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}} and \hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}} provide an interface to the internal \verb|mk_cases| operation.  Rules are simplified in an unrestricted
  1686   forward manner.
  1687 
  1688   While \hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}} is a proof method to apply the
  1689   result immediately as elimination rules, \hyperlink{command.HOL.inductive-cases}{\mbox{\isa{\isacommand{inductive{\isaliteral{5F}{\isacharunderscore}}cases}}}} provides case split theorems at the theory level
  1690   for later use.  The \hyperlink{keyword.for}{\mbox{\isa{\isakeyword{for}}}} argument of the \hyperlink{method.HOL.ind-cases}{\mbox{\isa{ind{\isaliteral{5F}{\isacharunderscore}}cases}}} method allows to specify a list of variables that should
  1691   be generalized before applying the resulting rule.
  1692 
  1693   \end{description}%
  1694 \end{isamarkuptext}%
  1695 \isamarkuptrue%
  1696 %
  1697 \isamarkupsection{Executable code%
  1698 }
  1699 \isamarkuptrue%
  1700 %
  1701 \begin{isamarkuptext}%
  1702 Isabelle/Pure provides two generic frameworks to support code
  1703   generation from executable specifications.  Isabelle/HOL
  1704   instantiates these mechanisms in a way that is amenable to end-user
  1705   applications.
  1706 
  1707   \medskip One framework generates code from functional programs
  1708   (including overloading using type classes) to SML \cite{SML}, OCaml
  1709   \cite{OCaml}, Haskell \cite{haskell-revised-report} and Scala
  1710   \cite{scala-overview-tech-report}.
  1711   Conceptually, code generation is split up in three steps:
  1712   \emph{selection} of code theorems, \emph{translation} into an
  1713   abstract executable view and \emph{serialization} to a specific
  1714   \emph{target language}.  Inductive specifications can be executed
  1715   using the predicate compiler which operates within HOL.
  1716   See \cite{isabelle-codegen} for an introduction.
  1717 
  1718   \begin{matharray}{rcl}
  1719     \indexdef{HOL}{command}{export\_code}\hypertarget{command.HOL.export-code}{\hyperlink{command.HOL.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1720     \indexdef{HOL}{attribute}{code}\hypertarget{attribute.HOL.code}{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}} & : & \isa{attribute} \\
  1721     \indexdef{HOL}{command}{code\_abort}\hypertarget{command.HOL.code-abort}{\hyperlink{command.HOL.code-abort}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}abort}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1722     \indexdef{HOL}{command}{code\_datatype}\hypertarget{command.HOL.code-datatype}{\hyperlink{command.HOL.code-datatype}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1723     \indexdef{HOL}{command}{print\_codesetup}\hypertarget{command.HOL.print-codesetup}{\hyperlink{command.HOL.print-codesetup}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}codesetup}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1724     \indexdef{HOL}{attribute}{code\_inline}\hypertarget{attribute.HOL.code-inline}{\hyperlink{attribute.HOL.code-inline}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}inline}}}} & : & \isa{attribute} \\
  1725     \indexdef{HOL}{attribute}{code\_post}\hypertarget{attribute.HOL.code-post}{\hyperlink{attribute.HOL.code-post}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}post}}}} & : & \isa{attribute} \\
  1726     \indexdef{HOL}{command}{print\_codeproc}\hypertarget{command.HOL.print-codeproc}{\hyperlink{command.HOL.print-codeproc}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}codeproc}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1727     \indexdef{HOL}{command}{code\_thms}\hypertarget{command.HOL.code-thms}{\hyperlink{command.HOL.code-thms}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}thms}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1728     \indexdef{HOL}{command}{code\_deps}\hypertarget{command.HOL.code-deps}{\hyperlink{command.HOL.code-deps}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}deps}}}}}\isa{{\isaliteral{22}{\isachardoublequote}}\isaliteral{5C3C5E7375703E}{}\isactrlsup {\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}context\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}{\isaliteral{22}{\isachardoublequote}}} \\
  1729     \indexdef{HOL}{command}{code\_const}\hypertarget{command.HOL.code-const}{\hyperlink{command.HOL.code-const}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}const}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1730     \indexdef{HOL}{command}{code\_type}\hypertarget{command.HOL.code-type}{\hyperlink{command.HOL.code-type}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}type}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1731     \indexdef{HOL}{command}{code\_class}\hypertarget{command.HOL.code-class}{\hyperlink{command.HOL.code-class}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}class}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1732     \indexdef{HOL}{command}{code\_instance}\hypertarget{command.HOL.code-instance}{\hyperlink{command.HOL.code-instance}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}instance}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1733     \indexdef{HOL}{command}{code\_reserved}\hypertarget{command.HOL.code-reserved}{\hyperlink{command.HOL.code-reserved}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reserved}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1734     \indexdef{HOL}{command}{code\_monad}\hypertarget{command.HOL.code-monad}{\hyperlink{command.HOL.code-monad}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}monad}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1735     \indexdef{HOL}{command}{code\_include}\hypertarget{command.HOL.code-include}{\hyperlink{command.HOL.code-include}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}include}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1736     \indexdef{HOL}{command}{code\_modulename}\hypertarget{command.HOL.code-modulename}{\hyperlink{command.HOL.code-modulename}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}modulename}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  1737     \indexdef{HOL}{command}{code\_reflect}\hypertarget{command.HOL.code-reflect}{\hyperlink{command.HOL.code-reflect}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reflect}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}}
  1738   \end{matharray}
  1739 
  1740   \begin{railoutput}
  1741 \rail@begin{11}{\isa{}}
  1742 \rail@term{\hyperlink{command.HOL.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
  1743 \rail@plus
  1744 \rail@nont{\isa{constexpr}}[]
  1745 \rail@nextplus{1}
  1746 \rail@endplus
  1747 \rail@cr{3}
  1748 \rail@bar
  1749 \rail@nextbar{4}
  1750 \rail@plus
  1751 \rail@term{\isa{\isakeyword{in}}}[]
  1752 \rail@nont{\isa{target}}[]
  1753 \rail@bar
  1754 \rail@nextbar{5}
  1755 \rail@term{\isa{\isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}}}[]
  1756 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1757 \rail@endbar
  1758 \rail@cr{7}
  1759 \rail@bar
  1760 \rail@nextbar{8}
  1761 \rail@term{\isa{\isakeyword{file}}}[]
  1762 \rail@bar
  1763 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1764 \rail@nextbar{9}
  1765 \rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
  1766 \rail@endbar
  1767 \rail@endbar
  1768 \rail@bar
  1769 \rail@nextbar{8}
  1770 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1771 \rail@nont{\isa{args}}[]
  1772 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1773 \rail@endbar
  1774 \rail@nextplus{10}
  1775 \rail@endplus
  1776 \rail@endbar
  1777 \rail@end
  1778 \rail@begin{1}{\isa{const}}
  1779 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  1780 \rail@end
  1781 \rail@begin{3}{\isa{constexpr}}
  1782 \rail@bar
  1783 \rail@nont{\isa{const}}[]
  1784 \rail@nextbar{1}
  1785 \rail@term{\isa{name{\isaliteral{2E}{\isachardot}}{\isaliteral{5F}{\isacharunderscore}}}}[]
  1786 \rail@nextbar{2}
  1787 \rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
  1788 \rail@endbar
  1789 \rail@end
  1790 \rail@begin{1}{\isa{typeconstructor}}
  1791 \rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
  1792 \rail@end
  1793 \rail@begin{1}{\isa{class}}
  1794 \rail@nont{\hyperlink{syntax.nameref}{\mbox{\isa{nameref}}}}[]
  1795 \rail@end
  1796 \rail@begin{4}{\isa{target}}
  1797 \rail@bar
  1798 \rail@term{\isa{SML}}[]
  1799 \rail@nextbar{1}
  1800 \rail@term{\isa{OCaml}}[]
  1801 \rail@nextbar{2}
  1802 \rail@term{\isa{Haskell}}[]
  1803 \rail@nextbar{3}
  1804 \rail@term{\isa{Scala}}[]
  1805 \rail@endbar
  1806 \rail@end
  1807 \rail@begin{4}{\isa{}}
  1808 \rail@term{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}}[]
  1809 \rail@bar
  1810 \rail@nextbar{1}
  1811 \rail@bar
  1812 \rail@term{\isa{del}}[]
  1813 \rail@nextbar{2}
  1814 \rail@term{\isa{abstype}}[]
  1815 \rail@nextbar{3}
  1816 \rail@term{\isa{abstract}}[]
  1817 \rail@endbar
  1818 \rail@endbar
  1819 \rail@end
  1820 \rail@begin{2}{\isa{}}
  1821 \rail@term{\hyperlink{command.HOL.code-abort}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}abort}}}}}[]
  1822 \rail@plus
  1823 \rail@nont{\isa{const}}[]
  1824 \rail@nextplus{1}
  1825 \rail@endplus
  1826 \rail@end
  1827 \rail@begin{2}{\isa{}}
  1828 \rail@term{\hyperlink{command.HOL.code-datatype}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}}}}}[]
  1829 \rail@plus
  1830 \rail@nont{\isa{const}}[]
  1831 \rail@nextplus{1}
  1832 \rail@endplus
  1833 \rail@end
  1834 \rail@begin{2}{\isa{}}
  1835 \rail@term{\hyperlink{attribute.HOL.code-inline}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}inline}}}}[]
  1836 \rail@bar
  1837 \rail@nextbar{1}
  1838 \rail@term{\isa{del}}[]
  1839 \rail@endbar
  1840 \rail@end
  1841 \rail@begin{2}{\isa{}}
  1842 \rail@term{\hyperlink{attribute.HOL.code-post}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}post}}}}[]
  1843 \rail@bar
  1844 \rail@nextbar{1}
  1845 \rail@term{\isa{del}}[]
  1846 \rail@endbar
  1847 \rail@end
  1848 \rail@begin{3}{\isa{}}
  1849 \rail@term{\hyperlink{command.HOL.code-thms}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}thms}}}}}[]
  1850 \rail@bar
  1851 \rail@nextbar{1}
  1852 \rail@plus
  1853 \rail@nont{\isa{constexpr}}[]
  1854 \rail@nextplus{2}
  1855 \rail@endplus
  1856 \rail@endbar
  1857 \rail@end
  1858 \rail@begin{3}{\isa{}}
  1859 \rail@term{\hyperlink{command.HOL.code-deps}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}deps}}}}}[]
  1860 \rail@bar
  1861 \rail@nextbar{1}
  1862 \rail@plus
  1863 \rail@nont{\isa{constexpr}}[]
  1864 \rail@nextplus{2}
  1865 \rail@endplus
  1866 \rail@endbar
  1867 \rail@end
  1868 \rail@begin{7}{\isa{}}
  1869 \rail@term{\hyperlink{command.HOL.code-const}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}const}}}}}[]
  1870 \rail@plus
  1871 \rail@nont{\isa{const}}[]
  1872 \rail@nextplus{1}
  1873 \rail@cterm{\isa{\isakeyword{and}}}[]
  1874 \rail@endplus
  1875 \rail@cr{3}
  1876 \rail@plus
  1877 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1878 \rail@nont{\isa{target}}[]
  1879 \rail@plus
  1880 \rail@bar
  1881 \rail@nextbar{4}
  1882 \rail@nont{\isa{syntax}}[]
  1883 \rail@endbar
  1884 \rail@nextplus{5}
  1885 \rail@cterm{\isa{\isakeyword{and}}}[]
  1886 \rail@endplus
  1887 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1888 \rail@nextplus{6}
  1889 \rail@endplus
  1890 \rail@end
  1891 \rail@begin{7}{\isa{}}
  1892 \rail@term{\hyperlink{command.HOL.code-type}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}type}}}}}[]
  1893 \rail@plus
  1894 \rail@nont{\isa{typeconstructor}}[]
  1895 \rail@nextplus{1}
  1896 \rail@cterm{\isa{\isakeyword{and}}}[]
  1897 \rail@endplus
  1898 \rail@cr{3}
  1899 \rail@plus
  1900 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1901 \rail@nont{\isa{target}}[]
  1902 \rail@plus
  1903 \rail@bar
  1904 \rail@nextbar{4}
  1905 \rail@nont{\isa{syntax}}[]
  1906 \rail@endbar
  1907 \rail@nextplus{5}
  1908 \rail@cterm{\isa{\isakeyword{and}}}[]
  1909 \rail@endplus
  1910 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1911 \rail@nextplus{6}
  1912 \rail@endplus
  1913 \rail@end
  1914 \rail@begin{9}{\isa{}}
  1915 \rail@term{\hyperlink{command.HOL.code-class}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}class}}}}}[]
  1916 \rail@plus
  1917 \rail@nont{\isa{class}}[]
  1918 \rail@nextplus{1}
  1919 \rail@cterm{\isa{\isakeyword{and}}}[]
  1920 \rail@endplus
  1921 \rail@cr{3}
  1922 \rail@plus
  1923 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1924 \rail@nont{\isa{target}}[]
  1925 \rail@cr{5}
  1926 \rail@plus
  1927 \rail@bar
  1928 \rail@nextbar{6}
  1929 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1930 \rail@endbar
  1931 \rail@nextplus{7}
  1932 \rail@cterm{\isa{\isakeyword{and}}}[]
  1933 \rail@endplus
  1934 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1935 \rail@nextplus{8}
  1936 \rail@endplus
  1937 \rail@end
  1938 \rail@begin{7}{\isa{}}
  1939 \rail@term{\hyperlink{command.HOL.code-instance}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}instance}}}}}[]
  1940 \rail@plus
  1941 \rail@nont{\isa{typeconstructor}}[]
  1942 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}{\isaliteral{3A}{\isacharcolon}}}}[]
  1943 \rail@nont{\isa{class}}[]
  1944 \rail@nextplus{1}
  1945 \rail@cterm{\isa{\isakeyword{and}}}[]
  1946 \rail@endplus
  1947 \rail@cr{3}
  1948 \rail@plus
  1949 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  1950 \rail@nont{\isa{target}}[]
  1951 \rail@plus
  1952 \rail@bar
  1953 \rail@nextbar{4}
  1954 \rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
  1955 \rail@endbar
  1956 \rail@nextplus{5}
  1957 \rail@cterm{\isa{\isakeyword{and}}}[]
  1958 \rail@endplus
  1959 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  1960 \rail@nextplus{6}
  1961 \rail@endplus
  1962 \rail@end
  1963 \rail@begin{2}{\isa{}}
  1964 \rail@term{\hyperlink{command.HOL.code-reserved}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reserved}}}}}[]
  1965 \rail@nont{\isa{target}}[]
  1966 \rail@plus
  1967 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1968 \rail@nextplus{1}
  1969 \rail@endplus
  1970 \rail@end
  1971 \rail@begin{1}{\isa{}}
  1972 \rail@term{\hyperlink{command.HOL.code-monad}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}monad}}}}}[]
  1973 \rail@nont{\isa{const}}[]
  1974 \rail@nont{\isa{const}}[]
  1975 \rail@nont{\isa{target}}[]
  1976 \rail@end
  1977 \rail@begin{2}{\isa{}}
  1978 \rail@term{\hyperlink{command.HOL.code-include}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}include}}}}}[]
  1979 \rail@nont{\isa{target}}[]
  1980 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1981 \rail@bar
  1982 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1983 \rail@nextbar{1}
  1984 \rail@term{\isa{{\isaliteral{2D}{\isacharminus}}}}[]
  1985 \rail@endbar
  1986 \rail@end
  1987 \rail@begin{2}{\isa{}}
  1988 \rail@term{\hyperlink{command.HOL.code-modulename}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}modulename}}}}}[]
  1989 \rail@nont{\isa{target}}[]
  1990 \rail@plus
  1991 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1992 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1993 \rail@nextplus{1}
  1994 \rail@endplus
  1995 \rail@end
  1996 \rail@begin{11}{\isa{}}
  1997 \rail@term{\hyperlink{command.HOL.code-reflect}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reflect}}}}}[]
  1998 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  1999 \rail@cr{2}
  2000 \rail@bar
  2001 \rail@nextbar{3}
  2002 \rail@term{\isa{\isakeyword{datatypes}}}[]
  2003 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2004 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
  2005 \rail@bar
  2006 \rail@term{\isa{{\isaliteral{5F}{\isacharunderscore}}}}[]
  2007 \rail@nextbar{4}
  2008 \rail@plus
  2009 \rail@plus
  2010 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2011 \rail@nextplus{5}
  2012 \rail@cterm{\isa{{\isaliteral{7C}{\isacharbar}}}}[]
  2013 \rail@endplus
  2014 \rail@nextplus{6}
  2015 \rail@cterm{\isa{\isakeyword{and}}}[]
  2016 \rail@endplus
  2017 \rail@endbar
  2018 \rail@endbar
  2019 \rail@cr{8}
  2020 \rail@bar
  2021 \rail@nextbar{9}
  2022 \rail@term{\isa{\isakeyword{functions}}}[]
  2023 \rail@plus
  2024 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2025 \rail@nextplus{10}
  2026 \rail@endplus
  2027 \rail@endbar
  2028 \rail@bar
  2029 \rail@nextbar{9}
  2030 \rail@term{\isa{\isakeyword{file}}}[]
  2031 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2032 \rail@endbar
  2033 \rail@end
  2034 \rail@begin{4}{\isa{syntax}}
  2035 \rail@bar
  2036 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2037 \rail@nextbar{1}
  2038 \rail@bar
  2039 \rail@term{\isa{\isakeyword{infix}}}[]
  2040 \rail@nextbar{2}
  2041 \rail@term{\isa{\isakeyword{infixl}}}[]
  2042 \rail@nextbar{3}
  2043 \rail@term{\isa{\isakeyword{infixr}}}[]
  2044 \rail@endbar
  2045 \rail@nont{\hyperlink{syntax.nat}{\mbox{\isa{nat}}}}[]
  2046 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2047 \rail@endbar
  2048 \rail@end
  2049 \end{railoutput}
  2050 
  2051 
  2052   \begin{description}
  2053 
  2054   \item \hyperlink{command.HOL.export-code}{\mbox{\isa{\isacommand{export{\isaliteral{5F}{\isacharunderscore}}code}}}} generates code for a given list
  2055   of constants in the specified target language(s).  If no
  2056   serialization instruction is given, only abstract code is generated
  2057   internally.
  2058 
  2059   Constants may be specified by giving them literally, referring to
  2060   all executable contants within a certain theory by giving \isa{{\isaliteral{22}{\isachardoublequote}}name{\isaliteral{2E}{\isachardot}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}}, or referring to \emph{all} executable constants currently
  2061   available by giving \isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{2A}{\isacharasterisk}}{\isaliteral{22}{\isachardoublequote}}}.
  2062 
  2063   By default, for each involved theory one corresponding name space
  2064   module is generated.  Alternativly, a module name may be specified
  2065   after the \hyperlink{keyword.module-name}{\mbox{\isa{\isakeyword{module{\isaliteral{5F}{\isacharunderscore}}name}}}} keyword; then \emph{all} code is
  2066   placed in this module.
  2067 
  2068   For \emph{SML}, \emph{OCaml} and \emph{Scala} the file specification
  2069   refers to a single file; for \emph{Haskell}, it refers to a whole
  2070   directory, where code is generated in multiple files reflecting the
  2071   module hierarchy.  Omitting the file specification denotes standard
  2072   output.
  2073 
  2074   Serializers take an optional list of arguments in parentheses.  For
  2075   \emph{SML} and \emph{OCaml}, ``\isa{no{\isaliteral{5F}{\isacharunderscore}}signatures}`` omits
  2076   explicit module signatures.
  2077 
  2078   For \emph{Haskell} a module name prefix may be given using the
  2079   ``\isa{{\isaliteral{22}{\isachardoublequote}}root{\isaliteral{3A}{\isacharcolon}}{\isaliteral{22}{\isachardoublequote}}}'' argument; ``\isa{string{\isaliteral{5F}{\isacharunderscore}}classes}'' adds a
  2080   ``\verb|deriving (Read, Show)|'' clause to each appropriate
  2081   datatype declaration.
  2082 
  2083   \item \hyperlink{attribute.HOL.code}{\mbox{\isa{code}}} explicitly selects (or with option
  2084   ``\isa{{\isaliteral{22}{\isachardoublequote}}del{\isaliteral{22}{\isachardoublequote}}}'' deselects) a code equation for code generation.
  2085   Usually packages introducing code equations provide a reasonable
  2086   default setup for selection.  Variants \isa{{\isaliteral{22}{\isachardoublequote}}code\ abstype{\isaliteral{22}{\isachardoublequote}}} and
  2087   \isa{{\isaliteral{22}{\isachardoublequote}}code\ abstract{\isaliteral{22}{\isachardoublequote}}} declare abstract datatype certificates or
  2088   code equations on abstract datatype representations respectively.
  2089 
  2090   \item \hyperlink{command.HOL.code-abort}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}abort}}}} declares constants which are not
  2091   required to have a definition by means of code equations; if needed
  2092   these are implemented by program abort instead.
  2093 
  2094   \item \hyperlink{command.HOL.code-datatype}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}datatype}}}} specifies a constructor set
  2095   for a logical type.
  2096 
  2097   \item \hyperlink{command.HOL.print-codesetup}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}codesetup}}}} gives an overview on
  2098   selected code equations and code generator datatypes.
  2099 
  2100   \item \hyperlink{attribute.HOL.code-inline}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}inline}}} declares (or with option
  2101   ``\isa{{\isaliteral{22}{\isachardoublequote}}del{\isaliteral{22}{\isachardoublequote}}}'' removes) inlining theorems which are applied as
  2102   rewrite rules to any code equation during preprocessing.
  2103 
  2104   \item \hyperlink{attribute.HOL.code-post}{\mbox{\isa{code{\isaliteral{5F}{\isacharunderscore}}post}}} declares (or with option ``\isa{{\isaliteral{22}{\isachardoublequote}}del{\isaliteral{22}{\isachardoublequote}}}'' removes) theorems which are applied as rewrite rules to any
  2105   result of an evaluation.
  2106 
  2107   \item \hyperlink{command.HOL.print-codeproc}{\mbox{\isa{\isacommand{print{\isaliteral{5F}{\isacharunderscore}}codeproc}}}} prints the setup of the code
  2108   generator preprocessor.
  2109 
  2110   \item \hyperlink{command.HOL.code-thms}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}thms}}}} prints a list of theorems
  2111   representing the corresponding program containing all given
  2112   constants after preprocessing.
  2113 
  2114   \item \hyperlink{command.HOL.code-deps}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}deps}}}} visualizes dependencies of
  2115   theorems representing the corresponding program containing all given
  2116   constants after preprocessing.
  2117 
  2118   \item \hyperlink{command.HOL.code-const}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}const}}}} associates a list of constants
  2119   with target-specific serializations; omitting a serialization
  2120   deletes an existing serialization.
  2121 
  2122   \item \hyperlink{command.HOL.code-type}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}type}}}} associates a list of type
  2123   constructors with target-specific serializations; omitting a
  2124   serialization deletes an existing serialization.
  2125 
  2126   \item \hyperlink{command.HOL.code-class}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}class}}}} associates a list of classes
  2127   with target-specific class names; omitting a serialization deletes
  2128   an existing serialization.  This applies only to \emph{Haskell}.
  2129 
  2130   \item \hyperlink{command.HOL.code-instance}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}instance}}}} declares a list of type
  2131   constructor / class instance relations as ``already present'' for a
  2132   given target.  Omitting a ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{2D}{\isacharminus}}{\isaliteral{22}{\isachardoublequote}}}'' deletes an existing
  2133   ``already present'' declaration.  This applies only to
  2134   \emph{Haskell}.
  2135 
  2136   \item \hyperlink{command.HOL.code-reserved}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reserved}}}} declares a list of names as
  2137   reserved for a given target, preventing it to be shadowed by any
  2138   generated code.
  2139 
  2140   \item \hyperlink{command.HOL.code-monad}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}monad}}}} provides an auxiliary mechanism
  2141   to generate monadic code for Haskell.
  2142 
  2143   \item \hyperlink{command.HOL.code-include}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}include}}}} adds arbitrary named content
  2144   (``include'') to generated code.  A ``\isa{{\isaliteral{22}{\isachardoublequote}}{\isaliteral{2D}{\isacharminus}}{\isaliteral{22}{\isachardoublequote}}}'' as last argument
  2145   will remove an already added ``include''.
  2146 
  2147   \item \hyperlink{command.HOL.code-modulename}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}modulename}}}} declares aliasings from one
  2148   module name onto another.
  2149 
  2150   \item \hyperlink{command.HOL.code-reflect}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}reflect}}}} without a ``\isa{{\isaliteral{22}{\isachardoublequote}}file{\isaliteral{22}{\isachardoublequote}}}''
  2151   argument compiles code into the system runtime environment and
  2152   modifies the code generator setup that future invocations of system
  2153   runtime code generation referring to one of the ``\isa{{\isaliteral{22}{\isachardoublequote}}datatypes{\isaliteral{22}{\isachardoublequote}}}'' or ``\isa{{\isaliteral{22}{\isachardoublequote}}functions{\isaliteral{22}{\isachardoublequote}}}'' entities use these precompiled
  2154   entities.  With a ``\isa{{\isaliteral{22}{\isachardoublequote}}file{\isaliteral{22}{\isachardoublequote}}}'' argument, the corresponding code
  2155   is generated into that specified file without modifying the code
  2156   generator setup.
  2157 
  2158   \end{description}
  2159 
  2160   The other framework generates code from both functional and
  2161   relational programs to SML.  See \cite{isabelle-HOL} for further
  2162   information (this actually covers the new-style theory format as
  2163   well).
  2164 
  2165   \begin{matharray}{rcl}
  2166     \indexdef{HOL}{command}{code\_module}\hypertarget{command.HOL.code-module}{\hyperlink{command.HOL.code-module}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}module}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  2167     \indexdef{HOL}{command}{code\_library}\hypertarget{command.HOL.code-library}{\hyperlink{command.HOL.code-library}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}library}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  2168     \indexdef{HOL}{command}{consts\_code}\hypertarget{command.HOL.consts-code}{\hyperlink{command.HOL.consts-code}{\mbox{\isa{\isacommand{consts{\isaliteral{5F}{\isacharunderscore}}code}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  2169     \indexdef{HOL}{command}{types\_code}\hypertarget{command.HOL.types-code}{\hyperlink{command.HOL.types-code}{\mbox{\isa{\isacommand{types{\isaliteral{5F}{\isacharunderscore}}code}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ theory{\isaliteral{22}{\isachardoublequote}}} \\
  2170     \indexdef{}{attribute}{code}\hypertarget{attribute.code}{\hyperlink{attribute.code}{\mbox{\isa{code}}}} & : & \isa{attribute} \\
  2171   \end{matharray}
  2172 
  2173   \begin{railoutput}
  2174 \rail@begin{11}{\isa{}}
  2175 \rail@bar
  2176 \rail@term{\hyperlink{command.HOL.code-module}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}module}}}}}[]
  2177 \rail@nextbar{1}
  2178 \rail@term{\hyperlink{command.HOL.code-library}{\mbox{\isa{\isacommand{code{\isaliteral{5F}{\isacharunderscore}}library}}}}}[]
  2179 \rail@endbar
  2180 \rail@bar
  2181 \rail@nextbar{1}
  2182 \rail@nont{\isa{modespec}}[]
  2183 \rail@endbar
  2184 \rail@bar
  2185 \rail@nextbar{1}
  2186 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2187 \rail@endbar
  2188 \rail@cr{3}
  2189 \rail@bar
  2190 \rail@nextbar{4}
  2191 \rail@term{\isa{\isakeyword{file}}}[]
  2192 \rail@nont{\isa{name}}[]
  2193 \rail@endbar
  2194 \rail@bar
  2195 \rail@nextbar{4}
  2196 \rail@term{\isa{\isakeyword{imports}}}[]
  2197 \rail@plus
  2198 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2199 \rail@nextplus{5}
  2200 \rail@endplus
  2201 \rail@endbar
  2202 \rail@cr{7}
  2203 \rail@term{\isa{\isakeyword{contains}}}[]
  2204 \rail@bar
  2205 \rail@plus
  2206 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2207 \rail@term{\isa{{\isaliteral{3D}{\isacharequal}}}}[]
  2208 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  2209 \rail@nextplus{8}
  2210 \rail@endplus
  2211 \rail@nextbar{9}
  2212 \rail@plus
  2213 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  2214 \rail@nextplus{10}
  2215 \rail@endplus
  2216 \rail@endbar
  2217 \rail@end
  2218 \rail@begin{2}{\isa{modespec}}
  2219 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  2220 \rail@plus
  2221 \rail@nextplus{1}
  2222 \rail@cnont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2223 \rail@endplus
  2224 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  2225 \rail@end
  2226 \rail@begin{2}{\isa{}}
  2227 \rail@term{\hyperlink{command.HOL.consts-code}{\mbox{\isa{\isacommand{consts{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
  2228 \rail@plus
  2229 \rail@nont{\isa{codespec}}[]
  2230 \rail@nextplus{1}
  2231 \rail@endplus
  2232 \rail@end
  2233 \rail@begin{2}{\isa{codespec}}
  2234 \rail@nont{\isa{const}}[]
  2235 \rail@nont{\isa{template}}[]
  2236 \rail@bar
  2237 \rail@nextbar{1}
  2238 \rail@nont{\isa{attachment}}[]
  2239 \rail@endbar
  2240 \rail@end
  2241 \rail@begin{2}{\isa{}}
  2242 \rail@term{\hyperlink{command.HOL.types-code}{\mbox{\isa{\isacommand{types{\isaliteral{5F}{\isacharunderscore}}code}}}}}[]
  2243 \rail@plus
  2244 \rail@nont{\isa{tycodespec}}[]
  2245 \rail@nextplus{1}
  2246 \rail@endplus
  2247 \rail@end
  2248 \rail@begin{2}{\isa{tycodespec}}
  2249 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2250 \rail@nont{\isa{template}}[]
  2251 \rail@bar
  2252 \rail@nextbar{1}
  2253 \rail@nont{\isa{attachment}}[]
  2254 \rail@endbar
  2255 \rail@end
  2256 \rail@begin{1}{\isa{const}}
  2257 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  2258 \rail@end
  2259 \rail@begin{1}{\isa{template}}
  2260 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  2261 \rail@nont{\hyperlink{syntax.string}{\mbox{\isa{string}}}}[]
  2262 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  2263 \rail@end
  2264 \rail@begin{2}{\isa{attachment}}
  2265 \rail@term{\isa{attach}}[]
  2266 \rail@bar
  2267 \rail@nextbar{1}
  2268 \rail@nont{\isa{modespec}}[]
  2269 \rail@endbar
  2270 \rail@term{\isa{{\isaliteral{7B}{\isacharbraceleft}}}}[]
  2271 \rail@nont{\hyperlink{syntax.text}{\mbox{\isa{text}}}}[]
  2272 \rail@term{\isa{{\isaliteral{7D}{\isacharbraceright}}}}[]
  2273 \rail@end
  2274 \rail@begin{2}{\isa{}}
  2275 \rail@term{\hyperlink{attribute.code}{\mbox{\isa{code}}}}[]
  2276 \rail@bar
  2277 \rail@nextbar{1}
  2278 \rail@nont{\isa{name}}[]
  2279 \rail@endbar
  2280 \rail@end
  2281 \end{railoutput}%
  2282 \end{isamarkuptext}%
  2283 \isamarkuptrue%
  2284 %
  2285 \isamarkupsection{Definition by specification \label{sec:hol-specification}%
  2286 }
  2287 \isamarkuptrue%
  2288 %
  2289 \begin{isamarkuptext}%
  2290 \begin{matharray}{rcl}
  2291     \indexdef{HOL}{command}{specification}\hypertarget{command.HOL.specification}{\hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
  2292     \indexdef{HOL}{command}{ax\_specification}\hypertarget{command.HOL.ax-specification}{\hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}} & : & \isa{{\isaliteral{22}{\isachardoublequote}}theory\ {\isaliteral{5C3C72696768746172726F773E}{\isasymrightarrow}}\ proof{\isaliteral{28}{\isacharparenleft}}prove{\isaliteral{29}{\isacharparenright}}{\isaliteral{22}{\isachardoublequote}}} \\
  2293   \end{matharray}
  2294 
  2295   \begin{railoutput}
  2296 \rail@begin{6}{\isa{}}
  2297 \rail@bar
  2298 \rail@term{\hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}}[]
  2299 \rail@nextbar{1}
  2300 \rail@term{\hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}}[]
  2301 \rail@endbar
  2302 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  2303 \rail@plus
  2304 \rail@nont{\isa{decl}}[]
  2305 \rail@nextplus{1}
  2306 \rail@endplus
  2307 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  2308 \rail@cr{3}
  2309 \rail@plus
  2310 \rail@bar
  2311 \rail@nextbar{4}
  2312 \rail@nont{\hyperlink{syntax.thmdecl}{\mbox{\isa{thmdecl}}}}[]
  2313 \rail@endbar
  2314 \rail@nont{\hyperlink{syntax.prop}{\mbox{\isa{prop}}}}[]
  2315 \rail@nextplus{5}
  2316 \rail@endplus
  2317 \rail@end
  2318 \rail@begin{2}{\isa{decl}}
  2319 \rail@bar
  2320 \rail@nextbar{1}
  2321 \rail@nont{\hyperlink{syntax.name}{\mbox{\isa{name}}}}[]
  2322 \rail@term{\isa{{\isaliteral{3A}{\isacharcolon}}}}[]
  2323 \rail@endbar
  2324 \rail@nont{\hyperlink{syntax.term}{\mbox{\isa{term}}}}[]
  2325 \rail@term{\isa{{\isaliteral{28}{\isacharparenleft}}}}[]
  2326 \rail@term{\isa{\isakeyword{overloaded}}}[]
  2327 \rail@bar
  2328 \rail@nextbar{1}
  2329 \rail@term{\isa{{\isaliteral{29}{\isacharparenright}}}}[]
  2330 \rail@endbar
  2331 \rail@end
  2332 \end{railoutput}
  2333 
  2334 
  2335   \begin{description}
  2336 
  2337   \item \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}decls\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} sets up a
  2338   goal stating the existence of terms with the properties specified to
  2339   hold for the constants given in \isa{decls}.  After finishing the
  2340   proof, the theory will be augmented with definitions for the given
  2341   constants, as well as with theorems stating the properties for these
  2342   constants.
  2343 
  2344   \item \hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}~\isa{{\isaliteral{22}{\isachardoublequote}}decls\ {\isaliteral{5C3C7068693E}{\isasymphi}}{\isaliteral{22}{\isachardoublequote}}} sets up
  2345   a goal stating the existence of terms with the properties specified
  2346   to hold for the constants given in \isa{decls}.  After finishing
  2347   the proof, the theory will be augmented with axioms expressing the
  2348   properties given in the first place.
  2349 
  2350   \item \isa{decl} declares a constant to be defined by the
  2351   specification given.  The definition for the constant \isa{c} is
  2352   bound to the name \isa{c{\isaliteral{5F}{\isacharunderscore}}def} unless a theorem name is given in
  2353   the declaration.  Overloaded constants should be declared as such.
  2354 
  2355   \end{description}
  2356 
  2357   Whether to use \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}} or \hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}} is to some extent a matter of style.  \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}} introduces no new axioms, and so by
  2358   construction cannot introduce inconsistencies, whereas \hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}} does introduce axioms, but only after the
  2359   user has explicitly proven it to be safe.  A practical issue must be
  2360   considered, though: After introducing two constants with the same
  2361   properties using \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}, one can prove
  2362   that the two constants are, in fact, equal.  If this might be a
  2363   problem, one should use \hyperlink{command.HOL.ax-specification}{\mbox{\isa{\isacommand{ax{\isaliteral{5F}{\isacharunderscore}}specification}}}}.%
  2364 \end{isamarkuptext}%
  2365 \isamarkuptrue%
  2366 %
  2367 \isadelimtheory
  2368 %
  2369 \endisadelimtheory
  2370 %
  2371 \isatagtheory
  2372 \isacommand{end}\isamarkupfalse%
  2373 %
  2374 \endisatagtheory
  2375 {\isafoldtheory}%
  2376 %
  2377 \isadelimtheory
  2378 %
  2379 \endisadelimtheory
  2380 \isanewline
  2381 \end{isabellebody}%
  2382 %%% Local Variables:
  2383 %%% mode: latex
  2384 %%% TeX-master: "root"
  2385 %%% End: