src/HOLCF/ex/Letrec.thy
author huffman
Tue, 23 Mar 2010 09:39:21 -0700
changeset 35932 86559356502d
child 36452 d37c6eed8117
permissions -rw-r--r--
move letrec stuff to new file HOLCF/ex/Letrec.thy
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35932
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     1
(*  Title:      HOLCF/ex/Letrec.thy
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     2
    Author:     Brian Huffman
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     3
*)
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     4
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     5
header {* Recursive let bindings *}
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     6
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     7
theory Letrec
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     8
imports HOLCF
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
     9
begin
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    10
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    11
defaultsort pcpo
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    12
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    13
definition
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    14
  CLetrec :: "('a \<rightarrow> 'a \<times> 'b) \<rightarrow> 'b" where
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    15
  "CLetrec = (\<Lambda> F. snd (F\<cdot>(\<mu> x. fst (F\<cdot>x))))"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    16
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    17
nonterminals
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    18
  recbinds recbindt recbind
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    19
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    20
syntax
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    21
  "_recbind"  :: "['a, 'a] \<Rightarrow> recbind"               ("(2_ =/ _)" 10)
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    22
  ""          :: "recbind \<Rightarrow> recbindt"               ("_")
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    23
  "_recbindt" :: "[recbind, recbindt] \<Rightarrow> recbindt"   ("_,/ _")
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    24
  ""          :: "recbindt \<Rightarrow> recbinds"              ("_")
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    25
  "_recbinds" :: "[recbindt, recbinds] \<Rightarrow> recbinds"  ("_;/ _")
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    26
  "_Letrec"   :: "[recbinds, 'a] \<Rightarrow> 'a"      ("(Letrec (_)/ in (_))" 10)
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    27
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    28
translations
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    29
  (recbindt) "x = a, (y,ys) = (b,bs)" == (recbindt) "(x,y,ys) = (a,b,bs)"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    30
  (recbindt) "x = a, y = b"          == (recbindt) "(x,y) = (a,b)"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    31
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    32
translations
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    33
  "_Letrec (_recbinds b bs) e" == "_Letrec b (_Letrec bs e)"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    34
  "Letrec xs = a in (e,es)"    == "CONST CLetrec\<cdot>(\<Lambda> xs. (a,e,es))"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    35
  "Letrec xs = a in e"         == "CONST CLetrec\<cdot>(\<Lambda> xs. (a,e))"
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    36
86559356502d move letrec stuff to new file HOLCF/ex/Letrec.thy
huffman
parents:
diff changeset
    37
end