--- a/src/HOLCF/Lift.ML Wed May 25 01:47:11 2005 +0200
+++ b/src/HOLCF/Lift.ML Wed May 25 02:49:46 2005 +0200
@@ -24,7 +24,6 @@
val Lift_exhaust = thm "Lift_exhaust";
val UU_lift_def = thm "UU_lift_def";
val Undef_eq_UU = thm "Undef_eq_UU";
-val chain_mono2_po = thm "chain_mono2_po";
val cont2cont_CF1L_rev2 = thm "cont2cont_CF1L_rev2";
val cont_Rep_CFun_app = thm "cont_Rep_CFun_app";
val cont_Rep_CFun_app_app = thm "cont_Rep_CFun_app_app";
@@ -33,7 +32,6 @@
val cont_flift1_not_arg = thm "cont_flift1_not_arg";
val cont_flift2_arg = thm "cont_flift2_arg";
val cont_if = thm "cont_if";
-val cpo_lift = thm "cpo_lift";
val flat_imp_chfin_poo = thm "flat_imp_chfin_poo";
val flift1_Def = thm "flift1_Def";
val flift1_UU = thm "flift1_UU";
@@ -49,5 +47,4 @@
val less_lift_def = thm "less_lift_def";
val liftpair_def = thm "liftpair_def";
val minimal_lift = thm "minimal_lift";
-val notUndef_I = thm "notUndef_I";
val not_Undef_is_Def = thm "not_Undef_is_Def";
--- a/src/HOLCF/Lift.thy Wed May 25 01:47:11 2005 +0200
+++ b/src/HOLCF/Lift.thy Wed May 25 02:49:46 2005 +0200
@@ -64,57 +64,27 @@
Undef}.
*}
-lemma notUndef_I: "[| x<<y; x ~= Undef |] ==> y ~= Undef"
- -- {* Tailoring @{text notUU_I} of @{text Pcpo.ML} to @{text Undef} *}
- by (blast intro: antisym_less)
-
-lemma chain_mono2_po: "[| EX j.~Y(j)=Undef; chain(Y::nat=>('a)lift) |]
- ==> EX j. ALL i. j<i-->~Y(i)=Undef"
- -- {* Tailoring @{text chain_mono2} of @{text Pcpo.ML} to @{text Undef} *}
- apply safe
- apply (rule exI)
- apply (intro strip)
- apply (rule notUndef_I)
- apply (erule (1) chain_mono)
- apply assumption
- done
-
lemma flat_imp_chfin_poo: "(ALL Y. chain(Y::nat=>('a)lift)-->(EX n. max_in_chain n Y))"
-- {* Tailoring @{text flat_imp_chfin} of @{text Fix.ML} to @{text lift} *}
apply (unfold max_in_chain_def)
- apply (intro strip)
- apply (rule_tac P = "ALL i. Y (i) = Undef" in case_split)
- apply (rule_tac x = 0 in exI)
- apply (intro strip)
- apply (rule trans)
- apply (erule spec)
- apply (rule sym)
- apply (erule spec)
- apply (subgoal_tac "ALL x y. x << (y:: ('a) lift) --> x=Undef | x=y")
- prefer 2 apply (simp add: inst_lift_po)
- apply (rule chain_mono2_po [THEN exE])
- apply fast
- apply assumption
- apply (rule_tac x = "Suc x" in exI)
- apply (intro strip)
- apply (rule disjE)
- prefer 3 apply assumption
- apply (rule mp)
- apply (drule spec)
- apply (erule spec)
- apply (erule le_imp_less_or_eq [THEN disjE])
- apply (erule chain_mono)
- apply auto
+ apply clarify
+ apply (case_tac "ALL i. Y i = Undef")
+ apply simp
+ apply simp
+ apply (erule exE)
+ apply (rule_tac x=i in exI)
+ apply clarify
+ apply (drule chain_mono3, assumption)
+ apply (simp add: less_lift_def)
done
-theorem cpo_lift: "chain (Y::nat => 'a lift) ==> EX x. range Y <<| x"
- apply (cut_tac flat_imp_chfin_poo)
- apply (blast intro: lub_finch1)
+instance lift :: (type) chfin
+ apply intro_classes
+ apply (rule flat_imp_chfin_poo)
done
instance lift :: (type) pcpo
apply intro_classes
- apply (erule cpo_lift)
apply (rule least_lift)
done