src/HOLCF/Up3.ML
changeset 4721 c8a8482a8124
parent 4098 71e05eb27fb6
child 5291 5706f0ef1d43
equal deleted inserted replaced
4720:c1b83b42f65a 4721:c8a8482a8124
   228         (simp_tac (Up0_ss addsimps [cont_Iup]) 1),
   228         (simp_tac (Up0_ss addsimps [cont_Iup]) 1),
   229         (rtac less_up2c 1)
   229         (rtac less_up2c 1)
   230         ]);
   230         ]);
   231 
   231 
   232 qed_goalw "thelub_up2a" thy [up_def,fup_def] 
   232 qed_goalw "thelub_up2a" thy [up_def,fup_def] 
   233 "[| is_chain(Y); ? i x. Y(i) = up`x |] ==>\
   233 "[| chain(Y); ? i x. Y(i) = up`x |] ==>\
   234 \      lub(range(Y)) = up`(lub(range(%i. fup`(LAM x. x)`(Y i))))"
   234 \      lub(range(Y)) = up`(lub(range(%i. fup`(LAM x. x)`(Y i))))"
   235  (fn prems =>
   235  (fn prems =>
   236         [
   236         [
   237         (cut_facts_tac prems 1),
   237         (cut_facts_tac prems 1),
   238         (stac beta_cfun 1),
   238         (stac beta_cfun 1),
   253         ]);
   253         ]);
   254 
   254 
   255 
   255 
   256 
   256 
   257 qed_goalw "thelub_up2b" thy [up_def,fup_def] 
   257 qed_goalw "thelub_up2b" thy [up_def,fup_def] 
   258 "[| is_chain(Y); ! i x. Y(i) ~= up`x |] ==> lub(range(Y)) = UU"
   258 "[| chain(Y); ! i x. Y(i) ~= up`x |] ==> lub(range(Y)) = UU"
   259  (fn prems =>
   259  (fn prems =>
   260         [
   260         [
   261         (cut_facts_tac prems 1),
   261         (cut_facts_tac prems 1),
   262         (stac inst_up_pcpo 1),
   262         (stac inst_up_pcpo 1),
   263         (rtac thelub_up1b 1),
   263         (rtac thelub_up1b 1),
   287         (etac exI 1)
   287         (etac exI 1)
   288         ]);
   288         ]);
   289 
   289 
   290 
   290 
   291 qed_goal "thelub_up2a_rev" thy  
   291 qed_goal "thelub_up2a_rev" thy  
   292 "[| is_chain(Y); lub(range(Y)) = up`x |] ==> ? i x. Y(i) = up`x"
   292 "[| chain(Y); lub(range(Y)) = up`x |] ==> ? i x. Y(i) = up`x"
   293  (fn prems =>
   293  (fn prems =>
   294         [
   294         [
   295         (cut_facts_tac prems 1),
   295         (cut_facts_tac prems 1),
   296         (rtac exE 1),
   296         (rtac exE 1),
   297         (rtac chain_UU_I_inverse2 1),
   297         (rtac chain_UU_I_inverse2 1),
   301         (rtac (up_lemma2 RS iffD2) 1),
   301         (rtac (up_lemma2 RS iffD2) 1),
   302         (atac 1)
   302         (atac 1)
   303         ]);
   303         ]);
   304 
   304 
   305 qed_goal "thelub_up2b_rev" thy  
   305 qed_goal "thelub_up2b_rev" thy  
   306 "[| is_chain(Y); lub(range(Y)) = UU |] ==> ! i x.  Y(i) ~= up`x"
   306 "[| chain(Y); lub(range(Y)) = UU |] ==> ! i x.  Y(i) ~= up`x"
   307  (fn prems =>
   307  (fn prems =>
   308         [
   308         [
   309         (cut_facts_tac prems 1),
   309         (cut_facts_tac prems 1),
   310         (rtac allI 1),
   310         (rtac allI 1),
   311         (rtac (not_ex RS iffD1) 1),
   311         (rtac (not_ex RS iffD1) 1),
   314         (fast_tac (HOL_cs addSDs [chain_UU_I RS spec]) 1)
   314         (fast_tac (HOL_cs addSDs [chain_UU_I RS spec]) 1)
   315         ]);
   315         ]);
   316 
   316 
   317 
   317 
   318 qed_goal "thelub_up3" thy  
   318 qed_goal "thelub_up3" thy  
   319 "is_chain(Y) ==> lub(range(Y)) = UU |\
   319 "chain(Y) ==> lub(range(Y)) = UU |\
   320 \                lub(range(Y)) = up`(lub(range(%i. fup`(LAM x. x)`(Y i))))"
   320 \                lub(range(Y)) = up`(lub(range(%i. fup`(LAM x. x)`(Y i))))"
   321  (fn prems =>
   321  (fn prems =>
   322         [
   322         [
   323         (cut_facts_tac prems 1),
   323         (cut_facts_tac prems 1),
   324         (rtac disjE 1),
   324         (rtac disjE 1),