src/HOLCF/Cprod3.ML
changeset 4721 c8a8482a8124
parent 4098 71e05eb27fb6
child 9245 428385c4bc50
equal deleted inserted replaced
4720:c1b83b42f65a 4721:c8a8482a8124
    18 (* ------------------------------------------------------------------------ *)
    18 (* ------------------------------------------------------------------------ *)
    19 (* continuity of (_,_) , fst, snd                                           *)
    19 (* continuity of (_,_) , fst, snd                                           *)
    20 (* ------------------------------------------------------------------------ *)
    20 (* ------------------------------------------------------------------------ *)
    21 
    21 
    22 qed_goal "Cprod3_lemma1" Cprod3.thy 
    22 qed_goal "Cprod3_lemma1" Cprod3.thy 
    23 "is_chain(Y::(nat=>'a::cpo)) ==>\
    23 "chain(Y::(nat=>'a::cpo)) ==>\
    24 \ (lub(range(Y)),(x::'b::cpo)) =\
    24 \ (lub(range(Y)),(x::'b::cpo)) =\
    25 \ (lub(range(%i. fst(Y i,x))),lub(range(%i. snd(Y i,x))))"
    25 \ (lub(range(%i. fst(Y i,x))),lub(range(%i. snd(Y i,x))))"
    26  (fn prems =>
    26  (fn prems =>
    27         [
    27         [
    28         (cut_facts_tac prems 1),
    28         (cut_facts_tac prems 1),
    55         (etac (monofun_pair1 RS ch2ch_monofun) 2),
    55         (etac (monofun_pair1 RS ch2ch_monofun) 2),
    56         (etac Cprod3_lemma1 1)
    56         (etac Cprod3_lemma1 1)
    57         ]);
    57         ]);
    58 
    58 
    59 qed_goal "Cprod3_lemma2" Cprod3.thy 
    59 qed_goal "Cprod3_lemma2" Cprod3.thy 
    60 "is_chain(Y::(nat=>'a::cpo)) ==>\
    60 "chain(Y::(nat=>'a::cpo)) ==>\
    61 \ ((x::'b::cpo),lub(range Y)) =\
    61 \ ((x::'b::cpo),lub(range Y)) =\
    62 \ (lub(range(%i. fst(x,Y i))),lub(range(%i. snd(x, Y i))))"
    62 \ (lub(range(%i. fst(x,Y i))),lub(range(%i. snd(x, Y i))))"
    63  (fn prems =>
    63  (fn prems =>
    64         [
    64         [
    65         (cut_facts_tac prems 1),
    65         (cut_facts_tac prems 1),
   259         (dtac (beta_cfun_cprod RS subst) 1),
   259         (dtac (beta_cfun_cprod RS subst) 1),
   260         (atac 1)
   260         (atac 1)
   261         ]);
   261         ]);
   262 
   262 
   263 qed_goalw "lub_cprod2" Cprod3.thy [cfst_def,csnd_def,cpair_def]
   263 qed_goalw "lub_cprod2" Cprod3.thy [cfst_def,csnd_def,cpair_def]
   264 "[|is_chain(S)|] ==> range(S) <<| \
   264 "[|chain(S)|] ==> range(S) <<| \
   265 \ <(lub(range(%i. cfst`(S i)))) , lub(range(%i. csnd`(S i)))>"
   265 \ <(lub(range(%i. cfst`(S i)))) , lub(range(%i. csnd`(S i)))>"
   266  (fn prems =>
   266  (fn prems =>
   267         [
   267         [
   268         (cut_facts_tac prems 1),
   268         (cut_facts_tac prems 1),
   269         (stac beta_cfun_cprod 1),
   269         (stac beta_cfun_cprod 1),
   275         (atac 1)
   275         (atac 1)
   276         ]);
   276         ]);
   277 
   277 
   278 bind_thm ("thelub_cprod2", lub_cprod2 RS thelubI);
   278 bind_thm ("thelub_cprod2", lub_cprod2 RS thelubI);
   279 (*
   279 (*
   280 is_chain ?S1 ==>
   280 chain ?S1 ==>
   281  lub (range ?S1) =
   281  lub (range ?S1) =
   282  <lub (range (%i. cfst`(?S1 i))), lub (range (%i. csnd`(?S1 i)))>" 
   282  <lub (range (%i. cfst`(?S1 i))), lub (range (%i. csnd`(?S1 i)))>" 
   283 *)
   283 *)
   284 qed_goalw "csplit2" Cprod3.thy [csplit_def]
   284 qed_goalw "csplit2" Cprod3.thy [csplit_def]
   285         "csplit`f`<x,y> = f`x`y"
   285         "csplit`f`<x,y> = f`x`y"