src/HOLCF/Sprod3.ML
changeset 1267 bca91b4e1710
parent 1168 74be52691d62
child 1274 ea0668a1c0ba
equal deleted inserted replaced
1266:3ae9fe3c0f68 1267:bca91b4e1710
    26 	(rtac (monofun_Isfst RS ch2ch_monofun) 1),
    26 	(rtac (monofun_Isfst RS ch2ch_monofun) 1),
    27 	(rtac ch2ch_fun 1),
    27 	(rtac ch2ch_fun 1),
    28 	(rtac (monofun_Ispair1 RS ch2ch_monofun) 1),
    28 	(rtac (monofun_Ispair1 RS ch2ch_monofun) 1),
    29 	(atac 1),
    29 	(atac 1),
    30 	(rtac allI 1),
    30 	(rtac allI 1),
    31 	(asm_simp_tac Sprod_ss 1),
    31 	(Asm_simp_tac 1),
    32 	(rtac sym 1),
    32 	(rtac sym 1),
    33 	(rtac lub_chain_maxelem 1),
    33 	(rtac lub_chain_maxelem 1),
    34 	(res_inst_tac [("P","%j.~Y(j)=UU")] exE 1),
    34 	(res_inst_tac [("P","%j.~Y(j)=UU")] exE 1),
    35 	(rtac (notall2ex RS iffD1) 1),
    35 	(rtac (notall2ex RS iffD1) 1),
    36 	(res_inst_tac [("Q","lub(range(Y)) = UU")] contrapos 1),
    36 	(res_inst_tac [("Q","lub(range(Y)) = UU")] contrapos 1),
    39 	(atac 1),
    39 	(atac 1),
    40 	(rtac exI 1),
    40 	(rtac exI 1),
    41 	(etac Issnd2 1),
    41 	(etac Issnd2 1),
    42 	(rtac allI 1),
    42 	(rtac allI 1),
    43 	(res_inst_tac [("Q","Y(i)=UU")] (excluded_middle RS disjE) 1),
    43 	(res_inst_tac [("Q","Y(i)=UU")] (excluded_middle RS disjE) 1),
    44 	(asm_simp_tac Sprod_ss  1),
    44 	(Asm_simp_tac 1),
    45 	(rtac refl_less 1),
       
    46 	(res_inst_tac [("s","UU"),("t","Y(i)")] subst 1),
    45 	(res_inst_tac [("s","UU"),("t","Y(i)")] subst 1),
    47 	(etac sym 1),
    46 	(etac sym 1),
    48 	(asm_simp_tac Sprod_ss  1),
    47 	(Asm_simp_tac 1)
    49 	(rtac minimal 1)
       
    50 	]);
    48 	]);
    51 
    49 
    52 qed_goal "sprod3_lemma2" Sprod3.thy 
    50 qed_goal "sprod3_lemma2" Sprod3.thy 
    53 "[| is_chain(Y); x ~= UU; lub(range(Y)) = UU |] ==>\
    51 "[| is_chain(Y); x ~= UU; lub(range(Y)) = UU |] ==>\
    54 \   Ispair (lub(range Y)) x =\
    52 \   Ispair (lub(range Y)) x =\
    63 	(rtac strict_Ispair1 1),
    61 	(rtac strict_Ispair1 1),
    64 	(rtac (strict_Ispair RS sym) 1),
    62 	(rtac (strict_Ispair RS sym) 1),
    65 	(rtac disjI1 1),
    63 	(rtac disjI1 1),
    66 	(rtac chain_UU_I_inverse 1),
    64 	(rtac chain_UU_I_inverse 1),
    67 	(rtac allI 1),
    65 	(rtac allI 1),
    68 	(asm_simp_tac Sprod_ss  1),
    66 	(Asm_simp_tac  1),
    69 	(etac (chain_UU_I RS spec) 1),
    67 	(etac (chain_UU_I RS spec) 1),
    70 	(atac 1)
    68 	(atac 1)
    71 	]);
    69 	]);
    72 
    70 
    73 
    71 
    85 	(rtac strict_Ispair2 1),
    83 	(rtac strict_Ispair2 1),
    86 	(rtac (strict_Ispair RS sym) 1),
    84 	(rtac (strict_Ispair RS sym) 1),
    87 	(rtac disjI1 1),
    85 	(rtac disjI1 1),
    88 	(rtac chain_UU_I_inverse 1),
    86 	(rtac chain_UU_I_inverse 1),
    89 	(rtac allI 1),
    87 	(rtac allI 1),
    90 	(simp_tac Sprod_ss  1)
    88 	(Simp_tac  1)
    91 	]);
    89 	]);
    92 
    90 
    93 
    91 
    94 qed_goal "contlub_Ispair1" Sprod3.thy "contlub(Ispair)"
    92 qed_goal "contlub_Ispair1" Sprod3.thy "contlub(Ispair)"
    95 (fn prems =>
    93 (fn prems =>
   136 	(atac 1),
   134 	(atac 1),
   137 	(rtac exI 1),
   135 	(rtac exI 1),
   138 	(etac Isfst2 1),
   136 	(etac Isfst2 1),
   139 	(rtac allI 1),
   137 	(rtac allI 1),
   140 	(res_inst_tac [("Q","Y(i)=UU")] (excluded_middle RS disjE) 1),
   138 	(res_inst_tac [("Q","Y(i)=UU")] (excluded_middle RS disjE) 1),
   141 	(asm_simp_tac Sprod_ss 1),
   139 	(Asm_simp_tac 1),
   142 	(rtac refl_less 1),
       
   143 	(res_inst_tac [("s","UU"),("t","Y(i)")] subst 1),
   140 	(res_inst_tac [("s","UU"),("t","Y(i)")] subst 1),
   144 	(etac sym 1),
   141 	(etac sym 1),
   145 	(asm_simp_tac Sprod_ss  1),
   142 	(Asm_simp_tac  1),
   146 	(rtac minimal 1),
       
   147 	(rtac lub_equal 1),
   143 	(rtac lub_equal 1),
   148 	(atac 1),
   144 	(atac 1),
   149 	(rtac (monofun_Issnd RS ch2ch_monofun) 1),
   145 	(rtac (monofun_Issnd RS ch2ch_monofun) 1),
   150 	(rtac (monofun_Ispair2 RS ch2ch_monofun) 1),
   146 	(rtac (monofun_Ispair2 RS ch2ch_monofun) 1),
   151 	(atac 1),
   147 	(atac 1),
   152 	(rtac allI 1),
   148 	(rtac allI 1),
   153 	(asm_simp_tac Sprod_ss 1)
   149 	(Asm_simp_tac 1)
   154 	]);
   150 	]);
   155 
   151 
   156 qed_goal "sprod3_lemma5" Sprod3.thy 
   152 qed_goal "sprod3_lemma5" Sprod3.thy 
   157 "[| is_chain(Y); x ~= UU; lub(range(Y)) = UU |] ==>\
   153 "[| is_chain(Y); x ~= UU; lub(range(Y)) = UU |] ==>\
   158 \         Ispair x (lub(range Y)) =\
   154 \         Ispair x (lub(range Y)) =\
   167 	(rtac strict_Ispair2 1),
   163 	(rtac strict_Ispair2 1),
   168 	(rtac (strict_Ispair RS sym) 1),
   164 	(rtac (strict_Ispair RS sym) 1),
   169 	(rtac disjI2 1),
   165 	(rtac disjI2 1),
   170 	(rtac chain_UU_I_inverse 1),
   166 	(rtac chain_UU_I_inverse 1),
   171 	(rtac allI 1),
   167 	(rtac allI 1),
   172 	(asm_simp_tac Sprod_ss  1),
   168 	(Asm_simp_tac  1),
   173 	(etac (chain_UU_I RS spec) 1),
   169 	(etac (chain_UU_I RS spec) 1),
   174 	(atac 1)
   170 	(atac 1)
   175 	]);
   171 	]);
   176 
   172 
   177 qed_goal "sprod3_lemma6" Sprod3.thy 
   173 qed_goal "sprod3_lemma6" Sprod3.thy 
   188 	(rtac strict_Ispair1 1),
   184 	(rtac strict_Ispair1 1),
   189 	(rtac (strict_Ispair RS sym) 1),
   185 	(rtac (strict_Ispair RS sym) 1),
   190 	(rtac disjI1 1),
   186 	(rtac disjI1 1),
   191 	(rtac chain_UU_I_inverse 1),
   187 	(rtac chain_UU_I_inverse 1),
   192 	(rtac allI 1),
   188 	(rtac allI 1),
   193 	(simp_tac Sprod_ss  1)
   189 	(Simp_tac 1)
   194 	]);
   190 	]);
   195 
   191 
   196 qed_goal "contlub_Ispair2" Sprod3.thy "contlub(Ispair(x))"
   192 qed_goal "contlub_Ispair2" Sprod3.thy "contlub(Ispair(x))"
   197 (fn prems =>
   193 (fn prems =>
   198 	[
   194 	[
   239 	(strip_tac 1),
   235 	(strip_tac 1),
   240 	(rtac (lub_sprod RS thelubI RS ssubst) 1),
   236 	(rtac (lub_sprod RS thelubI RS ssubst) 1),
   241 	(atac 1),
   237 	(atac 1),
   242 	(res_inst_tac [("Q","lub(range(%i. Issnd(Y(i))))=UU")]	
   238 	(res_inst_tac [("Q","lub(range(%i. Issnd(Y(i))))=UU")]	
   243 		(excluded_middle RS disjE) 1),
   239 		(excluded_middle RS disjE) 1),
   244 	(asm_simp_tac Sprod_ss  1),
   240 	(Asm_simp_tac  1),
   245 	(res_inst_tac [("s","UU"),("t","lub(range(%i. Issnd(Y(i))))")]
   241 	(res_inst_tac [("s","UU"),("t","lub(range(%i. Issnd(Y(i))))")]
   246 		ssubst 1),
   242 		ssubst 1),
   247 	(atac 1),
   243 	(atac 1),
   248 	(rtac trans 1),
   244 	(rtac trans 1),
   249 	(asm_simp_tac Sprod_ss  1),
   245 	(Asm_simp_tac  1),
   250 	(rtac sym 1),
   246 	(rtac sym 1),
   251 	(rtac chain_UU_I_inverse 1),
   247 	(rtac chain_UU_I_inverse 1),
   252 	(rtac allI 1),
   248 	(rtac allI 1),
   253 	(rtac strict_Isfst 1),
   249 	(rtac strict_Isfst 1),
   254 	(rtac swap 1),
   250 	(rtac swap 1),
   268 	(strip_tac 1),
   264 	(strip_tac 1),
   269 	(rtac (lub_sprod RS thelubI RS ssubst) 1),
   265 	(rtac (lub_sprod RS thelubI RS ssubst) 1),
   270 	(atac 1),
   266 	(atac 1),
   271 	(res_inst_tac [("Q","lub(range(%i. Isfst(Y(i))))=UU")]
   267 	(res_inst_tac [("Q","lub(range(%i. Isfst(Y(i))))=UU")]
   272 	 (excluded_middle RS disjE) 1),
   268 	 (excluded_middle RS disjE) 1),
   273 	(asm_simp_tac Sprod_ss  1),
   269 	(Asm_simp_tac  1),
   274 	(res_inst_tac [("s","UU"),("t","lub(range(%i. Isfst(Y(i))))")] 
   270 	(res_inst_tac [("s","UU"),("t","lub(range(%i. Isfst(Y(i))))")] 
   275 		ssubst 1),
   271 		ssubst 1),
   276 	(atac 1),
   272 	(atac 1),
   277 	(asm_simp_tac Sprod_ss  1),
   273 	(Asm_simp_tac  1),
   278 	(rtac sym 1),
   274 	(rtac sym 1),
   279 	(rtac chain_UU_I_inverse 1),
   275 	(rtac chain_UU_I_inverse 1),
   280 	(rtac allI 1),
   276 	(rtac allI 1),
   281 	(rtac strict_Issnd 1),
   277 	(rtac strict_Issnd 1),
   282 	(rtac swap 1),
   278 	(rtac swap 1),
   677 
   673 
   678 (* ------------------------------------------------------------------------ *)
   674 (* ------------------------------------------------------------------------ *)
   679 (* install simplifier for Sprod                                             *)
   675 (* install simplifier for Sprod                                             *)
   680 (* ------------------------------------------------------------------------ *)
   676 (* ------------------------------------------------------------------------ *)
   681 
   677 
   682 val Sprod_rews = [strict_spair1,strict_spair2,strict_sfst1,strict_sfst2,
   678 Addsimps [strict_spair1,strict_spair2,strict_sfst1,strict_sfst2,
   683 		strict_ssnd1,strict_ssnd2,sfst2,ssnd2,
   679 	  strict_ssnd1,strict_ssnd2,sfst2,ssnd2,
   684 		ssplit1,ssplit2];
   680 	  ssplit1,ssplit2];
   685 
   681 
   686 val Sprod_ss = Cfun_ss addsimps Sprod_rews;
   682 
   687 
       
   688