src/HOLCF/Lift.thy
changeset 31076 99fe356cbbc2
parent 30607 c3d1590debd8
child 32149 ef59550a55d3
equal deleted inserted replaced
31075:a9d6cf6de9a8 31076:99fe356cbbc2
    68   by simp
    68   by simp
    69 
    69 
    70 lemma DefE2: "\<lbrakk>x = Def s; x = \<bottom>\<rbrakk> \<Longrightarrow> R"
    70 lemma DefE2: "\<lbrakk>x = Def s; x = \<bottom>\<rbrakk> \<Longrightarrow> R"
    71   by simp
    71   by simp
    72 
    72 
    73 lemma Def_inject_less_eq: "Def x \<sqsubseteq> Def y \<longleftrightarrow> x = y"
    73 lemma Def_below_Def: "Def x \<sqsubseteq> Def y \<longleftrightarrow> x = y"
    74 by (simp add: less_lift_def Def_def Abs_lift_inverse lift_def)
    74 by (simp add: below_lift_def Def_def Abs_lift_inverse lift_def)
    75 
    75 
    76 lemma Def_less_is_eq [simp]: "Def x \<sqsubseteq> y \<longleftrightarrow> Def x = y"
    76 lemma Def_below_iff [simp]: "Def x \<sqsubseteq> y \<longleftrightarrow> Def x = y"
    77 by (induct y, simp, simp add: Def_inject_less_eq)
    77 by (induct y, simp, simp add: Def_below_Def)
    78 
    78 
    79 
    79 
    80 subsection {* Lift is flat *}
    80 subsection {* Lift is flat *}
    81 
    81 
    82 instance lift :: (type) flat
    82 instance lift :: (type) flat
   132 
   132 
   133 lemma FLIFT_mono:
   133 lemma FLIFT_mono:
   134   "(\<And>x. f x \<sqsubseteq> g x) \<Longrightarrow> (FLIFT x. f x) \<sqsubseteq> (FLIFT x. g x)"
   134   "(\<And>x. f x \<sqsubseteq> g x) \<Longrightarrow> (FLIFT x. f x) \<sqsubseteq> (FLIFT x. g x)"
   135 apply (rule monofunE [where f=flift1])
   135 apply (rule monofunE [where f=flift1])
   136 apply (rule cont2mono [OF cont_flift1])
   136 apply (rule cont2mono [OF cont_flift1])
   137 apply (simp add: less_fun_ext)
   137 apply (simp add: below_fun_ext)
   138 done
   138 done
   139 
   139 
   140 lemma cont2cont_flift1 [simp]:
   140 lemma cont2cont_flift1 [simp]:
   141   "\<lbrakk>\<And>y. cont (\<lambda>x. f x y)\<rbrakk> \<Longrightarrow> cont (\<lambda>x. FLIFT y. f x y)"
   141   "\<lbrakk>\<And>y. cont (\<lambda>x. f x y)\<rbrakk> \<Longrightarrow> cont (\<lambda>x. FLIFT y. f x y)"
   142 apply (rule cont_flift1 [THEN cont2cont_app3])
   142 apply (rule cont_flift1 [THEN cont2cont_app3])
   214     apply (cases x, simp)
   214     apply (cases x, simp)
   215     apply (rule thelubI)
   215     apply (rule thelubI)
   216     apply (rule is_lubI)
   216     apply (rule is_lubI)
   217      apply (rule ub_rangeI, simp)
   217      apply (rule ub_rangeI, simp)
   218     apply (drule ub_rangeD)
   218     apply (drule ub_rangeD)
   219     apply (erule rev_trans_less)
   219     apply (erule rev_below_trans)
   220     apply simp
   220     apply simp
   221     apply (rule lessI)
   221     apply (rule lessI)
   222     done
   222     done
   223 next
   223 next
   224   fix i :: nat and x :: "'a lift"
   224   fix i :: nat and x :: "'a lift"