doc-src/IsarRef/Thy/Spec.thy
author wenzelm
Wed, 28 May 2008 23:36:19 +0200
changeset 27010 4856b752a57c
parent 26870 94bedbb34b92
child 27040 3d3e6e07b931
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26869
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     1
(* $Id$ *)
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     2
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     3
theory Spec
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     4
imports Main
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     5
begin
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     6
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     7
chapter {* Specifications *}
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
     8
26870
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
     9
section {* Defining theories \label{sec:begin-thy} *}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    10
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    11
text {*
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    12
  \begin{matharray}{rcl}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    13
    @{command_def "header"} & : & \isarkeep{toplevel} \\
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    14
    @{command_def "theory"} & : & \isartrans{toplevel}{theory} \\
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    15
    @{command_def "end"} & : & \isartrans{theory}{toplevel} \\
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    16
  \end{matharray}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    17
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    18
  Isabelle/Isar theories are defined via theory, which contain both
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    19
  specifications and proofs; occasionally definitional mechanisms also
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    20
  require some explicit proof.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    21
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    22
  The first ``real'' command of any theory has to be @{command
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    23
  "theory"}, which starts a new theory based on the merge of existing
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    24
  ones.  Just preceding the @{command "theory"} keyword, there may be
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    25
  an optional @{command "header"} declaration, which is relevant to
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    26
  document preparation only; it acts very much like a special
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    27
  pre-theory markup command (cf.\ \secref{sec:markup-thy} and
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    28
  \secref{sec:markup-thy}).  The @{command "end"} command concludes a
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    29
  theory development; it has to be the very last command of any theory
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    30
  file loaded in batch-mode.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    31
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    32
  \begin{rail}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    33
    'header' text
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    34
    ;
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    35
    'theory' name 'imports' (name +) uses? 'begin'
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    36
    ;
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    37
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    38
    uses: 'uses' ((name | parname) +);
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    39
  \end{rail}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    40
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    41
  \begin{descr}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    42
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    43
  \item [@{command "header"}~@{text "text"}] provides plain text
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    44
  markup just preceding the formal beginning of a theory.  In actual
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    45
  document preparation the corresponding {\LaTeX} macro @{verbatim
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    46
  "\\isamarkupheader"} may be redefined to produce chapter or section
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    47
  headings.  See also \secref{sec:markup-thy} and
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    48
  \secref{sec:markup-prf} for further markup commands.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    49
  
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    50
  \item [@{command "theory"}~@{text "A \<IMPORTS> B\<^sub>1 \<dots>
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    51
  B\<^sub>n \<BEGIN>"}] starts a new theory @{text A} based on the
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    52
  merge of existing theories @{text "B\<^sub>1 \<dots> B\<^sub>n"}.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    53
  
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    54
  Due to inclusion of several ancestors, the overall theory structure
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    55
  emerging in an Isabelle session forms a directed acyclic graph
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    56
  (DAG).  Isabelle's theory loader ensures that the sources
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    57
  contributing to the development graph are always up-to-date.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    58
  Changed files are automatically reloaded when processing theory
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    59
  headers.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    60
  
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    61
  The optional @{keyword_def "uses"} specification declares additional
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    62
  dependencies on extra files (usually ML sources).  Files will be
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    63
  loaded immediately (as ML), unless the name is put in parentheses,
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    64
  which merely documents the dependency to be resolved later in the
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    65
  text (typically via explicit @{command_ref "use"} in the body text,
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    66
  see \secref{sec:ML}).
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    67
  
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    68
  \item [@{command "end"}] concludes the current theory definition or
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    69
  context switch.
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    70
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    71
  \end{descr}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    72
*}
94bedbb34b92 misc reorganization;
wenzelm
parents: 26869
diff changeset
    73
26869
3bc332135aa7 added chapters for "Specifications" and "Proofs";
wenzelm
parents:
diff changeset
    74
end