doc-src/IsarAdvanced/Codegen/Thy/Further.thy
author haftmann
Thu, 02 Oct 2008 13:07:33 +0200
changeset 28456 7a558c872104
parent 28447 df77ed974a78
child 28593 f087237af65d
permissions -rw-r--r--
tuned
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28213
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
     1
theory Further
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
     2
imports Setup
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
     3
begin
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
     4
28447
haftmann
parents: 28419
diff changeset
     5
section {* Further issues \label{sec:further} *}
28419
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
     6
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
     7
subsection {* Further reading *}
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
     8
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
     9
text {*
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    10
  Do dive deeper into the issue of code generation, you should visit
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    11
  the Isabelle/Isar Reference Manual \cite{isabelle-isar-ref} which
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    12
  constains exhaustive syntax diagrams.
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    13
*}
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    14
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    15
subsection {* Modules *}
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    16
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    17
text {*
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    18
  When invoking the @{command export_code} command it is possible to leave
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    19
  out the @{keyword "module_name"} part;  then code is distributed over
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    20
  different modules, where the module name space roughly is induced
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    21
  by the @{text Isabelle} theory namespace.
28213
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    22
28419
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    23
  Then sometimes the awkward situation occurs that dependencies between
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    24
  definitions introduce cyclic dependencies between modules, which in the
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    25
  @{text Haskell} world leaves you to the mercy of the @{text Haskell} implementation
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    26
  you are using,  while for @{text SML}/@{text OCaml} code generation is not possible.
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    27
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    28
  A solution is to declare module names explicitly.
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    29
  Let use assume the three cyclically dependent
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    30
  modules are named \emph{A}, \emph{B} and \emph{C}.
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    31
  Then, by stating
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    32
*}
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    33
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    34
code_modulename SML
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    35
  A ABC
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    36
  B ABC
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    37
  C ABC
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    38
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    39
text {*
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    40
  we explicitly map all those modules on \emph{ABC},
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    41
  resulting in an ad-hoc merge of this three modules
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    42
  at serialisation time.
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    43
*}
28213
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    44
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    45
subsection {* Evaluation oracle *}
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    46
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    47
subsection {* Code antiquotation *}
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    48
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    49
subsection {* Creating new targets *}
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    50
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    51
text {* extending targets, adding targets *}
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    52
28419
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    53
subsection {* Imperative data structures *}
f65e8b318581 re-canibalised manual
haftmann
parents: 28213
diff changeset
    54
28213
b52f9205a02d New outline for codegen tutorial -- draft
haftmann
parents:
diff changeset
    55
end