48 ; |
48 ; |
49 \end{rail} |
49 \end{rail} |
50 |
50 |
51 \begin{descr} |
51 \begin{descr} |
52 |
52 |
53 \item [\mbox{\isa{\isacommand{typedecl}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub n{\isacharparenright}\ t{\isachardoublequote}}] is similar to the original \mbox{\isa{\isacommand{typedecl}}} of |
53 \item [\hyperlink{command.HOL.typedecl}{\mbox{\isa{\isacommand{typedecl}}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub n{\isacharparenright}\ t{\isachardoublequote}}] is similar to the original \hyperlink{command.typedecl}{\mbox{\isa{\isacommand{typedecl}}}} of |
54 Isabelle/Pure (see \secref{sec:types-pure}), but also declares type |
54 Isabelle/Pure (see \secref{sec:types-pure}), but also declares type |
55 arity \isa{{\isachardoublequote}t\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}type{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ type{\isacharparenright}\ type{\isachardoublequote}}, making \isa{t} an |
55 arity \isa{{\isachardoublequote}t\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}type{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ type{\isacharparenright}\ type{\isachardoublequote}}, making \isa{t} an |
56 actual HOL type constructor. %FIXME check, update |
56 actual HOL type constructor. %FIXME check, update |
57 |
57 |
58 \item [\mbox{\isa{\isacommand{typedef}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub n{\isacharparenright}\ t\ {\isacharequal}\ A{\isachardoublequote}}] sets up a goal stating non-emptiness of the set \isa{A}. |
58 \item [\hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub n{\isacharparenright}\ t\ {\isacharequal}\ A{\isachardoublequote}}] sets up a goal stating non-emptiness of the set \isa{A}. |
59 After finishing the proof, the theory will be augmented by a |
59 After finishing the proof, the theory will be augmented by a |
60 Gordon/HOL-style type definition, which establishes a bijection |
60 Gordon/HOL-style type definition, which establishes a bijection |
61 between the representing set \isa{A} and the new type \isa{t}. |
61 between the representing set \isa{A} and the new type \isa{t}. |
62 |
62 |
63 Technically, \mbox{\isa{\isacommand{typedef}}} defines both a type \isa{t} and a set (term constant) of the same name (an alternative base |
63 Technically, \hyperlink{command.HOL.typedef}{\mbox{\isa{\isacommand{typedef}}}} defines both a type \isa{t} and a set (term constant) of the same name (an alternative base |
64 name may be given in parentheses). The injection from type to set |
64 name may be given in parentheses). The injection from type to set |
65 is called \isa{Rep{\isacharunderscore}t}, its inverse \isa{Abs{\isacharunderscore}t} (this may be |
65 is called \isa{Rep{\isacharunderscore}t}, its inverse \isa{Abs{\isacharunderscore}t} (this may be |
66 changed via an explicit \mbox{\isa{\isakeyword{morphisms}}} declaration). |
66 changed via an explicit \hyperlink{keyword.HOL.morphisms}{\mbox{\isa{\isakeyword{morphisms}}}} declaration). |
67 |
67 |
68 Theorems \isa{Rep{\isacharunderscore}t}, \isa{Rep{\isacharunderscore}t{\isacharunderscore}inverse}, and \isa{Abs{\isacharunderscore}t{\isacharunderscore}inverse} provide the most basic characterization as a |
68 Theorems \isa{Rep{\isacharunderscore}t}, \isa{Rep{\isacharunderscore}t{\isacharunderscore}inverse}, and \isa{Abs{\isacharunderscore}t{\isacharunderscore}inverse} provide the most basic characterization as a |
69 corresponding injection/surjection pair (in both directions). Rules |
69 corresponding injection/surjection pair (in both directions). Rules |
70 \isa{Rep{\isacharunderscore}t{\isacharunderscore}inject} and \isa{Abs{\isacharunderscore}t{\isacharunderscore}inject} provide a slightly |
70 \isa{Rep{\isacharunderscore}t{\isacharunderscore}inject} and \isa{Abs{\isacharunderscore}t{\isacharunderscore}inject} provide a slightly |
71 more convenient view on the injectivity part, suitable for automated |
71 more convenient view on the injectivity part, suitable for automated |
72 proof tools (e.g.\ in \mbox{\isa{simp}} or \mbox{\isa{iff}} |
72 proof tools (e.g.\ in \hyperlink{attribute.simp}{\mbox{\isa{simp}}} or \hyperlink{attribute.iff}{\mbox{\isa{iff}}} |
73 declarations). Rules \isa{Rep{\isacharunderscore}t{\isacharunderscore}cases}/\isa{Rep{\isacharunderscore}t{\isacharunderscore}induct}, and |
73 declarations). Rules \isa{Rep{\isacharunderscore}t{\isacharunderscore}cases}/\isa{Rep{\isacharunderscore}t{\isacharunderscore}induct}, and |
74 \isa{Abs{\isacharunderscore}t{\isacharunderscore}cases}/\isa{Abs{\isacharunderscore}t{\isacharunderscore}induct} provide alternative views |
74 \isa{Abs{\isacharunderscore}t{\isacharunderscore}cases}/\isa{Abs{\isacharunderscore}t{\isacharunderscore}induct} provide alternative views |
75 on surjectivity; these are already declared as set or type rules for |
75 on surjectivity; these are already declared as set or type rules for |
76 the generic \mbox{\isa{cases}} and \mbox{\isa{induct}} methods. |
76 the generic \hyperlink{method.cases}{\mbox{\isa{cases}}} and \hyperlink{method.induct}{\mbox{\isa{induct}}} methods. |
77 |
77 |
78 An alternative name may be specified in parentheses; the default is |
78 An alternative name may be specified in parentheses; the default is |
79 to use \isa{t} as indicated before. The ``\isa{{\isachardoublequote}{\isacharparenleft}open{\isacharparenright}{\isachardoublequote}}'' |
79 to use \isa{t} as indicated before. The ``\isa{{\isachardoublequote}{\isacharparenleft}open{\isacharparenright}{\isachardoublequote}}'' |
80 declaration suppresses a separate constant definition for the |
80 declaration suppresses a separate constant definition for the |
81 representing set. |
81 representing set. |
83 \end{descr} |
83 \end{descr} |
84 |
84 |
85 Note that raw type declarations are rarely used in practice; the |
85 Note that raw type declarations are rarely used in practice; the |
86 main application is with experimental (or even axiomatic!) theory |
86 main application is with experimental (or even axiomatic!) theory |
87 fragments. Instead of primitive HOL type definitions, user-level |
87 fragments. Instead of primitive HOL type definitions, user-level |
88 theories usually refer to higher-level packages such as \mbox{\isa{\isacommand{record}}} (see \secref{sec:hol-record}) or \mbox{\isa{\isacommand{datatype}}} (see \secref{sec:hol-datatype}).% |
88 theories usually refer to higher-level packages such as \hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}} (see \secref{sec:hol-record}) or \hyperlink{command.HOL.datatype}{\mbox{\isa{\isacommand{datatype}}}} (see \secref{sec:hol-datatype}).% |
89 \end{isamarkuptext}% |
89 \end{isamarkuptext}% |
90 \isamarkuptrue% |
90 \isamarkuptrue% |
91 % |
91 % |
92 \isamarkupsection{Adhoc tuples% |
92 \isamarkupsection{Adhoc tuples% |
93 } |
93 } |
94 \isamarkuptrue% |
94 \isamarkuptrue% |
95 % |
95 % |
96 \begin{isamarkuptext}% |
96 \begin{isamarkuptext}% |
97 \begin{matharray}{rcl} |
97 \begin{matharray}{rcl} |
98 \mbox{\isa{split{\isacharunderscore}format}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isaratt \\ |
98 \hyperlink{attribute.HOL.split_format}{\mbox{\isa{split{\isacharunderscore}format}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isaratt \\ |
99 \end{matharray} |
99 \end{matharray} |
100 |
100 |
101 \begin{rail} |
101 \begin{rail} |
102 'split\_format' (((name *) + 'and') | ('(' 'complete' ')')) |
102 'split\_format' (((name *) + 'and') | ('(' 'complete' ')')) |
103 ; |
103 ; |
104 \end{rail} |
104 \end{rail} |
105 |
105 |
106 \begin{descr} |
106 \begin{descr} |
107 |
107 |
108 \item [\mbox{\isa{split{\isacharunderscore}format}}~\isa{{\isachardoublequote}p\isactrlsub {\isadigit{1}}\ {\isasymdots}\ p\isactrlsub m\ {\isasymAND}\ {\isasymdots}\ {\isasymAND}\ q\isactrlsub {\isadigit{1}}\ {\isasymdots}\ q\isactrlsub n{\isachardoublequote}}] puts expressions of |
108 \item [\hyperlink{attribute.HOL.split_format}{\mbox{\isa{split{\isacharunderscore}format}}}~\isa{{\isachardoublequote}p\isactrlsub {\isadigit{1}}\ {\isasymdots}\ p\isactrlsub m\ {\isasymAND}\ {\isasymdots}\ {\isasymAND}\ q\isactrlsub {\isadigit{1}}\ {\isasymdots}\ q\isactrlsub n{\isachardoublequote}}] puts expressions of |
109 low-level tuple types into canonical form as specified by the |
109 low-level tuple types into canonical form as specified by the |
110 arguments given; the \isa{i}-th collection of arguments refers to |
110 arguments given; the \isa{i}-th collection of arguments refers to |
111 occurrences in premise \isa{i} of the rule. The ``\isa{{\isachardoublequote}{\isacharparenleft}complete{\isacharparenright}{\isachardoublequote}}'' option causes \emph{all} arguments in function |
111 occurrences in premise \isa{i} of the rule. The ``\isa{{\isachardoublequote}{\isacharparenleft}complete{\isacharparenright}{\isachardoublequote}}'' option causes \emph{all} arguments in function |
112 applications to be represented canonically according to their tuple |
112 applications to be represented canonically according to their tuple |
113 type structure. |
113 type structure. |
202 } |
202 } |
203 \isamarkuptrue% |
203 \isamarkuptrue% |
204 % |
204 % |
205 \begin{isamarkuptext}% |
205 \begin{isamarkuptext}% |
206 \begin{matharray}{rcl} |
206 \begin{matharray}{rcl} |
207 \indexdef{HOL}{command}{record}\mbox{\isa{\isacommand{record}}} & : & \isartrans{theory}{theory} \\ |
207 \indexdef{HOL}{command}{record}\hypertarget{command.HOL.record}{\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}} & : & \isartrans{theory}{theory} \\ |
208 \end{matharray} |
208 \end{matharray} |
209 |
209 |
210 \begin{rail} |
210 \begin{rail} |
211 'record' typespec '=' (type '+')? (constdecl +) |
211 'record' typespec '=' (type '+')? (constdecl +) |
212 ; |
212 ; |
213 \end{rail} |
213 \end{rail} |
214 |
214 |
215 \begin{descr} |
215 \begin{descr} |
216 |
216 |
217 \item [\mbox{\isa{\isacommand{record}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub m{\isacharparenright}\ t\ {\isacharequal}\ {\isasymtau}\ {\isacharplus}\ c\isactrlsub {\isadigit{1}}\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub {\isadigit{1}}\ {\isasymdots}\ c\isactrlsub n\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub n{\isachardoublequote}}] defines |
217 \item [\hyperlink{command.HOL.record}{\mbox{\isa{\isacommand{record}}}}~\isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub m{\isacharparenright}\ t\ {\isacharequal}\ {\isasymtau}\ {\isacharplus}\ c\isactrlsub {\isadigit{1}}\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub {\isadigit{1}}\ {\isasymdots}\ c\isactrlsub n\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub n{\isachardoublequote}}] defines |
218 extensible record type \isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub m{\isacharparenright}\ t{\isachardoublequote}}, |
218 extensible record type \isa{{\isachardoublequote}{\isacharparenleft}{\isasymalpha}\isactrlsub {\isadigit{1}}{\isacharcomma}\ {\isasymdots}{\isacharcomma}\ {\isasymalpha}\isactrlsub m{\isacharparenright}\ t{\isachardoublequote}}, |
219 derived from the optional parent record \isa{{\isachardoublequote}{\isasymtau}{\isachardoublequote}} by adding new |
219 derived from the optional parent record \isa{{\isachardoublequote}{\isasymtau}{\isachardoublequote}} by adding new |
220 field components \isa{{\isachardoublequote}c\isactrlsub i\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub i{\isachardoublequote}} etc. |
220 field components \isa{{\isachardoublequote}c\isactrlsub i\ {\isacharcolon}{\isacharcolon}\ {\isasymsigma}\isactrlsub i{\isachardoublequote}} etc. |
221 |
221 |
222 The type variables of \isa{{\isachardoublequote}{\isasymtau}{\isachardoublequote}} and \isa{{\isachardoublequote}{\isasymsigma}\isactrlsub i{\isachardoublequote}} need to be |
222 The type variables of \isa{{\isachardoublequote}{\isasymtau}{\isachardoublequote}} and \isa{{\isachardoublequote}{\isasymsigma}\isactrlsub i{\isachardoublequote}} need to be |
324 \begin{enumerate} |
324 \begin{enumerate} |
325 |
325 |
326 \item Standard conversions for selectors or updates applied to |
326 \item Standard conversions for selectors or updates applied to |
327 record constructor terms are made part of the default Simplifier |
327 record constructor terms are made part of the default Simplifier |
328 context; thus proofs by reduction of basic operations merely require |
328 context; thus proofs by reduction of basic operations merely require |
329 the \mbox{\isa{simp}} method without further arguments. These rules |
329 the \hyperlink{method.simp}{\mbox{\isa{simp}}} method without further arguments. These rules |
330 are available as \isa{{\isachardoublequote}t{\isachardot}simps{\isachardoublequote}}, too. |
330 are available as \isa{{\isachardoublequote}t{\isachardot}simps{\isachardoublequote}}, too. |
331 |
331 |
332 \item Selectors applied to updated records are automatically reduced |
332 \item Selectors applied to updated records are automatically reduced |
333 by an internal simplification procedure, which is also part of the |
333 by an internal simplification procedure, which is also part of the |
334 standard Simplifier setup. |
334 standard Simplifier setup. |
335 |
335 |
336 \item Inject equations of a form analogous to \isa{{\isachardoublequote}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x{\isacharprime}{\isacharcomma}\ y{\isacharprime}{\isacharparenright}\ {\isasymequiv}\ x\ {\isacharequal}\ x{\isacharprime}\ {\isasymand}\ y\ {\isacharequal}\ y{\isacharprime}{\isachardoublequote}} are declared to the Simplifier and Classical |
336 \item Inject equations of a form analogous to \isa{{\isachardoublequote}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x{\isacharprime}{\isacharcomma}\ y{\isacharprime}{\isacharparenright}\ {\isasymequiv}\ x\ {\isacharequal}\ x{\isacharprime}\ {\isasymand}\ y\ {\isacharequal}\ y{\isacharprime}{\isachardoublequote}} are declared to the Simplifier and Classical |
337 Reasoner as \mbox{\isa{iff}} rules. These rules are available as |
337 Reasoner as \hyperlink{attribute.iff}{\mbox{\isa{iff}}} rules. These rules are available as |
338 \isa{{\isachardoublequote}t{\isachardot}iffs{\isachardoublequote}}. |
338 \isa{{\isachardoublequote}t{\isachardot}iffs{\isachardoublequote}}. |
339 |
339 |
340 \item The introduction rule for record equality analogous to \isa{{\isachardoublequote}x\ r\ {\isacharequal}\ x\ r{\isacharprime}\ {\isasymLongrightarrow}\ y\ r\ {\isacharequal}\ y\ r{\isacharprime}\ {\isasymdots}\ {\isasymLongrightarrow}\ r\ {\isacharequal}\ r{\isacharprime}{\isachardoublequote}} is declared to the Simplifier, |
340 \item The introduction rule for record equality analogous to \isa{{\isachardoublequote}x\ r\ {\isacharequal}\ x\ r{\isacharprime}\ {\isasymLongrightarrow}\ y\ r\ {\isacharequal}\ y\ r{\isacharprime}\ {\isasymdots}\ {\isasymLongrightarrow}\ r\ {\isacharequal}\ r{\isacharprime}{\isachardoublequote}} is declared to the Simplifier, |
341 and as the basic rule context as ``\mbox{\isa{intro}}\isa{{\isachardoublequote}{\isacharquery}{\isachardoublequote}}''. |
341 and as the basic rule context as ``\hyperlink{attribute.intro}{\mbox{\isa{intro}}}\isa{{\isachardoublequote}{\isacharquery}{\isachardoublequote}}''. |
342 The rule is called \isa{{\isachardoublequote}t{\isachardot}equality{\isachardoublequote}}. |
342 The rule is called \isa{{\isachardoublequote}t{\isachardot}equality{\isachardoublequote}}. |
343 |
343 |
344 \item Representations of arbitrary record expressions as canonical |
344 \item Representations of arbitrary record expressions as canonical |
345 constructor terms are provided both in \mbox{\isa{cases}} and \mbox{\isa{induct}} format (cf.\ the generic proof methods of the same name, |
345 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, |
346 \secref{sec:cases-induct}). Several variations are available, for |
346 \secref{sec:cases-induct}). Several variations are available, for |
347 fixed records, record schemes, more parts etc. |
347 fixed records, record schemes, more parts etc. |
348 |
348 |
349 The generic proof methods are sufficiently smart to pick the most |
349 The generic proof methods are sufficiently smart to pick the most |
350 sensible rule according to the type of the indicated record |
350 sensible rule according to the type of the indicated record |
434 'termination' ( term )? |
434 'termination' ( term )? |
435 \end{rail} |
435 \end{rail} |
436 |
436 |
437 \begin{descr} |
437 \begin{descr} |
438 |
438 |
439 \item [\mbox{\isa{\isacommand{primrec}}}] defines primitive recursive |
439 \item [\hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}}] defines primitive recursive |
440 functions over datatypes, see also \cite{isabelle-HOL}. |
440 functions over datatypes, see also \cite{isabelle-HOL}. |
441 |
441 |
442 \item [\mbox{\isa{\isacommand{function}}}] defines functions by general |
442 \item [\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}] defines functions by general |
443 wellfounded recursion. A detailed description with examples can be |
443 wellfounded recursion. A detailed description with examples can be |
444 found in \cite{isabelle-function}. The function is specified by a |
444 found in \cite{isabelle-function}. The function is specified by a |
445 set of (possibly conditional) recursive equations with arbitrary |
445 set of (possibly conditional) recursive equations with arbitrary |
446 pattern matching. The command generates proof obligations for the |
446 pattern matching. The command generates proof obligations for the |
447 completeness and the compatibility of patterns. |
447 completeness and the compatibility of patterns. |
448 |
448 |
449 The defined function is considered partial, and the resulting |
449 The defined function is considered partial, and the resulting |
450 simplification rules (named \isa{{\isachardoublequote}f{\isachardot}psimps{\isachardoublequote}}) and induction rule |
450 simplification rules (named \isa{{\isachardoublequote}f{\isachardot}psimps{\isachardoublequote}}) and induction rule |
451 (named \isa{{\isachardoublequote}f{\isachardot}pinduct{\isachardoublequote}}) are guarded by a generated domain |
451 (named \isa{{\isachardoublequote}f{\isachardot}pinduct{\isachardoublequote}}) are guarded by a generated domain |
452 predicate \isa{{\isachardoublequote}f{\isacharunderscore}dom{\isachardoublequote}}. The \mbox{\isa{\isacommand{termination}}} |
452 predicate \isa{{\isachardoublequote}f{\isacharunderscore}dom{\isachardoublequote}}. The \hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}} |
453 command can then be used to establish that the function is total. |
453 command can then be used to establish that the function is total. |
454 |
454 |
455 \item [\mbox{\isa{\isacommand{fun}}}] is a shorthand notation for |
455 \item [\hyperlink{command.HOL.fun}{\mbox{\isa{\isacommand{fun}}}}] is a shorthand notation for |
456 ``\mbox{\isa{\isacommand{function}}}~\isa{{\isachardoublequote}{\isacharparenleft}sequential{\isacharparenright}{\isachardoublequote}}, followed by |
456 ``\hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}}~\isa{{\isachardoublequote}{\isacharparenleft}sequential{\isacharparenright}{\isachardoublequote}}, followed by |
457 automated proof attempts regarding pattern matching and termination. |
457 automated proof attempts regarding pattern matching and termination. |
458 See \cite{isabelle-function} for further details. |
458 See \cite{isabelle-function} for further details. |
459 |
459 |
460 \item [\mbox{\isa{\isacommand{termination}}}~\isa{f}] commences a |
460 \item [\hyperlink{command.HOL.termination}{\mbox{\isa{\isacommand{termination}}}}~\isa{f}] commences a |
461 termination proof for the previously defined function \isa{f}. If |
461 termination proof for the previously defined function \isa{f}. If |
462 this is omitted, the command refers to the most recent function |
462 this is omitted, the command refers to the most recent function |
463 definition. After the proof is closed, the recursive equations and |
463 definition. After the proof is closed, the recursive equations and |
464 the induction principle is established. |
464 the induction principle is established. |
465 |
465 |
466 \end{descr} |
466 \end{descr} |
467 |
467 |
468 %FIXME check |
468 %FIXME check |
469 |
469 |
470 Recursive definitions introduced by both the \mbox{\isa{\isacommand{primrec}}} and the \mbox{\isa{\isacommand{function}}} command accommodate |
470 Recursive definitions introduced by both the \hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}} and the \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} command accommodate |
471 reasoning by induction (cf.\ \secref{sec:cases-induct}): rule \isa{{\isachardoublequote}c{\isachardot}induct{\isachardoublequote}} (where \isa{c} is the name of the function definition) |
471 reasoning by induction (cf.\ \secref{sec:cases-induct}): rule \isa{{\isachardoublequote}c{\isachardot}induct{\isachardoublequote}} (where \isa{c} is the name of the function definition) |
472 refers to a specific induction rule, with parameters named according |
472 refers to a specific induction rule, with parameters named according |
473 to the user-specified equations. Case names of \mbox{\isa{\isacommand{primrec}}} are that of the datatypes involved, while those of |
473 to the user-specified equations. Case names of \hyperlink{command.HOL.primrec}{\mbox{\isa{\isacommand{primrec}}}} are that of the datatypes involved, while those of |
474 \mbox{\isa{\isacommand{function}}} are numbered (starting from 1). |
474 \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} are numbered (starting from 1). |
475 |
475 |
476 The equations provided by these packages may be referred later as |
476 The equations provided by these packages may be referred later as |
477 theorem list \isa{{\isachardoublequote}f{\isachardot}simps{\isachardoublequote}}, where \isa{f} is the (collective) |
477 theorem list \isa{{\isachardoublequote}f{\isachardot}simps{\isachardoublequote}}, where \isa{f} is the (collective) |
478 name of the functions defined. Individual equations may be named |
478 name of the functions defined. Individual equations may be named |
479 explicitly as well. |
479 explicitly as well. |
480 |
480 |
481 The \mbox{\isa{\isacommand{function}}} command accepts the following |
481 The \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} command accepts the following |
482 options. |
482 options. |
483 |
483 |
484 \begin{descr} |
484 \begin{descr} |
485 |
485 |
486 \item [\isa{sequential}] enables a preprocessor which |
486 \item [\isa{sequential}] enables a preprocessor which |
530 ; |
530 ; |
531 \end{rail} |
531 \end{rail} |
532 |
532 |
533 \begin{descr} |
533 \begin{descr} |
534 |
534 |
535 \item [\mbox{\isa{pat{\isacharunderscore}completeness}}] is a specialized method to |
535 \item [\hyperlink{method.HOL.pat_completeness}{\mbox{\isa{pat{\isacharunderscore}completeness}}}] is a specialized method to |
536 solve goals regarding the completeness of pattern matching, as |
536 solve goals regarding the completeness of pattern matching, as |
537 required by the \mbox{\isa{\isacommand{function}}} package (cf.\ |
537 required by the \hyperlink{command.HOL.function}{\mbox{\isa{\isacommand{function}}}} package (cf.\ |
538 \cite{isabelle-function}). |
538 \cite{isabelle-function}). |
539 |
539 |
540 \item [\mbox{\isa{relation}}~\isa{R}] introduces a termination |
540 \item [\hyperlink{method.HOL.relation}{\mbox{\isa{relation}}}~\isa{R}] introduces a termination |
541 proof using the relation \isa{R}. The resulting proof state will |
541 proof using the relation \isa{R}. The resulting proof state will |
542 contain goals expressing that \isa{R} is wellfounded, and that the |
542 contain goals expressing that \isa{R} is wellfounded, and that the |
543 arguments of recursive calls decrease with respect to \isa{R}. |
543 arguments of recursive calls decrease with respect to \isa{R}. |
544 Usually, this method is used as the initial proof step of manual |
544 Usually, this method is used as the initial proof step of manual |
545 termination proofs. |
545 termination proofs. |
546 |
546 |
547 \item [\mbox{\isa{lexicographic{\isacharunderscore}order}}] attempts a fully |
547 \item [\hyperlink{method.HOL.lexicographic_order}{\mbox{\isa{lexicographic{\isacharunderscore}order}}}] attempts a fully |
548 automated termination proof by searching for a lexicographic |
548 automated termination proof by searching for a lexicographic |
549 combination of size measures on the arguments of the function. The |
549 combination of size measures on the arguments of the function. The |
550 method accepts the same arguments as the \mbox{\isa{auto}} method, |
550 method accepts the same arguments as the \hyperlink{method.auto}{\mbox{\isa{auto}}} method, |
551 which it uses internally to prove local descents. The same context |
551 which it uses internally to prove local descents. The same context |
552 modifiers as for \mbox{\isa{auto}} are accepted, see |
552 modifiers as for \hyperlink{method.auto}{\mbox{\isa{auto}}} are accepted, see |
553 \secref{sec:clasimp}. |
553 \secref{sec:clasimp}. |
554 |
554 |
555 In case of failure, extensive information is printed, which can help |
555 In case of failure, extensive information is printed, which can help |
556 to analyse the situation (cf.\ \cite{isabelle-function}). |
556 to analyse the situation (cf.\ \cite{isabelle-function}). |
557 |
557 |
584 ; |
584 ; |
585 \end{rail} |
585 \end{rail} |
586 |
586 |
587 \begin{descr} |
587 \begin{descr} |
588 |
588 |
589 \item [\mbox{\isa{\isacommand{recdef}}}] defines general well-founded |
589 \item [\hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}}] defines general well-founded |
590 recursive functions (using the TFL package), see also |
590 recursive functions (using the TFL package), see also |
591 \cite{isabelle-HOL}. The ``\isa{{\isachardoublequote}{\isacharparenleft}permissive{\isacharparenright}{\isachardoublequote}}'' option tells |
591 \cite{isabelle-HOL}. The ``\isa{{\isachardoublequote}{\isacharparenleft}permissive{\isacharparenright}{\isachardoublequote}}'' option tells |
592 TFL to recover from failed proof attempts, returning unfinished |
592 TFL to recover from failed proof attempts, returning unfinished |
593 results. The \isa{recdef{\isacharunderscore}simp}, \isa{recdef{\isacharunderscore}cong}, and \isa{recdef{\isacharunderscore}wf} hints refer to auxiliary rules to be used in the internal |
593 results. The \isa{recdef{\isacharunderscore}simp}, \isa{recdef{\isacharunderscore}cong}, and \isa{recdef{\isacharunderscore}wf} hints refer to auxiliary rules to be used in the internal |
594 automated proof process of TFL. Additional \mbox{\isa{clasimpmod}} |
594 automated proof process of TFL. Additional \hyperlink{syntax.clasimpmod}{\mbox{\isa{clasimpmod}}} |
595 declarations (cf.\ \secref{sec:clasimp}) may be given to tune the |
595 declarations (cf.\ \secref{sec:clasimp}) may be given to tune the |
596 context of the Simplifier (cf.\ \secref{sec:simplifier}) and |
596 context of the Simplifier (cf.\ \secref{sec:simplifier}) and |
597 Classical reasoner (cf.\ \secref{sec:classical}). |
597 Classical reasoner (cf.\ \secref{sec:classical}). |
598 |
598 |
599 \item [\mbox{\isa{\isacommand{recdef{\isacharunderscore}tc}}}~\isa{{\isachardoublequote}c\ {\isacharparenleft}i{\isacharparenright}{\isachardoublequote}}] recommences the |
599 \item [\hyperlink{command.HOL.recdef_tc}{\mbox{\isa{\isacommand{recdef{\isacharunderscore}tc}}}}~\isa{{\isachardoublequote}c\ {\isacharparenleft}i{\isacharparenright}{\isachardoublequote}}] recommences the |
600 proof for leftover termination condition number \isa{i} (default |
600 proof for leftover termination condition number \isa{i} (default |
601 1) as generated by a \mbox{\isa{\isacommand{recdef}}} definition of |
601 1) as generated by a \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} definition of |
602 constant \isa{c}. |
602 constant \isa{c}. |
603 |
603 |
604 Note that in most cases, \mbox{\isa{\isacommand{recdef}}} is able to finish |
604 Note that in most cases, \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} is able to finish |
605 its internal proofs without manual intervention. |
605 its internal proofs without manual intervention. |
606 |
606 |
607 \end{descr} |
607 \end{descr} |
608 |
608 |
609 \medskip Hints for \mbox{\isa{\isacommand{recdef}}} may be also declared |
609 \medskip Hints for \hyperlink{command.HOL.recdef}{\mbox{\isa{\isacommand{recdef}}}} may be also declared |
610 globally, using the following attributes. |
610 globally, using the following attributes. |
611 |
611 |
612 \begin{matharray}{rcl} |
612 \begin{matharray}{rcl} |
613 \indexdef{HOL}{attribute}{recdef\_simp}\mbox{\isa{recdef{\isacharunderscore}simp}} & : & \isaratt \\ |
613 \indexdef{HOL}{attribute}{recdef\_simp}\hypertarget{attribute.HOL.recdef_simp}{\hyperlink{attribute.HOL.recdef_simp}{\mbox{\isa{recdef{\isacharunderscore}simp}}}} & : & \isaratt \\ |
614 \indexdef{HOL}{attribute}{recdef\_cong}\mbox{\isa{recdef{\isacharunderscore}cong}} & : & \isaratt \\ |
614 \indexdef{HOL}{attribute}{recdef\_cong}\hypertarget{attribute.HOL.recdef_cong}{\hyperlink{attribute.HOL.recdef_cong}{\mbox{\isa{recdef{\isacharunderscore}cong}}}} & : & \isaratt \\ |
615 \indexdef{HOL}{attribute}{recdef\_wf}\mbox{\isa{recdef{\isacharunderscore}wf}} & : & \isaratt \\ |
615 \indexdef{HOL}{attribute}{recdef\_wf}\hypertarget{attribute.HOL.recdef_wf}{\hyperlink{attribute.HOL.recdef_wf}{\mbox{\isa{recdef{\isacharunderscore}wf}}}} & : & \isaratt \\ |
616 \end{matharray} |
616 \end{matharray} |
617 |
617 |
618 \begin{rail} |
618 \begin{rail} |
619 ('recdef\_simp' | 'recdef\_cong' | 'recdef\_wf') (() | 'add' | 'del') |
619 ('recdef\_simp' | 'recdef\_cong' | 'recdef\_wf') (() | 'add' | 'del') |
620 ; |
620 ; |
626 } |
626 } |
627 \isamarkuptrue% |
627 \isamarkuptrue% |
628 % |
628 % |
629 \begin{isamarkuptext}% |
629 \begin{isamarkuptext}% |
630 \begin{matharray}{rcl} |
630 \begin{matharray}{rcl} |
631 \indexdef{HOL}{command}{specification}\mbox{\isa{\isacommand{specification}}} & : & \isartrans{theory}{proof(prove)} \\ |
631 \indexdef{HOL}{command}{specification}\hypertarget{command.HOL.specification}{\hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}} & : & \isartrans{theory}{proof(prove)} \\ |
632 \indexdef{HOL}{command}{ax\_specification}\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}} & : & \isartrans{theory}{proof(prove)} \\ |
632 \indexdef{HOL}{command}{ax\_specification}\hypertarget{command.HOL.ax_specification}{\hyperlink{command.HOL.ax_specification}{\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}}} & : & \isartrans{theory}{proof(prove)} \\ |
633 \end{matharray} |
633 \end{matharray} |
634 |
634 |
635 \begin{rail} |
635 \begin{rail} |
636 ('specification' | 'ax\_specification') '(' (decl +) ')' \\ (thmdecl? prop +) |
636 ('specification' | 'ax\_specification') '(' (decl +) ')' \\ (thmdecl? prop +) |
637 ; |
637 ; |
638 decl: ((name ':')? term '(' 'overloaded' ')'?) |
638 decl: ((name ':')? term '(' 'overloaded' ')'?) |
639 \end{rail} |
639 \end{rail} |
640 |
640 |
641 \begin{descr} |
641 \begin{descr} |
642 |
642 |
643 \item [\mbox{\isa{\isacommand{specification}}}~\isa{{\isachardoublequote}decls\ {\isasymphi}{\isachardoublequote}}] sets up a |
643 \item [\hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}~\isa{{\isachardoublequote}decls\ {\isasymphi}{\isachardoublequote}}] sets up a |
644 goal stating the existence of terms with the properties specified to |
644 goal stating the existence of terms with the properties specified to |
645 hold for the constants given in \isa{decls}. After finishing the |
645 hold for the constants given in \isa{decls}. After finishing the |
646 proof, the theory will be augmented with definitions for the given |
646 proof, the theory will be augmented with definitions for the given |
647 constants, as well as with theorems stating the properties for these |
647 constants, as well as with theorems stating the properties for these |
648 constants. |
648 constants. |
649 |
649 |
650 \item [\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}~\isa{{\isachardoublequote}decls\ {\isasymphi}{\isachardoublequote}}] sets |
650 \item [\hyperlink{command.HOL.ax_specification}{\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}}~\isa{{\isachardoublequote}decls\ {\isasymphi}{\isachardoublequote}}] sets |
651 up a goal stating the existence of terms with the properties |
651 up a goal stating the existence of terms with the properties |
652 specified to hold for the constants given in \isa{decls}. After |
652 specified to hold for the constants given in \isa{decls}. After |
653 finishing the proof, the theory will be augmented with axioms |
653 finishing the proof, the theory will be augmented with axioms |
654 expressing the properties given in the first place. |
654 expressing the properties given in the first place. |
655 |
655 |
658 bound to the name \isa{c{\isacharunderscore}def} unless a theorem name is given in |
658 bound to the name \isa{c{\isacharunderscore}def} unless a theorem name is given in |
659 the declaration. Overloaded constants should be declared as such. |
659 the declaration. Overloaded constants should be declared as such. |
660 |
660 |
661 \end{descr} |
661 \end{descr} |
662 |
662 |
663 Whether to use \mbox{\isa{\isacommand{specification}}} or \mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}} is to some extent a matter of style. \mbox{\isa{\isacommand{specification}}} introduces no new axioms, and so by |
663 Whether to use \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}} or \hyperlink{command.HOL.ax_specification}{\mbox{\isa{\isacommand{ax{\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 |
664 construction cannot introduce inconsistencies, whereas \mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}} does introduce axioms, but only after the |
664 construction cannot introduce inconsistencies, whereas \hyperlink{command.HOL.ax_specification}{\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}} does introduce axioms, but only after the |
665 user has explicitly proven it to be safe. A practical issue must be |
665 user has explicitly proven it to be safe. A practical issue must be |
666 considered, though: After introducing two constants with the same |
666 considered, though: After introducing two constants with the same |
667 properties using \mbox{\isa{\isacommand{specification}}}, one can prove |
667 properties using \hyperlink{command.HOL.specification}{\mbox{\isa{\isacommand{specification}}}}, one can prove |
668 that the two constants are, in fact, equal. If this might be a |
668 that the two constants are, in fact, equal. If this might be a |
669 problem, one should use \mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}.% |
669 problem, one should use \hyperlink{command.HOL.ax_specification}{\mbox{\isa{\isacommand{ax{\isacharunderscore}specification}}}}.% |
670 \end{isamarkuptext}% |
670 \end{isamarkuptext}% |
671 \isamarkuptrue% |
671 \isamarkuptrue% |
672 % |
672 % |
673 \isamarkupsection{Inductive and coinductive definitions \label{sec:hol-inductive}% |
673 \isamarkupsection{Inductive and coinductive definitions \label{sec:hol-inductive}% |
674 } |
674 } |
696 The types of the (co)inductive predicates (or sets) determine the |
696 The types of the (co)inductive predicates (or sets) determine the |
697 domain of the fixedpoint definition, and the package does not have |
697 domain of the fixedpoint definition, and the package does not have |
698 to use inference rules for type-checking. |
698 to use inference rules for type-checking. |
699 |
699 |
700 \begin{matharray}{rcl} |
700 \begin{matharray}{rcl} |
701 \indexdef{HOL}{command}{inductive}\mbox{\isa{\isacommand{inductive}}} & : & \isarkeep{local{\dsh}theory} \\ |
701 \indexdef{HOL}{command}{inductive}\hypertarget{command.HOL.inductive}{\hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}} & : & \isarkeep{local{\dsh}theory} \\ |
702 \indexdef{HOL}{command}{inductive\_set}\mbox{\isa{\isacommand{inductive{\isacharunderscore}set}}} & : & \isarkeep{local{\dsh}theory} \\ |
702 \indexdef{HOL}{command}{inductive\_set}\hypertarget{command.HOL.inductive_set}{\hyperlink{command.HOL.inductive_set}{\mbox{\isa{\isacommand{inductive{\isacharunderscore}set}}}}} & : & \isarkeep{local{\dsh}theory} \\ |
703 \indexdef{HOL}{command}{coinductive}\mbox{\isa{\isacommand{coinductive}}} & : & \isarkeep{local{\dsh}theory} \\ |
703 \indexdef{HOL}{command}{coinductive}\hypertarget{command.HOL.coinductive}{\hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}} & : & \isarkeep{local{\dsh}theory} \\ |
704 \indexdef{HOL}{command}{coinductive\_set}\mbox{\isa{\isacommand{coinductive{\isacharunderscore}set}}} & : & \isarkeep{local{\dsh}theory} \\ |
704 \indexdef{HOL}{command}{coinductive\_set}\hypertarget{command.HOL.coinductive_set}{\hyperlink{command.HOL.coinductive_set}{\mbox{\isa{\isacommand{coinductive{\isacharunderscore}set}}}}} & : & \isarkeep{local{\dsh}theory} \\ |
705 \indexdef{HOL}{attribute}{mono}\mbox{\isa{mono}} & : & \isaratt \\ |
705 \indexdef{HOL}{attribute}{mono}\hypertarget{attribute.HOL.mono}{\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}} & : & \isaratt \\ |
706 \end{matharray} |
706 \end{matharray} |
707 |
707 |
708 \begin{rail} |
708 \begin{rail} |
709 ('inductive' | 'inductive\_set' | 'coinductive' | 'coinductive\_set') target? fixes ('for' fixes)? \\ |
709 ('inductive' | 'inductive\_set' | 'coinductive' | 'coinductive\_set') target? fixes ('for' fixes)? \\ |
710 ('where' clauses)? ('monos' thmrefs)? |
710 ('where' clauses)? ('monos' thmrefs)? |
715 ; |
715 ; |
716 \end{rail} |
716 \end{rail} |
717 |
717 |
718 \begin{descr} |
718 \begin{descr} |
719 |
719 |
720 \item [\mbox{\isa{\isacommand{inductive}}} and \mbox{\isa{\isacommand{coinductive}}}] define (co)inductive predicates from the |
720 \item [\hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}} and \hyperlink{command.HOL.coinductive}{\mbox{\isa{\isacommand{coinductive}}}}] define (co)inductive predicates from the |
721 introduction rules given in the \mbox{\isa{\isakeyword{where}}} part. The |
721 introduction rules given in the \hyperlink{keyword.where}{\mbox{\isa{\isakeyword{where}}}} part. The |
722 optional \mbox{\isa{\isakeyword{for}}} part contains a list of parameters of the |
722 optional \hyperlink{keyword.for}{\mbox{\isa{\isakeyword{for}}}} part contains a list of parameters of the |
723 (co)inductive predicates that remain fixed throughout the |
723 (co)inductive predicates that remain fixed throughout the |
724 definition. The optional \mbox{\isa{\isakeyword{monos}}} section contains |
724 definition. The optional \hyperlink{keyword.monos}{\mbox{\isa{\isakeyword{monos}}}} section contains |
725 \emph{monotonicity theorems}, which are required for each operator |
725 \emph{monotonicity theorems}, which are required for each operator |
726 applied to a recursive set in the introduction rules. There |
726 applied to a recursive set in the introduction rules. There |
727 \emph{must} be a theorem of the form \isa{{\isachardoublequote}A\ {\isasymle}\ B\ {\isasymLongrightarrow}\ M\ A\ {\isasymle}\ M\ B{\isachardoublequote}}, |
727 \emph{must} be a theorem of the form \isa{{\isachardoublequote}A\ {\isasymle}\ B\ {\isasymLongrightarrow}\ M\ A\ {\isasymle}\ M\ B{\isachardoublequote}}, |
728 for each premise \isa{{\isachardoublequote}M\ R\isactrlsub i\ t{\isachardoublequote}} in an introduction rule! |
728 for each premise \isa{{\isachardoublequote}M\ R\isactrlsub i\ t{\isachardoublequote}} in an introduction rule! |
729 |
729 |
730 \item [\mbox{\isa{\isacommand{inductive{\isacharunderscore}set}}} and \mbox{\isa{\isacommand{coinductive{\isacharunderscore}set}}}] are wrappers for to the previous commands, |
730 \item [\hyperlink{command.HOL.inductive_set}{\mbox{\isa{\isacommand{inductive{\isacharunderscore}set}}}} and \hyperlink{command.HOL.coinductive_set}{\mbox{\isa{\isacommand{coinductive{\isacharunderscore}set}}}}] are wrappers for to the previous commands, |
731 allowing the definition of (co)inductive sets. |
731 allowing the definition of (co)inductive sets. |
732 |
732 |
733 \item [\mbox{\isa{mono}}] declares monotonicity rules. These |
733 \item [\hyperlink{attribute.HOL.mono}{\mbox{\isa{mono}}}] declares monotonicity rules. These |
734 rule are involved in the automated monotonicity proof of \mbox{\isa{\isacommand{inductive}}}. |
734 rule are involved in the automated monotonicity proof of \hyperlink{command.HOL.inductive}{\mbox{\isa{\isacommand{inductive}}}}. |
735 |
735 |
736 \end{descr}% |
736 \end{descr}% |
737 \end{isamarkuptext}% |
737 \end{isamarkuptext}% |
738 \isamarkuptrue% |
738 \isamarkuptrue% |
739 % |
739 % |
815 } |
815 } |
816 \isamarkuptrue% |
816 \isamarkuptrue% |
817 % |
817 % |
818 \begin{isamarkuptext}% |
818 \begin{isamarkuptext}% |
819 \begin{matharray}{rcl} |
819 \begin{matharray}{rcl} |
820 \indexdef{HOL}{method}{arith}\mbox{\isa{arith}} & : & \isarmeth \\ |
820 \indexdef{HOL}{method}{arith}\hypertarget{method.HOL.arith}{\hyperlink{method.HOL.arith}{\mbox{\isa{arith}}}} & : & \isarmeth \\ |
821 \indexdef{HOL}{attribute}{arith\_split}\mbox{\isa{arith{\isacharunderscore}split}} & : & \isaratt \\ |
821 \indexdef{HOL}{attribute}{arith\_split}\hypertarget{attribute.HOL.arith_split}{\hyperlink{attribute.HOL.arith_split}{\mbox{\isa{arith{\isacharunderscore}split}}}} & : & \isaratt \\ |
822 \end{matharray} |
822 \end{matharray} |
823 |
823 |
824 The \mbox{\isa{arith}} method decides linear arithmetic problems |
824 The \hyperlink{method.HOL.arith}{\mbox{\isa{arith}}} method decides linear arithmetic problems |
825 (on types \isa{nat}, \isa{int}, \isa{real}). Any current |
825 (on types \isa{nat}, \isa{int}, \isa{real}). Any current |
826 facts are inserted into the goal before running the procedure. |
826 facts are inserted into the goal before running the procedure. |
827 |
827 |
828 The \mbox{\isa{arith{\isacharunderscore}split}} attribute declares case split |
828 The \hyperlink{attribute.HOL.arith_split}{\mbox{\isa{arith{\isacharunderscore}split}}} attribute declares case split |
829 rules to be expanded before the arithmetic procedure is invoked. |
829 rules to be expanded before the arithmetic procedure is invoked. |
830 |
830 |
831 Note that a simpler (but faster) version of arithmetic reasoning is |
831 Note that a simpler (but faster) version of arithmetic reasoning is |
832 already performed by the Simplifier.% |
832 already performed by the Simplifier.% |
833 \end{isamarkuptext}% |
833 \end{isamarkuptext}% |
840 \begin{isamarkuptext}% |
840 \begin{isamarkuptext}% |
841 The following important tactical tools of Isabelle/HOL have been |
841 The following important tactical tools of Isabelle/HOL have been |
842 ported to Isar. These should be never used in proper proof texts! |
842 ported to Isar. These should be never used in proper proof texts! |
843 |
843 |
844 \begin{matharray}{rcl} |
844 \begin{matharray}{rcl} |
845 \indexdef{HOL}{method}{case\_tac}\mbox{\isa{case{\isacharunderscore}tac}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
845 \indexdef{HOL}{method}{case\_tac}\hypertarget{method.HOL.case_tac}{\hyperlink{method.HOL.case_tac}{\mbox{\isa{case{\isacharunderscore}tac}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
846 \indexdef{HOL}{method}{induct\_tac}\mbox{\isa{induct{\isacharunderscore}tac}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
846 \indexdef{HOL}{method}{induct\_tac}\hypertarget{method.HOL.induct_tac}{\hyperlink{method.HOL.induct_tac}{\mbox{\isa{induct{\isacharunderscore}tac}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
847 \indexdef{HOL}{method}{ind\_cases}\mbox{\isa{ind{\isacharunderscore}cases}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
847 \indexdef{HOL}{method}{ind\_cases}\hypertarget{method.HOL.ind_cases}{\hyperlink{method.HOL.ind_cases}{\mbox{\isa{ind{\isacharunderscore}cases}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarmeth \\ |
848 \indexdef{HOL}{command}{inductive\_cases}\mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}} & : & \isartrans{theory}{theory} \\ |
848 \indexdef{HOL}{command}{inductive\_cases}\hypertarget{command.HOL.inductive_cases}{\hyperlink{command.HOL.inductive_cases}{\mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}}}} & : & \isartrans{theory}{theory} \\ |
849 \end{matharray} |
849 \end{matharray} |
850 |
850 |
851 \begin{rail} |
851 \begin{rail} |
852 'case\_tac' goalspec? term rule? |
852 'case\_tac' goalspec? term rule? |
853 ; |
853 ; |
862 ; |
862 ; |
863 \end{rail} |
863 \end{rail} |
864 |
864 |
865 \begin{descr} |
865 \begin{descr} |
866 |
866 |
867 \item [\mbox{\isa{case{\isacharunderscore}tac}} and \mbox{\isa{induct{\isacharunderscore}tac}}] |
867 \item [\hyperlink{method.HOL.case_tac}{\mbox{\isa{case{\isacharunderscore}tac}}} and \hyperlink{method.HOL.induct_tac}{\mbox{\isa{induct{\isacharunderscore}tac}}}] |
868 admit to reason about inductive datatypes only (unless an |
868 admit to reason about inductive datatypes only (unless an |
869 alternative rule is given explicitly). Furthermore, \mbox{\isa{case{\isacharunderscore}tac}} does a classical case split on booleans; \mbox{\isa{induct{\isacharunderscore}tac}} allows only variables to be given as instantiation. |
869 alternative rule is given explicitly). Furthermore, \hyperlink{method.HOL.case_tac}{\mbox{\isa{case{\isacharunderscore}tac}}} does a classical case split on booleans; \hyperlink{method.HOL.induct_tac}{\mbox{\isa{induct{\isacharunderscore}tac}}} allows only variables to be given as instantiation. |
870 These tactic emulations feature both goal addressing and dynamic |
870 These tactic emulations feature both goal addressing and dynamic |
871 instantiation. Note that named rule cases are \emph{not} provided |
871 instantiation. Note that named rule cases are \emph{not} provided |
872 as would be by the proper \mbox{\isa{induct}} and \mbox{\isa{cases}} proof |
872 as would be by the proper \hyperlink{method.induct}{\mbox{\isa{induct}}} and \hyperlink{method.cases}{\mbox{\isa{cases}}} proof |
873 methods (see \secref{sec:cases-induct}). |
873 methods (see \secref{sec:cases-induct}). |
874 |
874 |
875 \item [\mbox{\isa{ind{\isacharunderscore}cases}} and \mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}}] provide an interface to the internal \verb|mk_cases| operation. Rules are simplified in an unrestricted |
875 \item [\hyperlink{method.HOL.ind_cases}{\mbox{\isa{ind{\isacharunderscore}cases}}} and \hyperlink{command.HOL.inductive_cases}{\mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}}}] provide an interface to the internal \verb|mk_cases| operation. Rules are simplified in an unrestricted |
876 forward manner. |
876 forward manner. |
877 |
877 |
878 While \mbox{\isa{ind{\isacharunderscore}cases}} is a proof method to apply the |
878 While \hyperlink{method.HOL.ind_cases}{\mbox{\isa{ind{\isacharunderscore}cases}}} is a proof method to apply the |
879 result immediately as elimination rules, \mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}} provides case split theorems at the theory level |
879 result immediately as elimination rules, \hyperlink{command.HOL.inductive_cases}{\mbox{\isa{\isacommand{inductive{\isacharunderscore}cases}}}} provides case split theorems at the theory level |
880 for later use. The \mbox{\isa{\isakeyword{for}}} argument of the \mbox{\isa{ind{\isacharunderscore}cases}} method allows to specify a list of variables that should |
880 for later use. The \hyperlink{keyword.for}{\mbox{\isa{\isakeyword{for}}}} argument of the \hyperlink{method.HOL.ind_cases}{\mbox{\isa{ind{\isacharunderscore}cases}}} method allows to specify a list of variables that should |
881 be generalized before applying the resulting rule. |
881 be generalized before applying the resulting rule. |
882 |
882 |
883 \end{descr}% |
883 \end{descr}% |
884 \end{isamarkuptext}% |
884 \end{isamarkuptext}% |
885 \isamarkuptrue% |
885 \isamarkuptrue% |
897 One framework generates code from both functional and relational |
897 One framework generates code from both functional and relational |
898 programs to SML. See \cite{isabelle-HOL} for further information |
898 programs to SML. See \cite{isabelle-HOL} for further information |
899 (this actually covers the new-style theory format as well). |
899 (this actually covers the new-style theory format as well). |
900 |
900 |
901 \begin{matharray}{rcl} |
901 \begin{matharray}{rcl} |
902 \indexdef{HOL}{command}{value}\mbox{\isa{\isacommand{value}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
902 \indexdef{HOL}{command}{value}\hypertarget{command.HOL.value}{\hyperlink{command.HOL.value}{\mbox{\isa{\isacommand{value}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
903 \indexdef{HOL}{command}{code\_module}\mbox{\isa{\isacommand{code{\isacharunderscore}module}}} & : & \isartrans{theory}{theory} \\ |
903 \indexdef{HOL}{command}{code\_module}\hypertarget{command.HOL.code_module}{\hyperlink{command.HOL.code_module}{\mbox{\isa{\isacommand{code{\isacharunderscore}module}}}}} & : & \isartrans{theory}{theory} \\ |
904 \indexdef{HOL}{command}{code\_library}\mbox{\isa{\isacommand{code{\isacharunderscore}library}}} & : & \isartrans{theory}{theory} \\ |
904 \indexdef{HOL}{command}{code\_library}\hypertarget{command.HOL.code_library}{\hyperlink{command.HOL.code_library}{\mbox{\isa{\isacommand{code{\isacharunderscore}library}}}}} & : & \isartrans{theory}{theory} \\ |
905 \indexdef{HOL}{command}{consts\_code}\mbox{\isa{\isacommand{consts{\isacharunderscore}code}}} & : & \isartrans{theory}{theory} \\ |
905 \indexdef{HOL}{command}{consts\_code}\hypertarget{command.HOL.consts_code}{\hyperlink{command.HOL.consts_code}{\mbox{\isa{\isacommand{consts{\isacharunderscore}code}}}}} & : & \isartrans{theory}{theory} \\ |
906 \indexdef{HOL}{command}{types\_code}\mbox{\isa{\isacommand{types{\isacharunderscore}code}}} & : & \isartrans{theory}{theory} \\ |
906 \indexdef{HOL}{command}{types\_code}\hypertarget{command.HOL.types_code}{\hyperlink{command.HOL.types_code}{\mbox{\isa{\isacommand{types{\isacharunderscore}code}}}}} & : & \isartrans{theory}{theory} \\ |
907 \indexdef{HOL}{attribute}{code}\mbox{\isa{code}} & : & \isaratt \\ |
907 \indexdef{HOL}{attribute}{code}\hypertarget{attribute.HOL.code}{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}} & : & \isaratt \\ |
908 \end{matharray} |
908 \end{matharray} |
909 |
909 |
910 \begin{rail} |
910 \begin{rail} |
911 'value' term |
911 'value' term |
912 ; |
912 ; |
959 abstract executable view and \emph{serialization} to a specific |
959 abstract executable view and \emph{serialization} to a specific |
960 \emph{target language}. See \cite{isabelle-codegen} for an |
960 \emph{target language}. See \cite{isabelle-codegen} for an |
961 introduction on how to use it. |
961 introduction on how to use it. |
962 |
962 |
963 \begin{matharray}{rcl} |
963 \begin{matharray}{rcl} |
964 \indexdef{HOL}{command}{export\_code}\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
964 \indexdef{HOL}{command}{export\_code}\hypertarget{command.HOL.export_code}{\hyperlink{command.HOL.export_code}{\mbox{\isa{\isacommand{export{\isacharunderscore}code}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
965 \indexdef{HOL}{command}{code\_thms}\mbox{\isa{\isacommand{code{\isacharunderscore}thms}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
965 \indexdef{HOL}{command}{code\_thms}\hypertarget{command.HOL.code_thms}{\hyperlink{command.HOL.code_thms}{\mbox{\isa{\isacommand{code{\isacharunderscore}thms}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
966 \indexdef{HOL}{command}{code\_deps}\mbox{\isa{\isacommand{code{\isacharunderscore}deps}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
966 \indexdef{HOL}{command}{code\_deps}\hypertarget{command.HOL.code_deps}{\hyperlink{command.HOL.code_deps}{\mbox{\isa{\isacommand{code{\isacharunderscore}deps}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
967 \indexdef{HOL}{command}{code\_datatype}\mbox{\isa{\isacommand{code{\isacharunderscore}datatype}}} & : & \isartrans{theory}{theory} \\ |
967 \indexdef{HOL}{command}{code\_datatype}\hypertarget{command.HOL.code_datatype}{\hyperlink{command.HOL.code_datatype}{\mbox{\isa{\isacommand{code{\isacharunderscore}datatype}}}}} & : & \isartrans{theory}{theory} \\ |
968 \indexdef{HOL}{command}{code\_const}\mbox{\isa{\isacommand{code{\isacharunderscore}const}}} & : & \isartrans{theory}{theory} \\ |
968 \indexdef{HOL}{command}{code\_const}\hypertarget{command.HOL.code_const}{\hyperlink{command.HOL.code_const}{\mbox{\isa{\isacommand{code{\isacharunderscore}const}}}}} & : & \isartrans{theory}{theory} \\ |
969 \indexdef{HOL}{command}{code\_type}\mbox{\isa{\isacommand{code{\isacharunderscore}type}}} & : & \isartrans{theory}{theory} \\ |
969 \indexdef{HOL}{command}{code\_type}\hypertarget{command.HOL.code_type}{\hyperlink{command.HOL.code_type}{\mbox{\isa{\isacommand{code{\isacharunderscore}type}}}}} & : & \isartrans{theory}{theory} \\ |
970 \indexdef{HOL}{command}{code\_class}\mbox{\isa{\isacommand{code{\isacharunderscore}class}}} & : & \isartrans{theory}{theory} \\ |
970 \indexdef{HOL}{command}{code\_class}\hypertarget{command.HOL.code_class}{\hyperlink{command.HOL.code_class}{\mbox{\isa{\isacommand{code{\isacharunderscore}class}}}}} & : & \isartrans{theory}{theory} \\ |
971 \indexdef{HOL}{command}{code\_instance}\mbox{\isa{\isacommand{code{\isacharunderscore}instance}}} & : & \isartrans{theory}{theory} \\ |
971 \indexdef{HOL}{command}{code\_instance}\hypertarget{command.HOL.code_instance}{\hyperlink{command.HOL.code_instance}{\mbox{\isa{\isacommand{code{\isacharunderscore}instance}}}}} & : & \isartrans{theory}{theory} \\ |
972 \indexdef{HOL}{command}{code\_monad}\mbox{\isa{\isacommand{code{\isacharunderscore}monad}}} & : & \isartrans{theory}{theory} \\ |
972 \indexdef{HOL}{command}{code\_monad}\hypertarget{command.HOL.code_monad}{\hyperlink{command.HOL.code_monad}{\mbox{\isa{\isacommand{code{\isacharunderscore}monad}}}}} & : & \isartrans{theory}{theory} \\ |
973 \indexdef{HOL}{command}{code\_reserved}\mbox{\isa{\isacommand{code{\isacharunderscore}reserved}}} & : & \isartrans{theory}{theory} \\ |
973 \indexdef{HOL}{command}{code\_reserved}\hypertarget{command.HOL.code_reserved}{\hyperlink{command.HOL.code_reserved}{\mbox{\isa{\isacommand{code{\isacharunderscore}reserved}}}}} & : & \isartrans{theory}{theory} \\ |
974 \indexdef{HOL}{command}{code\_include}\mbox{\isa{\isacommand{code{\isacharunderscore}include}}} & : & \isartrans{theory}{theory} \\ |
974 \indexdef{HOL}{command}{code\_include}\hypertarget{command.HOL.code_include}{\hyperlink{command.HOL.code_include}{\mbox{\isa{\isacommand{code{\isacharunderscore}include}}}}} & : & \isartrans{theory}{theory} \\ |
975 \indexdef{HOL}{command}{code\_modulename}\mbox{\isa{\isacommand{code{\isacharunderscore}modulename}}} & : & \isartrans{theory}{theory} \\ |
975 \indexdef{HOL}{command}{code\_modulename}\hypertarget{command.HOL.code_modulename}{\hyperlink{command.HOL.code_modulename}{\mbox{\isa{\isacommand{code{\isacharunderscore}modulename}}}}} & : & \isartrans{theory}{theory} \\ |
976 \indexdef{HOL}{command}{code\_exception}\mbox{\isa{\isacommand{code{\isacharunderscore}exception}}} & : & \isartrans{theory}{theory} \\ |
976 \indexdef{HOL}{command}{code\_exception}\hypertarget{command.HOL.code_exception}{\hyperlink{command.HOL.code_exception}{\mbox{\isa{\isacommand{code{\isacharunderscore}exception}}}}} & : & \isartrans{theory}{theory} \\ |
977 \indexdef{HOL}{command}{print\_codesetup}\mbox{\isa{\isacommand{print{\isacharunderscore}codesetup}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
977 \indexdef{HOL}{command}{print\_codesetup}\hypertarget{command.HOL.print_codesetup}{\hyperlink{command.HOL.print_codesetup}{\mbox{\isa{\isacommand{print{\isacharunderscore}codesetup}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}} & : & \isarkeep{theory~|~proof} \\ |
978 \indexdef{HOL}{attribute}{code}\mbox{\isa{code}} & : & \isaratt \\ |
978 \indexdef{HOL}{attribute}{code}\hypertarget{attribute.HOL.code}{\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}} & : & \isaratt \\ |
979 \end{matharray} |
979 \end{matharray} |
980 |
980 |
981 \begin{rail} |
981 \begin{rail} |
982 'export\_code' ( constexpr + ) ? \\ |
982 'export\_code' ( constexpr + ) ? \\ |
983 ( ( 'in' target ( 'module\_name' string ) ? \\ |
983 ( ( 'in' target ( 'module\_name' string ) ? \\ |
1061 all executable contants within a certain theory by giving \isa{{\isachardoublequote}name{\isachardot}{\isacharasterisk}{\isachardoublequote}}, or referring to \emph{all} executable constants currently |
1061 all executable contants within a certain theory by giving \isa{{\isachardoublequote}name{\isachardot}{\isacharasterisk}{\isachardoublequote}}, or referring to \emph{all} executable constants currently |
1062 available by giving \isa{{\isachardoublequote}{\isacharasterisk}{\isachardoublequote}}. |
1062 available by giving \isa{{\isachardoublequote}{\isacharasterisk}{\isachardoublequote}}. |
1063 |
1063 |
1064 By default, for each involved theory one corresponding name space |
1064 By default, for each involved theory one corresponding name space |
1065 module is generated. Alternativly, a module name may be specified |
1065 module is generated. Alternativly, a module name may be specified |
1066 after the \mbox{\isa{\isakeyword{module{\isacharunderscore}name}}} keyword; then \emph{all} code is |
1066 after the \hyperlink{keyword.module_name}{\mbox{\isa{\isakeyword{module{\isacharunderscore}name}}}} keyword; then \emph{all} code is |
1067 placed in this module. |
1067 placed in this module. |
1068 |
1068 |
1069 For \emph{SML} and \emph{OCaml}, the file specification refers to a |
1069 For \emph{SML} and \emph{OCaml}, the file specification refers to a |
1070 single file; for \emph{Haskell}, it refers to a whole directory, |
1070 single file; for \emph{Haskell}, it refers to a whole directory, |
1071 where code is generated in multiple files reflecting the module |
1071 where code is generated in multiple files reflecting the module |
1075 |
1075 |
1076 Serializers take an optional list of arguments in parentheses. For |
1076 Serializers take an optional list of arguments in parentheses. For |
1077 \emph{Haskell} a module name prefix may be given using the ``\isa{{\isachardoublequote}root{\isacharcolon}{\isachardoublequote}}'' argument; ``\isa{string{\isacharunderscore}classes}'' adds a ``\verb|deriving (Read, Show)|'' clause to each appropriate datatype |
1077 \emph{Haskell} a module name prefix may be given using the ``\isa{{\isachardoublequote}root{\isacharcolon}{\isachardoublequote}}'' argument; ``\isa{string{\isacharunderscore}classes}'' adds a ``\verb|deriving (Read, Show)|'' clause to each appropriate datatype |
1078 declaration. |
1078 declaration. |
1079 |
1079 |
1080 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}thms}}}] prints a list of theorems |
1080 \item [\hyperlink{command.HOL.code_thms}{\mbox{\isa{\isacommand{code{\isacharunderscore}thms}}}}] prints a list of theorems |
1081 representing the corresponding program containing all given |
1081 representing the corresponding program containing all given |
1082 constants; if no constants are given, the currently cached code |
1082 constants; if no constants are given, the currently cached code |
1083 theorems are printed. |
1083 theorems are printed. |
1084 |
1084 |
1085 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}deps}}}] visualizes dependencies of |
1085 \item [\hyperlink{command.HOL.code_deps}{\mbox{\isa{\isacommand{code{\isacharunderscore}deps}}}}] visualizes dependencies of |
1086 theorems representing the corresponding program containing all given |
1086 theorems representing the corresponding program containing all given |
1087 constants; if no constants are given, the currently cached code |
1087 constants; if no constants are given, the currently cached code |
1088 theorems are visualized. |
1088 theorems are visualized. |
1089 |
1089 |
1090 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}datatype}}}] specifies a constructor set |
1090 \item [\hyperlink{command.HOL.code_datatype}{\mbox{\isa{\isacommand{code{\isacharunderscore}datatype}}}}] specifies a constructor set |
1091 for a logical type. |
1091 for a logical type. |
1092 |
1092 |
1093 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}const}}}] associates a list of constants |
1093 \item [\hyperlink{command.HOL.code_const}{\mbox{\isa{\isacommand{code{\isacharunderscore}const}}}}] associates a list of constants |
1094 with target-specific serializations; omitting a serialization |
1094 with target-specific serializations; omitting a serialization |
1095 deletes an existing serialization. |
1095 deletes an existing serialization. |
1096 |
1096 |
1097 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}type}}}] associates a list of type |
1097 \item [\hyperlink{command.HOL.code_type}{\mbox{\isa{\isacommand{code{\isacharunderscore}type}}}}] associates a list of type |
1098 constructors with target-specific serializations; omitting a |
1098 constructors with target-specific serializations; omitting a |
1099 serialization deletes an existing serialization. |
1099 serialization deletes an existing serialization. |
1100 |
1100 |
1101 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}class}}}] associates a list of classes |
1101 \item [\hyperlink{command.HOL.code_class}{\mbox{\isa{\isacommand{code{\isacharunderscore}class}}}}] associates a list of classes |
1102 with target-specific class names; in addition, constants associated |
1102 with target-specific class names; in addition, constants associated |
1103 with this class may be given target-specific names used for instance |
1103 with this class may be given target-specific names used for instance |
1104 declarations; omitting a serialization deletes an existing |
1104 declarations; omitting a serialization deletes an existing |
1105 serialization. This applies only to \emph{Haskell}. |
1105 serialization. This applies only to \emph{Haskell}. |
1106 |
1106 |
1107 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}instance}}}] declares a list of type |
1107 \item [\hyperlink{command.HOL.code_instance}{\mbox{\isa{\isacommand{code{\isacharunderscore}instance}}}}] declares a list of type |
1108 constructor / class instance relations as ``already present'' for a |
1108 constructor / class instance relations as ``already present'' for a |
1109 given target. Omitting a ``\isa{{\isachardoublequote}{\isacharminus}{\isachardoublequote}}'' deletes an existing |
1109 given target. Omitting a ``\isa{{\isachardoublequote}{\isacharminus}{\isachardoublequote}}'' deletes an existing |
1110 ``already present'' declaration. This applies only to |
1110 ``already present'' declaration. This applies only to |
1111 \emph{Haskell}. |
1111 \emph{Haskell}. |
1112 |
1112 |
1113 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}monad}}}] provides an auxiliary |
1113 \item [\hyperlink{command.HOL.code_monad}{\mbox{\isa{\isacommand{code{\isacharunderscore}monad}}}}] provides an auxiliary |
1114 mechanism to generate monadic code. |
1114 mechanism to generate monadic code. |
1115 |
1115 |
1116 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}reserved}}}] declares a list of names as |
1116 \item [\hyperlink{command.HOL.code_reserved}{\mbox{\isa{\isacommand{code{\isacharunderscore}reserved}}}}] declares a list of names as |
1117 reserved for a given target, preventing it to be shadowed by any |
1117 reserved for a given target, preventing it to be shadowed by any |
1118 generated code. |
1118 generated code. |
1119 |
1119 |
1120 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}include}}}] adds arbitrary named content |
1120 \item [\hyperlink{command.HOL.code_include}{\mbox{\isa{\isacommand{code{\isacharunderscore}include}}}}] adds arbitrary named content |
1121 (``include'') to generated code. A as last argument ``\isa{{\isachardoublequote}{\isacharminus}{\isachardoublequote}}'' |
1121 (``include'') to generated code. A as last argument ``\isa{{\isachardoublequote}{\isacharminus}{\isachardoublequote}}'' |
1122 will remove an already added ``include''. |
1122 will remove an already added ``include''. |
1123 |
1123 |
1124 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}modulename}}}] declares aliasings from |
1124 \item [\hyperlink{command.HOL.code_modulename}{\mbox{\isa{\isacommand{code{\isacharunderscore}modulename}}}}] declares aliasings from |
1125 one module name onto another. |
1125 one module name onto another. |
1126 |
1126 |
1127 \item [\mbox{\isa{\isacommand{code{\isacharunderscore}exception}}}] declares constants which |
1127 \item [\hyperlink{command.HOL.code_exception}{\mbox{\isa{\isacommand{code{\isacharunderscore}exception}}}}] declares constants which |
1128 are not required to have a definition by a defining equations; these |
1128 are not required to have a definition by a defining equations; these |
1129 are mapped on exceptions instead. |
1129 are mapped on exceptions instead. |
1130 |
1130 |
1131 \item [\mbox{\isa{code}}~\isa{func}] explicitly selects (or |
1131 \item [\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}~\isa{func}] explicitly selects (or |
1132 with option ``\isa{{\isachardoublequote}del{\isacharcolon}{\isachardoublequote}}'' deselects) a defining equation for |
1132 with option ``\isa{{\isachardoublequote}del{\isacharcolon}{\isachardoublequote}}'' deselects) a defining equation for |
1133 code generation. Usually packages introducing defining equations |
1133 code generation. Usually packages introducing defining equations |
1134 provide a resonable default setup for selection. |
1134 provide a resonable default setup for selection. |
1135 |
1135 |
1136 \item [\mbox{\isa{code}}\isa{inline}] declares (or with |
1136 \item [\hyperlink{attribute.HOL.code}{\mbox{\isa{code}}}\isa{inline}] declares (or with |
1137 option ``\isa{{\isachardoublequote}del{\isacharcolon}{\isachardoublequote}}'' removes) inlining theorems which are |
1137 option ``\isa{{\isachardoublequote}del{\isacharcolon}{\isachardoublequote}}'' removes) inlining theorems which are |
1138 applied as rewrite rules to any defining equation during |
1138 applied as rewrite rules to any defining equation during |
1139 preprocessing. |
1139 preprocessing. |
1140 |
1140 |
1141 \item [\mbox{\isa{\isacommand{print{\isacharunderscore}codesetup}}}] gives an overview on |
1141 \item [\hyperlink{command.HOL.print_codesetup}{\mbox{\isa{\isacommand{print{\isacharunderscore}codesetup}}}}] gives an overview on |
1142 selected defining equations, code generator datatypes and |
1142 selected defining equations, code generator datatypes and |
1143 preprocessor setup. |
1143 preprocessor setup. |
1144 |
1144 |
1145 \end{descr}% |
1145 \end{descr}% |
1146 \end{isamarkuptext}% |
1146 \end{isamarkuptext}% |