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 |