doc-src/IsarRef/Thy/HOLCF_Specific.thy
changeset 26841 6ac51a2f48e1
parent 26840 ec46381f149d
child 26852 a31203f58b20
     1.1 --- a/doc-src/IsarRef/Thy/HOLCF_Specific.thy	Wed May 07 12:38:55 2008 +0200
     1.2 +++ b/doc-src/IsarRef/Thy/HOLCF_Specific.thy	Wed May 07 12:56:11 2008 +0200
     1.3 @@ -4,4 +4,56 @@
     1.4  imports HOLCF
     1.5  begin
     1.6  
     1.7 +chapter {* HOLCF specific elements *}
     1.8 +
     1.9 +section {* Mixfix syntax for continuous operations *}
    1.10 +
    1.11 +text {*
    1.12 +  \begin{matharray}{rcl}
    1.13 +    @{command_def (HOLCF) "consts"} & : & \isartrans{theory}{theory} \\
    1.14 +  \end{matharray}
    1.15 +
    1.16 +  HOLCF provides a separate type for continuous functions @{text "\<alpha> \<rightarrow>
    1.17 +  \<beta>"}, with an explicit application operator @{term "f \<cdot> x"}.
    1.18 +  Isabelle mixfix syntax normally refers directly to the pure
    1.19 +  meta-level function type @{text "\<alpha> \<Rightarrow> \<beta>"}, with application @{text "f
    1.20 +  x"}.
    1.21 +
    1.22 +  The HOLCF variant of @{command (HOLCF) "consts"} modifies that of
    1.23 +  Pure Isabelle (cf.\ \secref{sec:consts}) such that declarations
    1.24 +  involving continuous function types are treated specifically.  Any
    1.25 +  given syntax template is transformed internally, generating
    1.26 +  translation rules for the abstract and concrete representation of
    1.27 +  continuous application.  Note that mixing of HOLCF and Pure
    1.28 +  application is \emph{not} supported!
    1.29 +*}
    1.30 +
    1.31 +
    1.32 +section {* Recursive domains *}
    1.33 +
    1.34 +text {*
    1.35 +  \begin{matharray}{rcl}
    1.36 +    @{command_def (HOLCF) "domain"} & : & \isartrans{theory}{theory} \\
    1.37 +  \end{matharray}
    1.38 +
    1.39 +  \begin{rail}
    1.40 +    'domain' parname? (dmspec + 'and')
    1.41 +    ;
    1.42 +
    1.43 +    dmspec: typespec '=' (cons + '|')
    1.44 +    ;
    1.45 +    cons: name (type *) mixfix?
    1.46 +    ;
    1.47 +    dtrules: 'distinct' thmrefs 'inject' thmrefs 'induction' thmrefs
    1.48 +  \end{rail}
    1.49 +
    1.50 +  Recursive domains in HOLCF are analogous to datatypes in classical
    1.51 +  HOL (cf.\ \secref{sec:hol-datatype}).  Mutual recursion is
    1.52 +  supported, but no nesting nor arbitrary branching.  Domain
    1.53 +  constructors may be strict (default) or lazy, the latter admits to
    1.54 +  introduce infinitary objects in the typical LCF manner (e.g.\ lazy
    1.55 +  lists).  See also \cite{MuellerNvOS99} for a general discussion of
    1.56 +  HOLCF domains.
    1.57 +*}
    1.58 +
    1.59  end