doc-src/IsarAdvanced/Codegen/Thy/document/Codegen.tex
changeset 24379 823ffe1fdf67
parent 24279 165648d5679f
child 24421 acfb2413faa3
equal deleted inserted replaced
24378:af83eeb4a702 24379:823ffe1fdf67
   172 \ \ \ \ {\isacharparenleft}update\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}{\isacharcomma}\ {\isacharbrackleft}Suc\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}{\isacharbrackright}{\isacharparenright}\ {\isacharparenleft}Leaf\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
   172 \ \ \ \ {\isacharparenleft}update\ {\isacharparenleft}Suc\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}{\isacharcomma}\ {\isacharbrackleft}Suc\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}{\isacharbrackright}{\isacharparenright}\ {\isacharparenleft}Leaf\ {\isacharparenleft}Suc\ {\isadigit{0}}{\isacharparenright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
   173 \begin{isamarkuptext}%
   173 \begin{isamarkuptext}%
   174 \noindent Then we generate code%
   174 \noindent Then we generate code%
   175 \end{isamarkuptext}%
   175 \end{isamarkuptext}%
   176 \isamarkuptrue%
   176 \isamarkuptrue%
   177 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   177 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   178 \ example\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}tree{\isachardot}ML{\isachardoublequoteclose}%
   178 \ example\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}tree{\isachardot}ML{\isachardoublequoteclose}%
   179 \begin{isamarkuptext}%
   179 \begin{isamarkuptext}%
   180 \noindent which looks like:
   180 \noindent which looks like:
   181   \lstsml{Thy/examples/tree.ML}%
   181   \lstsml{Thy/examples/tree.ML}%
   182 \end{isamarkuptext}%
   182 \end{isamarkuptext}%
   255 \ \ {\isacharbar}\ {\isachardoublequoteopen}fac\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isacharequal}\ Suc\ n\ {\isacharasterisk}\ fac\ n{\isachardoublequoteclose}%
   255 \ \ {\isacharbar}\ {\isachardoublequoteopen}fac\ {\isacharparenleft}Suc\ n{\isacharparenright}\ {\isacharequal}\ Suc\ n\ {\isacharasterisk}\ fac\ n{\isachardoublequoteclose}%
   256 \begin{isamarkuptext}%
   256 \begin{isamarkuptext}%
   257 \noindent This executable specification is now turned to SML code:%
   257 \noindent This executable specification is now turned to SML code:%
   258 \end{isamarkuptext}%
   258 \end{isamarkuptext}%
   259 \isamarkuptrue%
   259 \isamarkuptrue%
   260 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   260 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   261 \ fac\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fac{\isachardot}ML{\isachardoublequoteclose}%
   261 \ fac\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fac{\isachardot}ML{\isachardoublequoteclose}%
   262 \begin{isamarkuptext}%
   262 \begin{isamarkuptext}%
   263 \noindent  The \isa{{\isasymCODEGEN}} command takes a space-separated list of
   263 \noindent  The \isa{{\isasymEXPORTCODE}} command takes a space-separated list of
   264   constants together with \qn{serialization directives}
   264   constants together with \qn{serialization directives}
   265   These start with a \qn{target language}
   265   These start with a \qn{target language}
   266   identifier, followed by a file specification
   266   identifier, followed by a file specification
   267   where to write the generated code to.
   267   where to write the generated code to.
   268 
   268 
   308 {\isafoldML}%
   308 {\isafoldML}%
   309 %
   309 %
   310 \isadelimML
   310 \isadelimML
   311 %
   311 %
   312 \endisadelimML
   312 \endisadelimML
   313 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   313 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   314 \ pick{\isacharunderscore}some\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fail{\isacharunderscore}const{\isachardot}ML{\isachardoublequoteclose}%
   314 \ pick{\isacharunderscore}some\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fail{\isacharunderscore}const{\isachardot}ML{\isachardoublequoteclose}%
   315 \begin{isamarkuptext}%
   315 \begin{isamarkuptext}%
   316 \noindent will fail.%
   316 \noindent will fail.%
   317 \end{isamarkuptext}%
   317 \end{isamarkuptext}%
   318 \isamarkuptrue%
   318 \isamarkuptrue%
   373 \isadelimproof
   373 \isadelimproof
   374 \isanewline
   374 \isanewline
   375 %
   375 %
   376 \endisadelimproof
   376 \endisadelimproof
   377 \isanewline
   377 \isanewline
   378 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   378 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   379 \ pick\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}pick{\isadigit{1}}{\isachardot}ML{\isachardoublequoteclose}%
   379 \ pick\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}pick{\isadigit{1}}{\isachardot}ML{\isachardoublequoteclose}%
   380 \begin{isamarkuptext}%
   380 \begin{isamarkuptext}%
   381 \noindent This theorem now is used for generating code:
   381 \noindent This theorem now is used for generating code:
   382 
   382 
   383   \lstsml{Thy/examples/pick1.ML}
   383   \lstsml{Thy/examples/pick1.ML}
   387 \end{isamarkuptext}%
   387 \end{isamarkuptext}%
   388 \isamarkuptrue%
   388 \isamarkuptrue%
   389 \isacommand{lemmas}\isamarkupfalse%
   389 \isacommand{lemmas}\isamarkupfalse%
   390 \ {\isacharbrackleft}code\ func\ del{\isacharbrackright}\ {\isacharequal}\ pick{\isachardot}simps\ \isanewline
   390 \ {\isacharbrackleft}code\ func\ del{\isacharbrackright}\ {\isacharequal}\ pick{\isachardot}simps\ \isanewline
   391 \isanewline
   391 \isanewline
   392 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   392 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   393 \ pick\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}pick{\isadigit{2}}{\isachardot}ML{\isachardoublequoteclose}%
   393 \ pick\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}pick{\isadigit{2}}{\isachardot}ML{\isachardoublequoteclose}%
   394 \begin{isamarkuptext}%
   394 \begin{isamarkuptext}%
   395 \lstsml{Thy/examples/pick2.ML}
   395 \lstsml{Thy/examples/pick2.ML}
   396 
   396 
   397   \noindent Syntactic redundancies are implicitly dropped. For example,
   397   \noindent Syntactic redundancies are implicitly dropped. For example,
   418 \isadelimproof
   418 \isadelimproof
   419 \isanewline
   419 \isanewline
   420 %
   420 %
   421 \endisadelimproof
   421 \endisadelimproof
   422 \isanewline
   422 \isanewline
   423 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   423 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   424 \ fac\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fac{\isacharunderscore}case{\isachardot}ML{\isachardoublequoteclose}%
   424 \ fac\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}fac{\isacharunderscore}case{\isachardot}ML{\isachardoublequoteclose}%
   425 \begin{isamarkuptext}%
   425 \begin{isamarkuptext}%
   426 \lstsml{Thy/examples/fac_case.ML}
   426 \lstsml{Thy/examples/fac_case.ML}
   427 
   427 
   428   \begin{warn}
   428   \begin{warn}
   513   some Haskell systems enforce, each module ends
   513   some Haskell systems enforce, each module ends
   514   up in a single file. The module hierarchy is reflected in
   514   up in a single file. The module hierarchy is reflected in
   515   the file system, with root directory given as file specification.%
   515   the file system, with root directory given as file specification.%
   516 \end{isamarkuptext}%
   516 \end{isamarkuptext}%
   517 \isamarkuptrue%
   517 \isamarkuptrue%
   518 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   518 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   519 \ dummy\ \isakeyword{in}\ Haskell\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}{\isachardoublequoteclose}%
   519 \ dummy\ \isakeyword{in}\ Haskell\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}{\isachardoublequoteclose}%
   520 \begin{isamarkuptext}%
   520 \begin{isamarkuptext}%
   521 \lsthaskell{Thy/examples/Codegen.hs}
   521 \lsthaskell{Thy/examples/Codegen.hs}
   522   \noindent (we have left out all other modules).
   522   \noindent (we have left out all other modules).
   523 
   523 
   524   \medskip
   524   \medskip
   525 
   525 
   526   The whole code in SML with explicit dictionary passing:%
   526   The whole code in SML with explicit dictionary passing:%
   527 \end{isamarkuptext}%
   527 \end{isamarkuptext}%
   528 \isamarkuptrue%
   528 \isamarkuptrue%
   529 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   529 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   530 \ dummy\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}class{\isachardot}ML{\isachardoublequoteclose}%
   530 \ dummy\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}class{\isachardot}ML{\isachardoublequoteclose}%
   531 \begin{isamarkuptext}%
   531 \begin{isamarkuptext}%
   532 \lstsml{Thy/examples/class.ML}
   532 \lstsml{Thy/examples/class.ML}
   533 
   533 
   534   \medskip
   534   \medskip
   535 
   535 
   536   \noindent or in OCaml:%
   536   \noindent or in OCaml:%
   537 \end{isamarkuptext}%
   537 \end{isamarkuptext}%
   538 \isamarkuptrue%
   538 \isamarkuptrue%
   539 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   539 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   540 \ dummy\ \isakeyword{in}\ OCaml\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}class{\isachardot}ocaml{\isachardoublequoteclose}%
   540 \ dummy\ \isakeyword{in}\ OCaml\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}class{\isachardot}ocaml{\isachardoublequoteclose}%
   541 \begin{isamarkuptext}%
   541 \begin{isamarkuptext}%
   542 \lstsml{Thy/examples/class.ocaml}
   542 \lstsml{Thy/examples/class.ocaml}
   543 
   543 
   544   \medskip The explicit association of constants
   544   \medskip The explicit association of constants
   759 The membership test during preprocessing is rewritten,
   759 The membership test during preprocessing is rewritten,
   760   resulting in \isa{op\ mem}, which itself
   760   resulting in \isa{op\ mem}, which itself
   761   performs an explicit equality check.%
   761   performs an explicit equality check.%
   762 \end{isamarkuptext}%
   762 \end{isamarkuptext}%
   763 \isamarkuptrue%
   763 \isamarkuptrue%
   764 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   764 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   765 \ collect{\isacharunderscore}duplicates\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}collect{\isacharunderscore}duplicates{\isachardot}ML{\isachardoublequoteclose}%
   765 \ collect{\isacharunderscore}duplicates\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}collect{\isacharunderscore}duplicates{\isachardot}ML{\isachardoublequoteclose}%
   766 \begin{isamarkuptext}%
   766 \begin{isamarkuptext}%
   767 \lstsml{Thy/examples/collect_duplicates.ML}%
   767 \lstsml{Thy/examples/collect_duplicates.ML}%
   768 \end{isamarkuptext}%
   768 \end{isamarkuptext}%
   769 \isamarkuptrue%
   769 \isamarkuptrue%
   897 %
   897 %
   898 \begin{isamarkuptext}%
   898 \begin{isamarkuptext}%
   899 \noindent Then code generation succeeds:%
   899 \noindent Then code generation succeeds:%
   900 \end{isamarkuptext}%
   900 \end{isamarkuptext}%
   901 \isamarkuptrue%
   901 \isamarkuptrue%
   902 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   902 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   903 \ {\isachardoublequoteopen}op\ {\isasymle}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}eq{\isacharcomma}\ ord{\isacharbraceright}\ {\isasymtimes}\ {\isacharprime}b{\isasymColon}ord\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymtimes}\ {\isacharprime}b\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   903 \ {\isachardoublequoteopen}op\ {\isasymle}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}eq{\isacharcomma}\ ord{\isacharbraceright}\ {\isasymtimes}\ {\isacharprime}b{\isasymColon}ord\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymtimes}\ {\isacharprime}b\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   904 \ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}lexicographic{\isachardot}ML{\isachardoublequoteclose}%
   904 \ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}lexicographic{\isachardot}ML{\isachardoublequoteclose}%
   905 \begin{isamarkuptext}%
   905 \begin{isamarkuptext}%
   906 \lstsml{Thy/examples/lexicographic.ML}%
   906 \lstsml{Thy/examples/lexicographic.ML}%
   907 \end{isamarkuptext}%
   907 \end{isamarkuptext}%
   974 %
   974 %
   975 \begin{isamarkuptext}%
   975 \begin{isamarkuptext}%
   976 does not depend on instance \isa{monotype\ {\isasymColon}\ eq}:%
   976 does not depend on instance \isa{monotype\ {\isasymColon}\ eq}:%
   977 \end{isamarkuptext}%
   977 \end{isamarkuptext}%
   978 \isamarkuptrue%
   978 \isamarkuptrue%
   979 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
   979 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
   980 \ {\isachardoublequoteopen}op\ {\isacharequal}\ {\isacharcolon}{\isacharcolon}\ monotype\ {\isasymRightarrow}\ monotype\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   980 \ {\isachardoublequoteopen}op\ {\isacharequal}\ {\isacharcolon}{\isacharcolon}\ monotype\ {\isasymRightarrow}\ monotype\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   981 \ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}monotype{\isachardot}ML{\isachardoublequoteclose}%
   981 \ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}monotype{\isachardot}ML{\isachardoublequoteclose}%
   982 \begin{isamarkuptext}%
   982 \begin{isamarkuptext}%
   983 \lstsml{Thy/examples/monotype.ML}%
   983 \lstsml{Thy/examples/monotype.ML}%
   984 \end{isamarkuptext}%
   984 \end{isamarkuptext}%
  1037 {\isafoldtt}%
  1037 {\isafoldtt}%
  1038 %
  1038 %
  1039 \isadelimtt
  1039 \isadelimtt
  1040 %
  1040 %
  1041 \endisadelimtt
  1041 \endisadelimtt
  1042 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
  1042 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
  1043 \ in{\isacharunderscore}interval\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}literal{\isachardot}ML{\isachardoublequoteclose}%
  1043 \ in{\isacharunderscore}interval\ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}literal{\isachardot}ML{\isachardoublequoteclose}%
  1044 \begin{isamarkuptext}%
  1044 \begin{isamarkuptext}%
  1045 \lstsml{Thy/examples/bool_literal.ML}
  1045 \lstsml{Thy/examples/bool_literal.ML}
  1046 
  1046 
  1047   \noindent Though this is correct code, it is a little bit unsatisfactory:
  1047   \noindent Though this is correct code, it is a little bit unsatisfactory:
  1084   the corresponding mechanism.  Each ``\verb|_|'' in
  1084   the corresponding mechanism.  Each ``\verb|_|'' in
  1085   a serialization expression is treated as a placeholder
  1085   a serialization expression is treated as a placeholder
  1086   for the type constructor's (the constant's) arguments.%
  1086   for the type constructor's (the constant's) arguments.%
  1087 \end{isamarkuptext}%
  1087 \end{isamarkuptext}%
  1088 \isamarkuptrue%
  1088 \isamarkuptrue%
  1089 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
  1089 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
  1090 \ in{\isacharunderscore}interval\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}mlbool{\isachardot}ML{\isachardoublequoteclose}%
  1090 \ in{\isacharunderscore}interval\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}mlbool{\isachardot}ML{\isachardoublequoteclose}%
  1091 \begin{isamarkuptext}%
  1091 \begin{isamarkuptext}%
  1092 \lstsml{Thy/examples/bool_mlbool.ML}
  1092 \lstsml{Thy/examples/bool_mlbool.ML}
  1093 
  1093 
  1094   \noindent This still is not perfect: the parentheses
  1094   \noindent This still is not perfect: the parentheses
  1114 \isadelimtt
  1114 \isadelimtt
  1115 %
  1115 %
  1116 \endisadelimtt
  1116 \endisadelimtt
  1117 \isanewline
  1117 \isanewline
  1118 \isanewline
  1118 \isanewline
  1119 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
  1119 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
  1120 \ in{\isacharunderscore}interval\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}infix{\isachardot}ML{\isachardoublequoteclose}%
  1120 \ in{\isacharunderscore}interval\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}bool{\isacharunderscore}infix{\isachardot}ML{\isachardoublequoteclose}%
  1121 \begin{isamarkuptext}%
  1121 \begin{isamarkuptext}%
  1122 \lstsml{Thy/examples/bool_infix.ML}
  1122 \lstsml{Thy/examples/bool_infix.ML}
  1123 
  1123 
  1124   \medskip
  1124   \medskip
  1390 \isadelimproof
  1390 \isadelimproof
  1391 %
  1391 %
  1392 \endisadelimproof
  1392 \endisadelimproof
  1393 \isanewline
  1393 \isanewline
  1394 \isanewline
  1394 \isanewline
  1395 \isacommand{code{\isacharunderscore}gen}\isamarkupfalse%
  1395 \isacommand{export{\isacharunderscore}code}\isamarkupfalse%
  1396 \ {\isachardoublequoteopen}{\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\ insert\ {\isachardoublequoteopen}op\ {\isasymin}{\isachardoublequoteclose}\ {\isachardoublequoteopen}op\ {\isasymunion}{\isachardoublequoteclose}\ {\isachardoublequoteopen}Union{\isachardoublequoteclose}\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}set{\isacharunderscore}list{\isachardot}ML{\isachardoublequoteclose}%
  1396 \ {\isachardoublequoteopen}{\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\ insert\ {\isachardoublequoteopen}op\ {\isasymin}{\isachardoublequoteclose}\ {\isachardoublequoteopen}op\ {\isasymunion}{\isachardoublequoteclose}\ {\isachardoublequoteopen}Union{\isachardoublequoteclose}\ \ \isakeyword{in}\ SML\ \isakeyword{file}\ {\isachardoublequoteopen}examples{\isacharslash}set{\isacharunderscore}list{\isachardot}ML{\isachardoublequoteclose}%
  1397 \begin{isamarkuptext}%
  1397 \begin{isamarkuptext}%
  1398 \lstsml{Thy/examples/set_list.ML}
  1398 \lstsml{Thy/examples/set_list.ML}
  1399 
  1399 
  1400   \medskip
  1400   \medskip
  1444   executable content of the theory changes.
  1444   executable content of the theory changes.
  1445   Implementation of caching is supposed to transparently
  1445   Implementation of caching is supposed to transparently
  1446   hid away the details from the user.  Anyway, caching
  1446   hid away the details from the user.  Anyway, caching
  1447   reaches the surface by using a slightly more general form
  1447   reaches the surface by using a slightly more general form
  1448   of the \isa{{\isasymCODETHMS}}, \isa{{\isasymCODEDEPS}}
  1448   of the \isa{{\isasymCODETHMS}}, \isa{{\isasymCODEDEPS}}
  1449   and \isa{{\isasymCODEGEN}} commands: the list of constants
  1449   and \isa{{\isasymEXPORTCODE}} commands: the list of constants
  1450   may be omitted.  Then, all constants with code theorems
  1450   may be omitted.  Then, all constants with code theorems
  1451   in the current cache are referred to.%
  1451   in the current cache are referred to.%
  1452 \end{isamarkuptext}%
  1452 \end{isamarkuptext}%
  1453 \isamarkuptrue%
  1453 \isamarkuptrue%
  1454 %
  1454 %