# HG changeset patch # User paulson # Date 1664388897 -3600 # Node ID 1f2e78b7df933ed17d934f08382da2ef78c181e1 # Parent cf8f85e2a8071b8ac3b5dbe4d17aadfd56a66d99 more structured proofs diff -r cf8f85e2a807 -r 1f2e78b7df93 src/ZF/Constructible/Normal.thy --- a/src/ZF/Constructible/Normal.thy Wed Sep 28 11:23:49 2022 +0100 +++ b/src/ZF/Constructible/Normal.thy Wed Sep 28 19:14:57 2022 +0100 @@ -150,11 +150,12 @@ by (blast intro: Ord_iterates Ord_sup_greater assms) moreover have "next_greater(a, sup_greater^n (x)) \ (\n\nat. sup_greater^n (x))" if "n \ nat" for n - using that assms - apply (rule_tac a="succ(n)" in UN_upper_le) - apply (simp_all add: next_greater_le_sup_greater) - apply (blast intro: Ord_iterates Ord_sup_greater) - done + proof (rule UN_upper_le) + show "next_greater(a, sup_greater^n (x)) \ sup_greater^succ(n) (x)" + using assms by (simp add: next_greater_le_sup_greater) + show "Ord(\xa\nat. sup_greater^xa (x))" + using assms by (blast intro: Ord_iterates Ord_sup_greater) + qed (use that in auto) ultimately show "(\n\nat. next_greater(a, sup_greater^n (x))) \ sup_greater^\ (x)" using assms unfolding iterates_omega_def by (blast intro: UN_least_le) @@ -189,12 +190,13 @@ theorem Closed_Unbounded_INT: - "(\a. a\A \ Closed_Unbounded(P(a))) - \ Closed_Unbounded(\x. \a\A. P(a, x))" - apply (case_tac "A=0", simp) - apply (rule cub_family.Closed_Unbounded_INT [OF cub_family.intro]) - apply (simp_all add: Closed_Unbounded_def) - done + assumes "\a. a\A \ Closed_Unbounded(P(a))" + shows "Closed_Unbounded(\x. \a\A. P(a, x))" +proof (cases "A=0") + case False + with assms [unfolded Closed_Unbounded_def] show ?thesis + by (intro cub_family.Closed_Unbounded_INT [OF cub_family.intro]) auto +qed auto lemma Int_iff_INT2: "P(x) \ Q(x) \ (\i\2. (i=0 \ P(x)) \ (i=1 \ Q(x)))" @@ -203,9 +205,9 @@ theorem Closed_Unbounded_Int: "\Closed_Unbounded(P); Closed_Unbounded(Q)\ \ Closed_Unbounded(\x. P(x) \ Q(x))" - apply (simp only: Int_iff_INT2) - apply (rule Closed_Unbounded_INT, auto) - done + unfolding Int_iff_INT2 + by (rule Closed_Unbounded_INT, auto) + subsection \Normal Functions\ @@ -316,9 +318,9 @@ lemma Normal_Union: "\X\0; \x\X. Ord(x); Normal(F)\ \ F(\(X)) = (\y\X. F(y))" - apply (simp add: Normal_def) - apply (blast intro: mono_Ord_imp_le_subset cont_Ord_Union) - done + unfolding Normal_def + by (blast intro: mono_Ord_imp_le_subset cont_Ord_Union) + lemma Normal_imp_fp_Closed: "Normal(F) \ Closed(\i. F(i) = i)" apply (simp add: Closed_def ball_conj_distrib, clarify) @@ -330,9 +332,7 @@ lemma iterates_Normal_increasing: "\n\nat; x < F(x); Normal(F)\ \ F^n (x) < F^(succ(n)) (x)" - apply (induct n rule: nat_induct) - apply (simp_all add: Normal_imp_mono) - done + by (induct n rule: nat_induct) (simp_all add: Normal_imp_mono) lemma Ord_iterates_Normal: "\n\nat; Normal(F); Ord(x)\ \ Ord(F^n (x))" @@ -373,9 +373,7 @@ lemma iterates_omega_increasing: "\Normal(F); Ord(a)\ \ a \ F^\ (a)" - unfolding iterates_omega_def -apply (rule UN_upper_le [of 0], simp_all) -done + by (simp add: iterates_omega_def UN_upper_le [of 0]) lemma Normal_imp_fp_Unbounded: "Normal(F) \ Unbounded(\i. F(i) = i)" apply (unfold Unbounded_def, clarify) @@ -387,8 +385,7 @@ theorem Normal_imp_fp_Closed_Unbounded: "Normal(F) \ Closed_Unbounded(\i. F(i) = i)" -by (simp add: Closed_Unbounded_def Normal_imp_fp_Closed - Normal_imp_fp_Unbounded) + by (simp add: Closed_Unbounded_def Normal_imp_fp_Closed Normal_imp_fp_Unbounded) subsubsection\Function \normalize\\ @@ -405,9 +402,8 @@ lemma Ord_normalize [simp, intro]: "\Ord(a); \x. Ord(x) \ Ord(F(x))\ \ Ord(normalize(F, a))" -apply (induct a rule: trans_induct3) -apply (simp_all add: ltD def_transrec2 [OF normalize_def]) -done +proof (induct a rule: trans_induct3) +qed (simp_all add: ltD def_transrec2 [OF normalize_def]) lemma normalize_increasing: assumes ab: "a < b" and F: "\x. Ord(x) \ Ord(F(x))" @@ -437,11 +433,13 @@ qed theorem Normal_normalize: - "(\x. Ord(x) \ Ord(F(x))) \ Normal(normalize(F))" - apply (rule NormalI) - apply (blast intro!: normalize_increasing) - apply (simp add: def_transrec2 [OF normalize_def]) - done + assumes "\x. Ord(x) \ Ord(F(x))" shows "Normal(normalize(F))" +proof (rule NormalI) + show "\i j. i < j \ normalize(F,i) < normalize(F,j)" + using assms by (blast intro!: normalize_increasing) + show "\l. Limit(l) \ normalize(F, l) = (\ix. Ord(x) \ Ord(F(x))" @@ -501,9 +499,11 @@ qed theorem Normal_Aleph: "Normal(Aleph)" - apply (rule NormalI) - apply (blast intro!: Aleph_increasing) - apply (simp add: def_transrec2 [OF Aleph_def]) - done +proof (rule NormalI) + show "\i j. i < j \ \i < \j" + by (blast intro!: Aleph_increasing) + show "\l. Limit(l) \ \l = (\ii)" + by (simp add: def_transrec2 [OF Aleph_def]) +qed end