Changes of HOLCF from Oscar Slotosch:
1. axclass instead of class
* less instead of
less_fun,
less_cfun,
less_sprod,
less_cprod,
less_ssum,
less_up,
less_lift
* @x.!y.x<<y instead of UUU instead of
UU_fun, UU_cfun, ...
* no witness type void needed (eliminated Void.thy.Void.ML)
* inst_<typ>_<class> derived as theorems
2. improved some proves on less_sprod and less_cprod
* eliminated the following theorems
Sprod1.ML: less_sprod1a
Sprod1.ML: less_sprod1b
Sprod1.ML: less_sprod2a
Sprod1.ML: less_sprod2b
Sprod1.ML: less_sprod2c
Sprod2.ML: less_sprod3a
Sprod2.ML: less_sprod3b
Sprod2.ML: less_sprod4b
Sprod2.ML: less_sprod4c
Sprod3.ML: less_sprod5b
Sprod3.ML: less_sprod5c
Cprod1.ML: less_cprod1b
Cprod1.ML: less_cprod2a
Cprod1.ML: less_cprod2b
Cprod1.ML: less_cprod2c
Cprod2.ML: less_cprod3a
Cprod2.ML: less_cprod3b
3. new classes:
* cpo<po,
* chfin<pcpo,
* flat<pcpo,
* derived: flat<chfin
to do: show instances for lift
4. Data Type One
* Used lift for the definition: one = unit lift
* Changed the constant one into ONE
5. Data Type Tr
* Used lift for the definition: tr = bool lift
* adopted definitions of if,andalso,orelse,neg
* only one theory Tr.thy,Tr.ML instead of
Tr1.thy,Tr1.ML, Tr2.thy,Tr2.ML
* reintroduced ceils for =TT,=FF
6. typedef
* Using typedef instead of faking type definitions
to do: change fapp, fabs from Cfun1 to Rep_Cfun, Abs_Cfun
7. adopted examples and domain construct to theses changes
These changes eliminated all rules and arities from HOLCF
(* Title: HOLCF/Tr.thy
ID: $Id$
Author: Franz Regensburger
Copyright 1993 Technische Universitaet Muenchen
Introduce infix if_then_else_fi and boolean connectives andalso, orelse
*)
Tr = Lift +
types tr = "bool lift"
consts
TT,FF :: "tr"
Icifte :: "tr -> 'c -> 'c -> 'c"
trand :: "tr -> tr -> tr"
tror :: "tr -> tr -> tr"
neg :: "tr -> tr"
plift :: "('a => bool) => 'a lift -> tr"
syntax "@cifte" :: "tr=>'c=>'c=>'c" ("(3If _/ (then _/ else _) fi)" 60)
"@andalso" :: "tr => tr => tr" ("_ andalso _" [36,35] 35)
"@orelse" :: "tr => tr => tr" ("_ orelse _" [31,30] 30)
translations
"tr" ==(type) "bool lift"
"x andalso y" == "trand`x`y"
"x orelse y" == "tror`x`y"
"If b then e1 else e2 fi" == "Icifte`b`e1`e2"
defs
TT_def "TT==Def True"
FF_def "FF==Def False"
neg_def "neg == flift2 not"
ifte_def "Icifte == (LAM b t e.flift1(%b.if b then t else e)`b)"
andalso_def "trand == (LAM x y.If x then y else FF fi)"
orelse_def "tror == (LAM x y.If x then TT else y fi)"
(* andalso, orelse are different from strict functions
andalso_def "trand == flift1(flift2 o (op &))"
orelse_def "tror == flift1(flift2 o (op |))"
*)
plift_def "plift p == (LAM x. flift1(%a.Def(p a))`x)"
(* start 8bit 1 *)
syntax
"GeqTT" :: "tr => bool" ("(\\<lceil>_\\<rceil>)")
"GeqFF" :: "tr => bool" ("(\\<lfloor>_\\<rfloor>)")
translations
"\\<lceil>x\\<rceil>" == "x = TT"
"\\<lfloor>x\\<rfloor>" == "x = FF"
(* end 8bit 1 *)
end