src/HOL/Zorn.thy
changeset 58184 db1381d811ab
parent 55811 aa1acc25126b
child 58889 5b7a9633cfa8
equal deleted inserted replaced
58183:285fbec02fb0 58184:db1381d811ab
   718   moreover have "wf (?r - Id)" by (rule wf_subset [OF `wf (r - Id)`]) blast
   718   moreover have "wf (?r - Id)" by (rule wf_subset [OF `wf (r - Id)`]) blast
   719   ultimately have "Well_order ?r" by (simp add: order_on_defs)
   719   ultimately have "Well_order ?r" by (simp add: order_on_defs)
   720   with 1 show ?thesis by auto
   720   with 1 show ?thesis by auto
   721 qed
   721 qed
   722 
   722 
       
   723 (* Move this to Hilbert Choice and wfrec to Wellfounded*)
       
   724 
       
   725 lemma wfrec_def_adm: "f \<equiv> wfrec R F \<Longrightarrow> wf R \<Longrightarrow> adm_wf R F \<Longrightarrow> f = F f"
       
   726   using wfrec_fixpoint by simp
       
   727 
       
   728 lemma dependent_wf_choice:
       
   729   fixes P :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> bool"
       
   730   assumes "wf R" and adm: "\<And>f g x r. (\<And>z. (z, x) \<in> R \<Longrightarrow> f z = g z) \<Longrightarrow> P f x r = P g x r"
       
   731   assumes P: "\<And>x f. (\<And>y. (y, x) \<in> R \<Longrightarrow> P f y (f y)) \<Longrightarrow> \<exists>r. P f x r"
       
   732   shows "\<exists>f. \<forall>x. P f x (f x)"
       
   733 proof (intro exI allI)
       
   734   fix x 
       
   735   def f \<equiv> "wfrec R (\<lambda>f x. SOME r. P f x r)"
       
   736   from `wf R` show "P f x (f x)"
       
   737   proof (induct x)
       
   738     fix x assume "\<And>y. (y, x) \<in> R \<Longrightarrow> P f y (f y)"
       
   739     show "P f x (f x)"
       
   740     proof (subst (2) wfrec_def_adm[OF f_def `wf R`])
       
   741       show "adm_wf R (\<lambda>f x. SOME r. P f x r)"
       
   742         by (auto simp add: adm_wf_def intro!: arg_cong[where f=Eps] ext adm)
       
   743       show "P f x (Eps (P f x))"
       
   744         using P by (rule someI_ex) fact
       
   745     qed
       
   746   qed
       
   747 qed
       
   748 
       
   749 lemma (in wellorder) dependent_wellorder_choice:
       
   750   assumes "\<And>r f g x. (\<And>y. y < x \<Longrightarrow> f y = g y) \<Longrightarrow> P f x r = P g x r"
       
   751   assumes P: "\<And>x f. (\<And>y. y < x \<Longrightarrow> P f y (f y)) \<Longrightarrow> \<exists>r. P f x r"
       
   752   shows "\<exists>f. \<forall>x. P f x (f x)"
       
   753   using wf by (rule dependent_wf_choice) (auto intro!: assms)
       
   754 
   723 end
   755 end