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 |