# HG changeset patch # User huffman # Date 1199294761 -3600 # Node ID 9182d8bc7742623a5fcbc544112c8d018da26794 # Parent 0fd4c238273bbcf27a675ee82ccf6de31ed539af new class dcpo; added dcpo versions of some lemmas diff -r 0fd4c238273b -r 9182d8bc7742 src/HOLCF/Pcpo.thy --- a/src/HOLCF/Pcpo.thy Wed Jan 02 18:23:45 2008 +0100 +++ b/src/HOLCF/Pcpo.thy Wed Jan 02 18:26:01 2008 +0100 @@ -17,20 +17,40 @@ -- {* class axiom: *} cpo: "chain S \ \x. range S <<| x" +axclass dcpo < po + dcpo: "directed S \ \x. S <<| x" + +instance dcpo < cpo +by (intro_classes, rule dcpo [OF directed_chain]) + text {* in cpo's everthing equal to THE lub has lub properties for every chain *} lemma thelubE: "\chain S; (\i. S i) = (l::'a::cpo)\ \ range S <<| l" by (blast dest: cpo intro: lubI) +lemma thelubE': "\directed S; lub S = (l::'a::dcpo)\ \ S <<| l" +by (blast dest: dcpo intro: lubI) + text {* Properties of the lub *} lemma is_ub_thelub: "chain (S::nat \ 'a::cpo) \ S x \ (\i. S i)" by (blast dest: cpo intro: lubI [THEN is_ub_lub]) +lemma is_ub_thelub': "\directed S; (x::'a::dcpo) \ S\ \ x \ lub S" +apply (drule thelubE' [OF _ refl]) +apply (drule is_lubD1) +apply (erule (1) is_ubD) +done + lemma is_lub_thelub: "\chain (S::nat \ 'a::cpo); range S <| x\ \ (\i. S i) \ x" by (blast dest: cpo intro: lubI [THEN is_lub_lub]) +lemma is_lub_thelub': "\directed S; S <| x\ \ lub S \ (x::'a::dcpo)" +apply (drule dcpo, clarify, drule lubI) +apply (erule is_lub_lub, assumption) +done + lemma lub_range_mono: "\range X \ range Y; chain Y; chain (X::nat \ 'a::cpo)\ \ (\i. X i) \ (\i. Y i)"