doc-src/IsarRef/Thy/HOLCF_Specific.thy
author blanchet
Mon, 30 Apr 2012 21:59:10 +0200
changeset 47845 2a2bc13669bd
parent 42704 3f19e324ff59
permissions -rw-r--r--
export more symbols
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     1
theory HOLCF_Specific
42651
e3fdb7c96be5 formal Base theory;
wenzelm
parents: 42596
diff changeset
     2
imports Base HOLCF
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     3
begin
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
     4
26852
a31203f58b20 misc tuning;
wenzelm
parents: 26841
diff changeset
     5
chapter {* Isabelle/HOLCF \label{ch:holcf} *}
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
     6
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
     7
section {* Mixfix syntax for continuous operations *}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
     8
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
     9
text {*
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    10
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 26852
diff changeset
    11
    @{command_def (HOLCF) "consts"} & : & @{text "theory \<rightarrow> theory"} \\
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    12
  \end{matharray}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    13
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    14
  HOLCF provides a separate type for continuous functions @{text "\<alpha> \<rightarrow>
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    15
  \<beta>"}, with an explicit application operator @{term "f \<cdot> x"}.
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    16
  Isabelle mixfix syntax normally refers directly to the pure
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    17
  meta-level function type @{text "\<alpha> \<Rightarrow> \<beta>"}, with application @{text "f
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    18
  x"}.
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    19
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    20
  The HOLCF variant of @{command (HOLCF) "consts"} modifies that of
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    21
  Pure Isabelle (cf.\ \secref{sec:consts}) such that declarations
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    22
  involving continuous function types are treated specifically.  Any
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    23
  given syntax template is transformed internally, generating
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    24
  translation rules for the abstract and concrete representation of
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    25
  continuous application.  Note that mixing of HOLCF and Pure
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    26
  application is \emph{not} supported!
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    27
*}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    28
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    29
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    30
section {* Recursive domains *}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    31
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    32
text {*
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    33
  \begin{matharray}{rcl}
28761
9ec4482c9201 updated/refined types of Isar language elements, removed special LaTeX macros;
wenzelm
parents: 26852
diff changeset
    34
    @{command_def (HOLCF) "domain"} & : & @{text "theory \<rightarrow> theory"} \\
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    35
  \end{matharray}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    36
42596
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    37
  @{rail "
42704
3f19e324ff59 tuned rail diagrams and layout;
wenzelm
parents: 42651
diff changeset
    38
    @@{command (HOLCF) domain} @{syntax parname}? (spec + @'and')
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    39
    ;
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    40
42704
3f19e324ff59 tuned rail diagrams and layout;
wenzelm
parents: 42651
diff changeset
    41
    spec: @{syntax typespec} '=' (cons + '|')
42596
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    42
    ;
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    43
    cons: @{syntax name} (@{syntax type} * ) @{syntax mixfix}?
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    44
    ;
42596
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    45
    dtrules: @'distinct' @{syntax thmrefs} @'inject' @{syntax thmrefs}
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    46
      @'induction' @{syntax thmrefs}
6c621a9d612a modernized rail diagrams using @{rail} antiquotation;
wenzelm
parents: 30168
diff changeset
    47
  "}
26841
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    48
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    49
  Recursive domains in HOLCF are analogous to datatypes in classical
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    50
  HOL (cf.\ \secref{sec:hol-datatype}).  Mutual recursion is
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    51
  supported, but no nesting nor arbitrary branching.  Domain
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    52
  constructors may be strict (default) or lazy, the latter admits to
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    53
  introduce infinitary objects in the typical LCF manner (e.g.\ lazy
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    54
  lists).  See also \cite{MuellerNvOS99} for a general discussion of
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    55
  HOLCF domains.
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    56
*}
6ac51a2f48e1 converted HOLCF specific elements;
wenzelm
parents: 26840
diff changeset
    57
26840
ec46381f149d added logic-specific sessions;
wenzelm
parents:
diff changeset
    58
end