equal
deleted
inserted
replaced
226 |
226 |
227 text{*but we know nothing about inv Suc 0*} |
227 text{*but we know nothing about inv Suc 0*} |
228 |
228 |
229 theorem Least_equality: |
229 theorem Least_equality: |
230 "\<lbrakk> P (k::nat); \<forall>x. P x \<longrightarrow> k \<le> x \<rbrakk> \<Longrightarrow> (LEAST x. P(x)) = k" |
230 "\<lbrakk> P (k::nat); \<forall>x. P x \<longrightarrow> k \<le> x \<rbrakk> \<Longrightarrow> (LEAST x. P(x)) = k" |
231 apply (simp add: Least_def) |
231 apply (simp add: Least_def LeastM_def) |
232 |
232 |
233 txt{*omit maybe? |
233 txt{*omit maybe? |
234 @{subgoals[display,indent=0,margin=65]} |
234 @{subgoals[display,indent=0,margin=65]} |
235 *}; |
235 *}; |
236 |
236 |
264 |
264 |
265 by (rule someI) |
265 by (rule someI) |
266 |
266 |
267 (*both can be done by blast, which however hasn't been introduced yet*) |
267 (*both can be done by blast, which however hasn't been introduced yet*) |
268 lemma "[| P (k::nat); \<forall>x. P x \<longrightarrow> k \<le> x |] ==> (LEAST x. P(x)) = k"; |
268 lemma "[| P (k::nat); \<forall>x. P x \<longrightarrow> k \<le> x |] ==> (LEAST x. P(x)) = k"; |
269 apply (simp add: Least_def) |
269 apply (simp add: Least_def LeastM_def) |
270 by (blast intro: some_equality order_antisym); |
270 by (blast intro: some_equality order_antisym); |
271 |
271 |
272 theorem axiom_of_choice: "(\<forall>x. \<exists>y. P x y) \<Longrightarrow> \<exists>f. \<forall>x. P x (f x)" |
272 theorem axiom_of_choice: "(\<forall>x. \<exists>y. P x y) \<Longrightarrow> \<exists>f. \<forall>x. P x (f x)" |
273 apply (rule exI [of _ "\<lambda>x. SOME y. P x y"]) |
273 apply (rule exI [of _ "\<lambda>x. SOME y. P x y"]) |
274 by (blast intro: someI); |
274 by (blast intro: someI); |