doc-src/TutorialI/Rules/Basic.thy
changeset 11154 042015819774
parent 11080 22855d091249
child 11182 e123a50aa949
equal deleted inserted replaced
11153:950ede59c05a 11154:042015819774
   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);