src/HOLCF/Fix.ML
changeset 2841 c2508f4ab739
parent 2764 d56b5df57d73
child 3044 3e3087aa69e7
equal deleted inserted replaced
2840:7e03e61612b0 2841:c2508f4ab739
   688 	fast_tac ((HOL_cs addSIs [flatdom2monofun,
   688 	fast_tac ((HOL_cs addSIs [flatdom2monofun,
   689 			flat_imp_chain_finite RS chfindom_monofun2cont])) 1
   689 			flat_imp_chain_finite RS chfindom_monofun2cont])) 1
   690 	]);
   690 	]);
   691 
   691 
   692 qed_goal "chfin_fappR" thy 
   692 qed_goal "chfin_fappR" thy 
   693     "[| is_chain (Y::nat => 'a->'b); chain_finite(x::'b) |] ==> \
   693     "[| is_chain (Y::nat => 'a::cpo->'b); chain_finite(x::'b) |] ==> \
   694 \    !s. ? n. lub(range(Y))`s = Y n`s" 
   694 \    !s. ? n. lub(range(Y))`s = Y n`s" 
   695 (fn prems => 
   695 (fn prems => 
   696 	[
   696 	[
   697 	cut_facts_tac prems 1,
   697 	cut_facts_tac prems 1,
   698 	rtac allI 1,
   698 	rtac allI 1,
   700 	 atac 1,
   700 	 atac 1,
   701 	fast_tac (HOL_cs addSIs [thelubI,lub_finch2,chfin2finch,ch2ch_fappL])1
   701 	fast_tac (HOL_cs addSIs [thelubI,lub_finch2,chfin2finch,ch2ch_fappL])1
   702 	]);
   702 	]);
   703 
   703 
   704 qed_goalw "adm_chfindom" thy [adm_def]
   704 qed_goalw "adm_chfindom" thy [adm_def]
   705 	    "chain_finite (x::'b) ==> adm (%(u::'a->'b). P(u`s))" (fn prems => [
   705     "chain_finite (x::'b) ==> adm (%(u::'a::cpo->'b). P(u`s))"
       
   706     (fn prems => [
   706 	cut_facts_tac prems 1,
   707 	cut_facts_tac prems 1,
   707 	strip_tac 1,
   708 	strip_tac 1,
   708 	dtac chfin_fappR 1,
   709 	dtac chfin_fappR 1,
   709 	 atac 1,
   710 	 atac 1,
   710 	eres_inst_tac [("x","s")] allE 1,
   711 	eres_inst_tac [("x","s")] allE 1,
  1093         etac mp 1,
  1094         etac mp 1,
  1094         trans_tac 1
  1095         trans_tac 1
  1095         ]);
  1096         ]);
  1096 
  1097 
  1097   val adm_disj_lemma5 = prove_goal thy
  1098   val adm_disj_lemma5 = prove_goal thy
  1098   "!!Y::nat=>'a. [| is_chain(Y); ! j. i < j --> Q(Y(j)) |] ==>\
  1099   "!!Y::nat=>'a::cpo. [| is_chain(Y); ! j. i < j --> Q(Y(j)) |] ==>\
  1099   \       lub(range(Y)) = lub(range(%m. if m< Suc(i) then Y(Suc(i)) else Y m))"
  1100   \       lub(range(Y)) = lub(range(%m. if m< Suc(i) then Y(Suc(i)) else Y m))"
  1100  (fn prems =>
  1101  (fn prems =>
  1101         [
  1102         [
  1102         safe_tac (HOL_cs addSIs [lub_equal2,adm_disj_lemma3]),
  1103         safe_tac (HOL_cs addSIs [lub_equal2,adm_disj_lemma3]),
  1103         atac 2,
  1104         atac 2,
  1106         strip_tac 1,
  1107         strip_tac 1,
  1107         trans_tac 1
  1108         trans_tac 1
  1108         ]);
  1109         ]);
  1109 
  1110 
  1110   val adm_disj_lemma6 = prove_goal thy
  1111   val adm_disj_lemma6 = prove_goal thy
  1111   "[| is_chain(Y::nat=>'a); ? i. ! j. i < j --> Q(Y(j)) |] ==>\
  1112   "[| is_chain(Y::nat=>'a::cpo); ? i. ! j. i < j --> Q(Y(j)) |] ==>\
  1112   \         ? X. is_chain(X) & (! n. Q(X(n))) & lub(range(Y)) = lub(range(X))"
  1113   \         ? X. is_chain(X) & (! n. Q(X(n))) & lub(range(Y)) = lub(range(X))"
  1113  (fn prems =>
  1114  (fn prems =>
  1114         [
  1115         [
  1115         (cut_facts_tac prems 1),
  1116         (cut_facts_tac prems 1),
  1116         (etac exE 1),
  1117         (etac exE 1),
  1125         (atac 1),
  1126         (atac 1),
  1126         (atac 1)
  1127         (atac 1)
  1127         ]);
  1128         ]);
  1128 
  1129 
  1129   val adm_disj_lemma7 = prove_goal thy 
  1130   val adm_disj_lemma7 = prove_goal thy 
  1130   "[| is_chain(Y::nat=>'a); ! i. ? j. i < j & P(Y(j))  |] ==>\
  1131   "[| is_chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j))  |] ==>\
  1131   \         is_chain(%m. Y(Least(%j. m<j & P(Y(j)))))"
  1132   \         is_chain(%m. Y(Least(%j. m<j & P(Y(j)))))"
  1132  (fn prems =>
  1133  (fn prems =>
  1133         [
  1134         [
  1134         (cut_facts_tac prems 1),
  1135         (cut_facts_tac prems 1),
  1135         (rtac is_chainI 1),
  1136         (rtac is_chainI 1),
  1159         (etac exE 1),
  1160         (etac exE 1),
  1160         (etac (LeastI RS conjunct2) 1)
  1161         (etac (LeastI RS conjunct2) 1)
  1161         ]);
  1162         ]);
  1162 
  1163 
  1163   val adm_disj_lemma9 = prove_goal thy
  1164   val adm_disj_lemma9 = prove_goal thy
  1164   "[| is_chain(Y::nat=>'a); ! i. ? j. i < j & P(Y(j)) |] ==>\
  1165   "[| is_chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j)) |] ==>\
  1165   \         lub(range(Y)) = lub(range(%m. Y(Least(%j. m<j & P(Y(j))))))"
  1166   \         lub(range(Y)) = lub(range(%m. Y(Least(%j. m<j & P(Y(j))))))"
  1166  (fn prems =>
  1167  (fn prems =>
  1167         [
  1168         [
  1168         (cut_facts_tac prems 1),
  1169         (cut_facts_tac prems 1),
  1169         (rtac antisym_less 1),
  1170         (rtac antisym_less 1),
  1190         (atac 1),
  1191         (atac 1),
  1191         (rtac lessI 1)
  1192         (rtac lessI 1)
  1192         ]);
  1193         ]);
  1193 
  1194 
  1194   val adm_disj_lemma10 = prove_goal thy
  1195   val adm_disj_lemma10 = prove_goal thy
  1195   "[| is_chain(Y::nat=>'a); ! i. ? j. i < j & P(Y(j)) |] ==>\
  1196   "[| is_chain(Y::nat=>'a::cpo); ! i. ? j. i < j & P(Y(j)) |] ==>\
  1196   \         ? X. is_chain(X) & (! n. P(X(n))) & lub(range(Y)) = lub(range(X))"
  1197   \         ? X. is_chain(X) & (! n. P(X(n))) & lub(range(Y)) = lub(range(X))"
  1197  (fn prems =>
  1198  (fn prems =>
  1198         [
  1199         [
  1199         (cut_facts_tac prems 1),
  1200         (cut_facts_tac prems 1),
  1200         (res_inst_tac [("x","%m. Y(Least(%j. m<j & P(Y(j))))")] exI 1),
  1201         (res_inst_tac [("x","%m. Y(Least(%j. m<j & P(Y(j))))")] exI 1),