src/HOLCF/Cprod2.ML
changeset 1168 74be52691d62
parent 899 516f9e349a16
child 1267 bca91b4e1710
equal deleted inserted replaced
1167:cbd32a0f2f41 1168:74be52691d62
     7 *)
     7 *)
     8 
     8 
     9 open Cprod2;
     9 open Cprod2;
    10 
    10 
    11 qed_goal "less_cprod3a" Cprod2.thy 
    11 qed_goal "less_cprod3a" Cprod2.thy 
    12 	"p1=<UU,UU> ==> p1 << p2"
    12 	"p1=(UU,UU) ==> p1 << p2"
    13  (fn prems =>
    13  (fn prems =>
    14 	[
    14 	[
    15 	(cut_facts_tac prems 1),
    15 	(cut_facts_tac prems 1),
    16 	(rtac (inst_cprod_po RS ssubst) 1),
    16 	(rtac (inst_cprod_po RS ssubst) 1),
    17 	(rtac (less_cprod1b RS ssubst) 1),
    17 	(rtac (less_cprod1b RS ssubst) 1),
    29 	(rtac (inst_cprod_po RS ssubst) 1),
    29 	(rtac (inst_cprod_po RS ssubst) 1),
    30 	(rtac less_cprod1b 1)
    30 	(rtac less_cprod1b 1)
    31 	]);
    31 	]);
    32 
    32 
    33 qed_goal "less_cprod4a" Cprod2.thy 
    33 qed_goal "less_cprod4a" Cprod2.thy 
    34 	"<x1,x2> << <UU,UU> ==> x1=UU & x2=UU"
    34 	"(x1,x2) << (UU,UU) ==> x1=UU & x2=UU"
    35  (fn prems =>
    35  (fn prems =>
    36 	[
    36 	[
    37 	(cut_facts_tac prems 1),
    37 	(cut_facts_tac prems 1),
    38 	(rtac less_cprod2a 1),
    38 	(rtac less_cprod2a 1),
    39 	(etac (inst_cprod_po RS subst) 1)
    39 	(etac (inst_cprod_po RS subst) 1)
    40 	]);
    40 	]);
    41 
    41 
    42 qed_goal "less_cprod4b" Cprod2.thy 
    42 qed_goal "less_cprod4b" Cprod2.thy 
    43 	"p << <UU,UU> ==> p = <UU,UU>"
    43 	"p << (UU,UU) ==> p = (UU,UU)"
    44 (fn prems =>
    44 (fn prems =>
    45 	[
    45 	[
    46 	(cut_facts_tac prems 1),
    46 	(cut_facts_tac prems 1),
    47 	(rtac less_cprod2b 1),
    47 	(rtac less_cprod2b 1),
    48 	(etac (inst_cprod_po RS subst) 1)
    48 	(etac (inst_cprod_po RS subst) 1)
    49 	]);
    49 	]);
    50 
    50 
    51 qed_goal "less_cprod4c" Cprod2.thy
    51 qed_goal "less_cprod4c" Cprod2.thy
    52  " <xa,ya> << <x,y> ==> xa<<x & ya << y"
    52  " (xa,ya) << (x,y) ==> xa<<x & ya << y"
    53 (fn prems =>
    53 (fn prems =>
    54 	[
    54 	[
    55 	(cut_facts_tac prems 1),
    55 	(cut_facts_tac prems 1),
    56 	(rtac less_cprod2c 1),
    56 	(rtac less_cprod2c 1),
    57 	(etac (inst_cprod_po RS subst) 1),
    57 	(etac (inst_cprod_po RS subst) 1),
    60 
    60 
    61 (* ------------------------------------------------------------------------ *)
    61 (* ------------------------------------------------------------------------ *)
    62 (* type cprod is pointed                                                    *)
    62 (* type cprod is pointed                                                    *)
    63 (* ------------------------------------------------------------------------ *)
    63 (* ------------------------------------------------------------------------ *)
    64 
    64 
    65 qed_goal "minimal_cprod" Cprod2.thy  "<UU,UU><<p"
    65 qed_goal "minimal_cprod" Cprod2.thy  "(UU,UU)<<p"
    66 (fn prems =>
    66 (fn prems =>
    67 	[
    67 	[
    68 	(rtac less_cprod3a 1),
    68 	(rtac less_cprod3a 1),
    69 	(rtac refl 1)
    69 	(rtac refl 1)
    70 	]);
    70 	]);
    92 	(simp_tac prod_ss 1),
    92 	(simp_tac prod_ss 1),
    93 	(asm_simp_tac Cfun_ss 1)
    93 	(asm_simp_tac Cfun_ss 1)
    94 	]);
    94 	]);
    95 
    95 
    96 qed_goal "monofun_pair" Cprod2.thy 
    96 qed_goal "monofun_pair" Cprod2.thy 
    97  "[|x1<<x2; y1<<y2|] ==> <x1,y1> << <x2,y2>"
    97  "[|x1<<x2; y1<<y2|] ==> (x1,y1) << (x2,y2)"
    98  (fn prems =>
    98  (fn prems =>
    99 	[
    99 	[
   100 	(cut_facts_tac prems 1),
   100 	(cut_facts_tac prems 1),
   101 	(rtac trans_less 1),
   101 	(rtac trans_less 1),
   102 	(rtac (monofun_pair1 RS monofunE RS spec RS spec RS mp RS 
   102 	(rtac (monofun_pair1 RS monofunE RS spec RS spec RS mp RS 
   138 (* the type 'a * 'b is a cpo                                                *)
   138 (* the type 'a * 'b is a cpo                                                *)
   139 (* ------------------------------------------------------------------------ *)
   139 (* ------------------------------------------------------------------------ *)
   140 
   140 
   141 qed_goal "lub_cprod" Cprod2.thy 
   141 qed_goal "lub_cprod" Cprod2.thy 
   142 " is_chain(S) ==> range(S) <<| \
   142 " is_chain(S) ==> range(S) <<| \
   143 \   < lub(range(%i.fst(S(i)))),lub(range(%i.snd(S(i))))> "
   143 \   (lub(range(%i.fst(S i))),lub(range(%i.snd(S i)))) "
   144  (fn prems =>
   144  (fn prems =>
   145 	[
   145 	[
   146 	(cut_facts_tac prems 1),
   146 	(cut_facts_tac prems 1),
   147 	(rtac is_lubI 1),
   147 	(rtac is_lubI 1),
   148 	(rtac conjI 1),
   148 	(rtac conjI 1),
   164 	(etac (monofun_snd RS ch2ch_monofun) 1),
   164 	(etac (monofun_snd RS ch2ch_monofun) 1),
   165 	(etac (monofun_snd RS ub2ub_monofun) 1)
   165 	(etac (monofun_snd RS ub2ub_monofun) 1)
   166 	]);
   166 	]);
   167 
   167 
   168 val thelub_cprod = (lub_cprod RS thelubI);
   168 val thelub_cprod = (lub_cprod RS thelubI);
   169 (* "is_chain(?S1) ==> lub(range(?S1)) =                                *)
   169 (*
   170 (*  <lub(range(%i. fst(?S1(i)))), lub(range(%i. snd(?S1(i))))>"        *)
   170 "is_chain ?S1 ==>
       
   171  lub (range ?S1) =
       
   172  (lub (range (%i. fst (?S1 i))), lub (range (%i. snd (?S1 i))))" : thm
   171 
   173 
       
   174 *)
   172 
   175 
   173 qed_goal "cpo_cprod" Cprod2.thy 
   176 qed_goal "cpo_cprod" Cprod2.thy 
   174 	"is_chain(S::nat=>'a*'b)==>? x.range(S)<<| x"
   177 	"is_chain(S::nat=>'a*'b)==>? x.range(S)<<| x"
   175 (fn prems =>
   178 (fn prems =>
   176 	[
   179 	[
   177 	(cut_facts_tac prems 1),
   180 	(cut_facts_tac prems 1),
   178 	(rtac exI 1),
   181 	(rtac exI 1),
   179 	(etac lub_cprod 1)
   182 	(etac lub_cprod 1)
   180 	]);
   183 	]);
   181 
   184 
       
   185