src/HOLCF/Adm.thy
changeset 31076 99fe356cbbc2
parent 29138 661a8db7e647
child 36452 d37c6eed8117
equal deleted inserted replaced
31075:a9d6cf6de9a8 31076:99fe356cbbc2
    76 
    76 
    77 lemma adm_disj_lemma3: 
    77 lemma adm_disj_lemma3: 
    78   "\<lbrakk>chain (Y::nat \<Rightarrow> 'a::cpo); \<forall>i. \<exists>j\<ge>i. P (Y j)\<rbrakk> \<Longrightarrow> 
    78   "\<lbrakk>chain (Y::nat \<Rightarrow> 'a::cpo); \<forall>i. \<exists>j\<ge>i. P (Y j)\<rbrakk> \<Longrightarrow> 
    79     (\<Squnion>i. Y i) = (\<Squnion>i. Y (LEAST j. i \<le> j \<and> P (Y j)))"
    79     (\<Squnion>i. Y i) = (\<Squnion>i. Y (LEAST j. i \<le> j \<and> P (Y j)))"
    80  apply (frule (1) adm_disj_lemma1)
    80  apply (frule (1) adm_disj_lemma1)
    81  apply (rule antisym_less)
    81  apply (rule below_antisym)
    82   apply (rule lub_mono, assumption+)
    82   apply (rule lub_mono, assumption+)
    83   apply (erule chain_mono)
    83   apply (erule chain_mono)
    84   apply (simp add: adm_disj_lemma2)
    84   apply (simp add: adm_disj_lemma2)
    85  apply (rule lub_range_mono, fast, assumption+)
    85  apply (rule lub_range_mono, fast, assumption+)
    86 done
    86 done
   120   "\<lbrakk>adm (\<lambda>x. \<not> P x); adm (\<lambda>x. \<not> Q x)\<rbrakk> \<Longrightarrow> adm (\<lambda>x. \<not> (P x \<and> Q x))"
   120   "\<lbrakk>adm (\<lambda>x. \<not> P x); adm (\<lambda>x. \<not> Q x)\<rbrakk> \<Longrightarrow> adm (\<lambda>x. \<not> (P x \<and> Q x))"
   121 by (simp add: adm_imp)
   121 by (simp add: adm_imp)
   122 
   122 
   123 text {* admissibility and continuity *}
   123 text {* admissibility and continuity *}
   124 
   124 
   125 lemma adm_less: "\<lbrakk>cont u; cont v\<rbrakk> \<Longrightarrow> adm (\<lambda>x. u x \<sqsubseteq> v x)"
   125 lemma adm_below: "\<lbrakk>cont u; cont v\<rbrakk> \<Longrightarrow> adm (\<lambda>x. u x \<sqsubseteq> v x)"
   126 apply (rule admI)
   126 apply (rule admI)
   127 apply (simp add: cont2contlubE)
   127 apply (simp add: cont2contlubE)
   128 apply (rule lub_mono)
   128 apply (rule lub_mono)
   129 apply (erule (1) ch2ch_cont)
   129 apply (erule (1) ch2ch_cont)
   130 apply (erule (1) ch2ch_cont)
   130 apply (erule (1) ch2ch_cont)
   131 apply (erule spec)
   131 apply (erule spec)
   132 done
   132 done
   133 
   133 
   134 lemma adm_eq: "\<lbrakk>cont u; cont v\<rbrakk> \<Longrightarrow> adm (\<lambda>x. u x = v x)"
   134 lemma adm_eq: "\<lbrakk>cont u; cont v\<rbrakk> \<Longrightarrow> adm (\<lambda>x. u x = v x)"
   135 by (simp add: po_eq_conv adm_conj adm_less)
   135 by (simp add: po_eq_conv adm_conj adm_below)
   136 
   136 
   137 lemma adm_subst: "\<lbrakk>cont t; adm P\<rbrakk> \<Longrightarrow> adm (\<lambda>x. P (t x))"
   137 lemma adm_subst: "\<lbrakk>cont t; adm P\<rbrakk> \<Longrightarrow> adm (\<lambda>x. P (t x))"
   138 apply (rule admI)
   138 apply (rule admI)
   139 apply (simp add: cont2contlubE)
   139 apply (simp add: cont2contlubE)
   140 apply (erule admD)
   140 apply (erule admD)
   141 apply (erule (1) ch2ch_cont)
   141 apply (erule (1) ch2ch_cont)
   142 apply (erule spec)
   142 apply (erule spec)
   143 done
   143 done
   144 
   144 
   145 lemma adm_not_less: "cont t \<Longrightarrow> adm (\<lambda>x. \<not> t x \<sqsubseteq> u)"
   145 lemma adm_not_below: "cont t \<Longrightarrow> adm (\<lambda>x. \<not> t x \<sqsubseteq> u)"
   146 apply (rule admI)
   146 apply (rule admI)
   147 apply (drule_tac x=0 in spec)
   147 apply (drule_tac x=0 in spec)
   148 apply (erule contrapos_nn)
   148 apply (erule contrapos_nn)
   149 apply (erule rev_trans_less)
   149 apply (erule rev_below_trans)
   150 apply (erule cont2mono [THEN monofunE])
   150 apply (erule cont2mono [THEN monofunE])
   151 apply (erule is_ub_thelub)
   151 apply (erule is_ub_thelub)
   152 done
   152 done
   153 
   153 
   154 subsection {* Compactness *}
   154 subsection {* Compactness *}
   177 lemma compact_imp_max_in_chain:
   177 lemma compact_imp_max_in_chain:
   178   "\<lbrakk>chain Y; compact (\<Squnion>i. Y i)\<rbrakk> \<Longrightarrow> \<exists>i. max_in_chain i Y"
   178   "\<lbrakk>chain Y; compact (\<Squnion>i. Y i)\<rbrakk> \<Longrightarrow> \<exists>i. max_in_chain i Y"
   179 apply (drule (1) compactD2, simp)
   179 apply (drule (1) compactD2, simp)
   180 apply (erule exE, rule_tac x=i in exI)
   180 apply (erule exE, rule_tac x=i in exI)
   181 apply (rule max_in_chainI)
   181 apply (rule max_in_chainI)
   182 apply (rule antisym_less)
   182 apply (rule below_antisym)
   183 apply (erule (1) chain_mono)
   183 apply (erule (1) chain_mono)
   184 apply (erule (1) trans_less [OF is_ub_thelub])
   184 apply (erule (1) below_trans [OF is_ub_thelub])
   185 done
   185 done
   186 
   186 
   187 text {* admissibility and compactness *}
   187 text {* admissibility and compactness *}
   188 
   188 
   189 lemma adm_compact_not_less: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. \<not> k \<sqsubseteq> t x)"
   189 lemma adm_compact_not_below: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. \<not> k \<sqsubseteq> t x)"
   190 unfolding compact_def by (rule adm_subst)
   190 unfolding compact_def by (rule adm_subst)
   191 
   191 
   192 lemma adm_neq_compact: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. t x \<noteq> k)"
   192 lemma adm_neq_compact: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. t x \<noteq> k)"
   193 by (simp add: po_eq_conv adm_imp adm_not_less adm_compact_not_less)
   193 by (simp add: po_eq_conv adm_imp adm_not_below adm_compact_not_below)
   194 
   194 
   195 lemma adm_compact_neq: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. k \<noteq> t x)"
   195 lemma adm_compact_neq: "\<lbrakk>compact k; cont t\<rbrakk> \<Longrightarrow> adm (\<lambda>x. k \<noteq> t x)"
   196 by (simp add: po_eq_conv adm_imp adm_not_less adm_compact_not_less)
   196 by (simp add: po_eq_conv adm_imp adm_not_below adm_compact_not_below)
   197 
   197 
   198 lemma compact_UU [simp, intro]: "compact \<bottom>"
   198 lemma compact_UU [simp, intro]: "compact \<bottom>"
   199 by (rule compactI, simp add: adm_not_free)
   199 by (rule compactI, simp add: adm_not_free)
   200 
   200 
   201 lemma adm_not_UU: "cont t \<Longrightarrow> adm (\<lambda>x. t x \<noteq> \<bottom>)"
   201 lemma adm_not_UU: "cont t \<Longrightarrow> adm (\<lambda>x. t x \<noteq> \<bottom>)"
   208   shows "adm P"
   208   shows "adm P"
   209 by (rule admI, drule spec, erule P, erule is_ub_thelub)
   209 by (rule admI, drule spec, erule P, erule is_ub_thelub)
   210 
   210 
   211 lemmas adm_lemmas [simp] =
   211 lemmas adm_lemmas [simp] =
   212   adm_not_free adm_conj adm_all adm_ball adm_disj adm_imp adm_iff
   212   adm_not_free adm_conj adm_all adm_ball adm_disj adm_imp adm_iff
   213   adm_less adm_eq adm_not_less
   213   adm_below adm_eq adm_not_below
   214   adm_compact_not_less adm_compact_neq adm_neq_compact adm_not_UU
   214   adm_compact_not_below adm_compact_neq adm_neq_compact adm_not_UU
   215 
   215 
   216 end
   216 end