src/HOLCF/Pcpo.ML
changeset 9248 e1dee89de037
parent 9169 85a47aa21f74
child 9969 4753185f1dd2
--- a/src/HOLCF/Pcpo.ML	Wed Jul 05 14:26:58 2000 +0200
+++ b/src/HOLCF/Pcpo.ML	Wed Jul 05 16:37:52 2000 +0200
@@ -18,14 +18,14 @@
 
 bind_thm("minimal", UU_least RS spec);
 
+AddIffs [minimal];
+
 (* ------------------------------------------------------------------------ *)
 (* in cpo's everthing equal to THE lub has lub properties for every chain  *)
 (* ------------------------------------------------------------------------ *)
 
-Goal "[| chain(S);lub(range(S)) = (l::'a::cpo)|] ==> range(S) <<| l ";
-by (hyp_subst_tac 1);
-by (rtac lubI 1);
-by (etac cpo 1);
+Goal "[| chain(S); lub(range(S)) = (l::'a::cpo) |] ==> range(S) <<| l ";
+by (blast_tac (claset() addDs [cpo] addIs [lubI]) 1);
 qed "thelubE";
 
 (* ------------------------------------------------------------------------ *)
@@ -33,11 +33,14 @@
 (* ------------------------------------------------------------------------ *)
 
 
-bind_thm ("is_ub_thelub", cpo RS lubI RS is_ub_lub);
-(* chain(?S1) ==> ?S1(?x) << lub(range(?S1))                             *)
+Goal "chain (S::nat => 'a::cpo) ==> S(x) << lub(range(S))";
+by (blast_tac (claset() addDs [cpo] addIs [lubI RS is_ub_lub]) 1);
+qed "is_ub_thelub";
 
-bind_thm ("is_lub_thelub", cpo RS lubI RS is_lub_lub);
-(* [| chain(?S5); range(?S5) <| ?x1 |] ==> lub(range(?S5)) << ?x1        *)
+Goal "[| chain (S::nat => 'a::cpo); range(S) <| x |] ==> lub(range S) << x";
+by (blast_tac (claset() addDs [cpo] addIs [lubI RS is_lub_lub]) 1);
+qed "is_lub_thelub";
+
 
 Goal "chain Y ==> max_in_chain i Y = (lub(range(Y)) = ((Y i)::'a::cpo))";
 by (rtac iffI 1);
@@ -58,7 +61,6 @@
 \     ==> lub(range(C1)) << lub(range(C2))";
 by (etac is_lub_thelub 1);
 by (rtac ub_rangeI 1);
-by (rtac allI 1);
 by (rtac trans_less 1);
 by (etac spec 1);
 by (etac is_ub_thelub 1);
@@ -103,7 +105,7 @@
 by (rtac is_ub_thelub 1);
 by (assume_tac 1);
 by (res_inst_tac [("y","X(Suc(j))")] trans_less 1);
-by (rtac (chain_mono RS mp) 1);
+by (rtac chain_mono 1);
 by (assume_tac 1);
 by (rtac (not_less_eq RS subst) 1);
 by (atac 1);
@@ -164,7 +166,6 @@
 
 Goal "ALL i. Y(i::nat)=UU ==> lub(range(Y::(nat=>'a::pcpo)))=UU";
 by (rtac lub_chain_maxelem 1);
-by (rtac exI 1);
 by (etac spec 1);
 by (rtac allI 1);
 by (rtac (antisym_less_inverse RS conjunct1) 1);
@@ -181,7 +182,7 @@
 
 Goal 
  "[|EX j. ~Y(j)=UU;chain(Y::nat=>'a::pcpo)|] ==> EX j. ALL i. j<i-->~Y(i)=UU";
-by (blast_tac (claset() addDs [notUU_I, chain_mono RS mp]) 1);
+by (blast_tac (claset() addDs [notUU_I, chain_mono]) 1);
 qed "chain_mono2";
 
 (**************************************)
@@ -192,9 +193,10 @@
 (* flat types are chfin                                              *)
 (* ------------------------------------------------------------------------ *)
 
+(*Used only in an "instance" declaration (Fun1.thy)*)
 Goalw [max_in_chain_def]
-     "ALL Y::nat=>'a::flat. chain Y-->(EX n. max_in_chain n Y)";
-by (strip_tac 1);
+     "ALL Y::nat=>'a::flat. chain Y --> (EX n. max_in_chain n Y)";
+by (Clarify_tac 1);
 by (case_tac "ALL i. Y(i)=UU" 1);
 by (res_inst_tac [("x","0")] exI 1);
 by (Asm_simp_tac 1);
@@ -202,11 +204,9 @@
 by (etac exE 1);
 by (res_inst_tac [("x","i")] exI 1);
 by (strip_tac 1);
-by (dres_inst_tac [("x","i"),("y","j")] chain_mono 1);
 by (etac (le_imp_less_or_eq RS disjE) 1);
 by Safe_tac;
-by (dtac (ax_flat RS spec RS spec RS mp) 1);
-by (Fast_tac 1);
+by (blast_tac (claset() addDs [chain_mono, ax_flat RS spec RS spec RS mp]) 1);
 qed "flat_imp_chfin";
 
 (* flat subclass of chfin --> adm_flat not needed *)
@@ -253,5 +253,5 @@
 by (rewtac finite_chain_def);
 by (rewtac max_in_chain_def);
 by (fast_tac (HOL_cs addIs prems
-		     addDs [le_imp_less_or_eq] addEs [chain_mono RS mp]) 1);
+		     addDs [le_imp_less_or_eq] addEs [chain_mono]) 1);
 qed "increasing_chain_adm_lemma";