doc-src/IsarRef/Thy/HOLCF_Specific.thy
author wenzelm
Mon, 02 May 2011 01:05:50 +0200
changeset 43467 6c621a9d612a
parent 30168 9a20be5be90b
child 43522 e3fdb7c96be5
permissions -rw-r--r--
modernized rail diagrams using @{rail} antiquotation;
     1 theory HOLCF_Specific
     2 imports HOLCF
     3 begin
     4 
     5 chapter {* Isabelle/HOLCF \label{ch:holcf} *}
     6 
     7 section {* Mixfix syntax for continuous operations *}
     8 
     9 text {*
    10   \begin{matharray}{rcl}
    11     @{command_def (HOLCF) "consts"} & : & @{text "theory \<rightarrow> theory"} \\
    12   \end{matharray}
    13 
    14   HOLCF provides a separate type for continuous functions @{text "\<alpha> \<rightarrow>
    15   \<beta>"}, with an explicit application operator @{term "f \<cdot> x"}.
    16   Isabelle mixfix syntax normally refers directly to the pure
    17   meta-level function type @{text "\<alpha> \<Rightarrow> \<beta>"}, with application @{text "f
    18   x"}.
    19 
    20   The HOLCF variant of @{command (HOLCF) "consts"} modifies that of
    21   Pure Isabelle (cf.\ \secref{sec:consts}) such that declarations
    22   involving continuous function types are treated specifically.  Any
    23   given syntax template is transformed internally, generating
    24   translation rules for the abstract and concrete representation of
    25   continuous application.  Note that mixing of HOLCF and Pure
    26   application is \emph{not} supported!
    27 *}
    28 
    29 
    30 section {* Recursive domains *}
    31 
    32 text {*
    33   \begin{matharray}{rcl}
    34     @{command_def (HOLCF) "domain"} & : & @{text "theory \<rightarrow> theory"} \\
    35   \end{matharray}
    36 
    37   @{rail "
    38     @@{command (HOLCF) domain} @{syntax parname}? (dmspec + @'and')
    39     ;
    40 
    41     dmspec: @{syntax typespec} '=' (cons + '|')
    42     ;
    43     cons: @{syntax name} (@{syntax type} * ) @{syntax mixfix}?
    44     ;
    45     dtrules: @'distinct' @{syntax thmrefs} @'inject' @{syntax thmrefs}
    46       @'induction' @{syntax thmrefs}
    47   "}
    48 
    49   Recursive domains in HOLCF are analogous to datatypes in classical
    50   HOL (cf.\ \secref{sec:hol-datatype}).  Mutual recursion is
    51   supported, but no nesting nor arbitrary branching.  Domain
    52   constructors may be strict (default) or lazy, the latter admits to
    53   introduce infinitary objects in the typical LCF manner (e.g.\ lazy
    54   lists).  See also \cite{MuellerNvOS99} for a general discussion of
    55   HOLCF domains.
    56 *}
    57 
    58 end