text\<open>There is no set of all ordinals, for then it would contain itself\<close> lemma ON_class: "\ (\i. i\X <-> Ord(i))" proof (rule notI) assume X: "\i. i \ X \ Ord(i)" have"\x y. x\X \ y\x \ y\X" by (simp add: X, blast intro: Ord_in_Ord) hence"Transset(X)" by (auto simp add: Transset_def) moreoverhave"\x. x \ X \ Transset(x)" by (simp add: X Ord_def) ultimatelyhave"Ord(X)"by (rule OrdI) hence"X \ X" by (simp add: X) thus"False"by (rule mem_irrefl) qed
subsection\<open>< is 'less Than' for Ordinals\<close>
lemma ltI: "\i\j; Ord(j)\ \ i by (unfold lt_def, blast)
lemma Memrel_0 [simp]: "Memrel(0) = 0" by (unfold Memrel_def, blast)
lemma Memrel_1 [simp]: "Memrel(1) = 0" by (unfold Memrel_def, blast)
lemma relation_Memrel: "relation(Memrel(A))" by (simp add: relation_def Memrel_def)
(*The membership relation (as a set) is well-founded.
Proof idea: show A<=B by applying the foundation axiom to A-B *) lemma wf_Memrel: "wf(Memrel(A))" unfolding wf_def apply (rule foundation [THEN disjE, THEN allI], erule disjI1, blast) done
text\<open>The premise \<^term>\<open>Ord(i)\<close> does not suffice.\<close> lemma trans_Memrel: "Ord(i) \ trans(Memrel(i))" by (unfold Ord_def Transset_def trans_def, blast)
text\<open>However, the following premise is strong enough.\<close> lemma Transset_trans_Memrel: "\j\i. Transset(j) \ trans(Memrel(i))" by (unfold Transset_def trans_def, blast)
(*If Transset(A) then Memrel(A) internalizes the membership relation below A*) lemma Transset_Memrel_iff: "Transset(A) \ \a,b\ \ Memrel(A) <-> a\b \ b\A" by (unfold Transset_def, blast)
(*Induction over an ordinal*) lemma Ord_induct [consumes 2]: "i \ k \ Ord(k) \ (\x. x \ k \ (\y. y \ x \ P(y)) \ P(x)) \ P(i)" using Transset_induct [OF _ Ord_is_Transset, of i k P] by simp
(*Induction over the class of ordinals -- a useful corollary of Ord_induct*) lemma trans_induct [consumes 1, case_names step]: "Ord(i) \ (\x. Ord(x) \ (\y. y \ x \ P(y)) \ P(x)) \ P(i)" apply (rule Ord_succ [THEN succI1 [THEN Ord_induct]], assumption) apply (blast intro: Ord_succ [THEN Ord_in_Ord]) done
section\<open>Fundamental properties of the epsilon ordering (< on ordinals)\<close>
subsubsection\<open>Proving That < is a Linear Ordering on the Ordinals\<close>
lemma Ord_linear: "Ord(i) \ Ord(j) \ i\j | i=j | j\i" proof (induct i arbitrary: j rule: trans_induct) case (step i) note step_i = step show ?caseusing\<open>Ord(j)\<close> proof (induct j rule: trans_induct) case (step j) thus ?caseusing step_i by (blast dest: Ord_trans) qed qed
text\<open>The trichotomy law for ordinals\<close> lemma Ord_linear_lt: assumes o: "Ord(i)""Ord(j)" obtains (lt) "i | (eq) "i=j" | (gt) "j apply (simp add: lt_def) apply (rule_tac i1=i and j1=j in Ord_linear [THEN disjE]) apply (blast intro: o)+ done
lemma Ord_linear2: assumes o: "Ord(i)""Ord(j)" obtains (lt) "i | (ge) "j \ i" apply (rule_tac i = i and j = j in Ord_linear_lt) apply (blast intro: leI le_eqI sym o) + done
lemma Ord_linear_le: assumes o: "Ord(i)""Ord(j)" obtains (le) "i \ j" | (ge) "j \ i" apply (rule_tac i = i and j = j in Ord_linear_lt) apply (blast intro: leI le_eqI o) + done
lemma le_imp_not_lt: "j \ i \ \ i by (blast elim!: leE elim: lt_asym)
lemma not_lt_imp_le: "\\ i \ j \ i" by (rule_tac i = i and j = j in Ord_linear2, auto)
subsubsection \<open>Some Rewrite Rules for \<open><\<close>, \<open>\<le>\<close>\<close>
lemma Ord_mem_iff_lt: "Ord(j) \ i\j <-> i by (unfold lt_def, blast)
lemma not_lt_iff_le: "\Ord(i); Ord(j)\ \ \ i j \ i" by (blast dest: le_imp_not_lt not_lt_imp_le)
lemma not_le_iff_lt: "\Ord(i); Ord(j)\ \ \ i \ j <-> j by (simp (no_asm_simp) add: not_lt_iff_le [THEN iff_sym])
(*This is identical to 0<succ(i) *) lemma Ord_0_le: "Ord(i) \ 0 \ i" by (erule not_lt_iff_le [THEN iffD1], auto)
subsubsection\<open>Union and Intersection\<close>
lemma Un_upper1_le: "\Ord(i); Ord(j)\ \ i \ i \ j" by (rule Un_upper1 [THEN subset_imp_le], auto)
lemma Un_upper2_le: "\Ord(i); Ord(j)\ \ j \ i \ j" by (rule Un_upper2 [THEN subset_imp_le], auto)
(*Replacing k by succ(k') yields the similar rule for le!*) lemma Un_least_lt: "\i \ i \ j < k" apply (rule_tac i = i and j = j in Ord_linear_le) apply (auto simp add: Un_commute le_subset_iff subset_Un_iff lt_Ord) done
lemma Un_least_lt_iff: "\Ord(i); Ord(j)\ \ i \ j < k <-> i j apply (safe intro!: Un_least_lt) apply (rule_tac [2] Un_upper2_le [THEN lt_trans1]) apply (rule Un_upper1_le [THEN lt_trans1], auto) done
lemma Un_least_mem_iff: "\Ord(i); Ord(j); Ord(k)\ \ i \ j \ k <-> i\k \ j\k" apply (insert Un_least_lt_iff [of i j k]) apply (simp add: lt_def) done
(*Replacing k by succ(k') yields the similar rule for le!*) lemma Int_greatest_lt: "\i \ i \ j < k" apply (rule_tac i = i and j = j in Ord_linear_le) apply (auto simp add: Int_commute le_subset_iff subset_Int_iff lt_Ord) done
lemma Ord_Un_if: "\Ord(i); Ord(j)\ \ i \ j = (if j by (simp add: not_lt_iff_le le_imp_subset leI
subset_Un_iff [symmetric] subset_Un_iff2 [symmetric])
lemma non_succ_LimitI: assumes i: "0and nsucc: "\y. succ(y) \ i" shows"Limit(i)" proof - have Oi: "Ord(i)"using i by (simp add: lt_def)
{ fix y assume yi: "y hence Osy: "Ord(succ(y))"by (simp add: lt_Ord Ord_succ) have"\ i \ y" using yi by (blast dest: le_imp_not_lt) hence"succ(y) < i"using nsucc [of y] by (blast intro: Ord_linear_lt [OF Osy Oi]) } thus ?thesis using i Oi by (auto simp add: Limit_def) qed
lemma Ord_set_cases: assumes I: "\i\I. Ord(i)" shows"I=0 \ \(I) \ I \ (\(I) \ I \ Limit(\(I)))" proof (cases "\(I)" rule: Ord_cases) show"Ord(\I)" using I by (blast intro: Ord_Union) next assume"\I = 0" thus ?thesis by (simp, blast intro: subst_elem) next fix j assume j: "Ord(j)"and UIj:"\(I) = succ(j)"
{ assume"\i\I. i\j" hence"\(I) \ j" by (simp add: Union_le j) hence False by (simp add: UIj lt_not_refl) } thenobtain i where i: "i \ I" "succ(j) \ i" using I j by (atomize, auto simp add: not_le_iff_lt) have"\(I) \ succ(j)" using UIj j by auto hence"i \ succ(j)" using i by (simp add: le_subset_iff Union_subset_iff) hence"succ(j) = i"using i by (blast intro: le_anti_sym) hence"succ(j) \ I" by (simp add: i) thus ?thesis by (simp add: UIj) next assume"Limit(\I)" thus ?thesis by auto qed
text\<open>If the union of a set of ordinals is a successor, then it is an element of that set.\<close> lemma Ord_Union_eq_succD: "\\x\X. Ord(x); \X = succ(j)\ \ succ(j) \ X" by (drule Ord_set_cases, auto)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.