Theory Letrec

Up to index of Isabelle/HOLCF/ex

theory Letrec
imports HOLCF

(*  Title:      HOLCF/ex/Letrec.thy
Author: Brian Huffman
*)


header {* Recursive let bindings *}

theory Letrec
imports HOLCF
begin


default_sort pcpo

definition
CLetrec :: "('a -> 'a × 'b) -> 'b" where
"CLetrec = (Λ F. snd (F·(μ x. fst (F·x))))"


nonterminals
recbinds recbindt recbind


syntax
"_recbind" :: "['a, 'a] => recbind" ("(2_ =/ _)" 10)
"" :: "recbind => recbindt" ("_")
"_recbindt" :: "[recbind, recbindt] => recbindt" ("_,/ _")
"" :: "recbindt => recbinds" ("_")
"_recbinds" :: "[recbindt, recbinds] => recbinds" ("_;/ _")
"_Letrec" :: "[recbinds, 'a] => 'a" ("(Letrec (_)/ in (_))" 10)


translations
(recbindt) "x = a, (y,ys) = (b,bs)" == (recbindt) "(x,y,ys) = (a,b,bs)"
(recbindt) "x = a, y = b" == (recbindt) "(x,y) = (a,b)"


translations
"_Letrec (_recbinds b bs) e" == "_Letrec b (_Letrec bs e)"
"Letrec xs = a in (e,es)" == "CONST CLetrec·(Λ xs. (a,e,es))"
"Letrec xs = a in e" == "CONST CLetrec·(Λ xs. (a,e))"


end