31 \<forall>x[M]. x\<in>A --> (\<forall>y[M]. y\<in>A --> <x,y>\<in>r | x=y | <y,x>\<in>r)" |
31 \<forall>x[M]. x\<in>A --> (\<forall>y[M]. y\<in>A --> <x,y>\<in>r | x=y | <y,x>\<in>r)" |
32 |
32 |
33 wellfounded :: "[i=>o,i]=>o" |
33 wellfounded :: "[i=>o,i]=>o" |
34 --{*EVERY non-empty set has an @{text r}-minimal element*} |
34 --{*EVERY non-empty set has an @{text r}-minimal element*} |
35 "wellfounded(M,r) == |
35 "wellfounded(M,r) == |
36 \<forall>x[M]. ~ empty(M,x) |
36 \<forall>x[M]. x\<noteq>0 --> (\<exists>y[M]. y\<in>x & ~(\<exists>z[M]. z\<in>x & <z,y> \<in> r))" |
37 --> (\<exists>y[M]. y\<in>x & ~(\<exists>z[M]. z\<in>x & <z,y> \<in> r))" |
|
38 wellfounded_on :: "[i=>o,i,i]=>o" |
37 wellfounded_on :: "[i=>o,i,i]=>o" |
39 --{*every non-empty SUBSET OF @{text A} has an @{text r}-minimal element*} |
38 --{*every non-empty SUBSET OF @{text A} has an @{text r}-minimal element*} |
40 "wellfounded_on(M,A,r) == |
39 "wellfounded_on(M,A,r) == |
41 \<forall>x[M]. ~ empty(M,x) --> subset(M,x,A) |
40 \<forall>x[M]. x\<noteq>0 --> x\<subseteq>A --> (\<exists>y[M]. y\<in>x & ~(\<exists>z[M]. z\<in>x & <z,y> \<in> r))" |
42 --> (\<exists>y[M]. y\<in>x & ~(\<exists>z[M]. z\<in>x & <z,y> \<in> r))" |
|
43 |
41 |
44 wellordered :: "[i=>o,i,i]=>o" |
42 wellordered :: "[i=>o,i,i]=>o" |
45 --{*linear and wellfounded on @{text A}*} |
43 --{*linear and wellfounded on @{text A}*} |
46 "wellordered(M,A,r) == |
44 "wellordered(M,A,r) == |
47 transitive_rel(M,A,r) & linear_rel(M,A,r) & wellfounded_on(M,A,r)" |
45 transitive_rel(M,A,r) & linear_rel(M,A,r) & wellfounded_on(M,A,r)" |
121 ==> P(a)"; |
119 ==> P(a)"; |
122 apply (simp (no_asm_use) add: wellfounded_on_def) |
120 apply (simp (no_asm_use) add: wellfounded_on_def) |
123 apply (drule_tac x="{z\<in>A. z\<in>A --> ~P(z)}" in rspec) |
121 apply (drule_tac x="{z\<in>A. z\<in>A --> ~P(z)}" in rspec) |
124 apply (blast intro: transM)+ |
122 apply (blast intro: transM)+ |
125 done |
123 done |
126 |
|
127 text{*The assumption @{term "r \<subseteq> A*A"} justifies strengthening the induction |
|
128 hypothesis by removing the restriction to @{term A}.*} |
|
129 lemma (in M_basic) wellfounded_on_induct2: |
|
130 "[| a\<in>A; wellfounded_on(M,A,r); M(A); r \<subseteq> A*A; |
|
131 separation(M, \<lambda>x. x\<in>A --> ~P(x)); |
|
132 \<forall>x\<in>A. M(x) & (\<forall>y. <y,x> \<in> r --> P(y)) --> P(x) |] |
|
133 ==> P(a)"; |
|
134 by (rule wellfounded_on_induct, assumption+, blast) |
|
135 |
124 |
136 |
125 |
137 subsubsection {*Kunen's lemma IV 3.14, page 123*} |
126 subsubsection {*Kunen's lemma IV 3.14, page 123*} |
138 |
127 |
139 lemma (in M_basic) linear_imp_relativized: |
128 lemma (in M_basic) linear_imp_relativized: |
295 lemma (in M_basic) wellordered_asym: |
284 lemma (in M_basic) wellordered_asym: |
296 "[| wellordered(M,A,r); <a,x>\<in>r; a\<in>A; x\<in>A; M(A) |] ==> <x,a>\<notin>r" |
285 "[| wellordered(M,A,r); <a,x>\<in>r; a\<in>A; x\<in>A; M(A) |] ==> <x,a>\<notin>r" |
297 by (simp add: wellordered_def, blast dest: wellfounded_on_asym) |
286 by (simp add: wellordered_def, blast dest: wellfounded_on_asym) |
298 |
287 |
299 |
288 |
300 text{*Surely a shorter proof using lemmas in @{text Order}? |
289 text{*Can't use @{text well_ord_iso_preserving} because it needs the |
301 Like @{text well_ord_iso_preserving}?*} |
290 strong premise @{term "well_ord(A,r)"}*} |
302 lemma (in M_basic) ord_iso_pred_imp_lt: |
291 lemma (in M_basic) ord_iso_pred_imp_lt: |
303 "[| f \<in> ord_iso(Order.pred(A,x,r), r, i, Memrel(i)); |
292 "[| f \<in> ord_iso(Order.pred(A,x,r), r, i, Memrel(i)); |
304 g \<in> ord_iso(Order.pred(A,y,r), r, j, Memrel(j)); |
293 g \<in> ord_iso(Order.pred(A,y,r), r, j, Memrel(j)); |
305 wellordered(M,A,r); x \<in> A; y \<in> A; M(A); M(r); M(f); M(g); M(j); |
294 wellordered(M,A,r); x \<in> A; y \<in> A; M(A); M(r); M(f); M(g); M(j); |
306 Ord(i); Ord(j); \<langle>x,y\<rangle> \<in> r |] |
295 Ord(i); Ord(j); \<langle>x,y\<rangle> \<in> r |] |
307 ==> i < j" |
296 ==> i < j" |
308 apply (frule wellordered_is_trans_on, assumption) |
297 apply (frule wellordered_is_trans_on, assumption) |
309 apply (frule_tac y=y in transM, assumption) |
298 apply (frule_tac y=y in transM, assumption) |
310 apply (rule_tac i=i and j=j in Ord_linear_lt, auto) |
299 apply (rule_tac i=i and j=j in Ord_linear_lt, auto) |
311 txt{*case @{term "i=j"} yields a contradiction*} |
300 txt{*case @{term "i=j"} yields a contradiction*} |
349 obase :: "[i=>o,i,i,i] => o" |
338 obase :: "[i=>o,i,i,i] => o" |
350 --{*the domain of @{text om}, eventually shown to equal @{text A}*} |
339 --{*the domain of @{text om}, eventually shown to equal @{text A}*} |
351 "obase(M,A,r,z) == |
340 "obase(M,A,r,z) == |
352 \<forall>a[M]. |
341 \<forall>a[M]. |
353 a \<in> z <-> |
342 a \<in> z <-> |
354 (a\<in>A & (\<exists>x[M]. \<exists>g[M]. \<exists>mx[M]. \<exists>par[M]. |
343 (a\<in>A & (\<exists>x[M]. \<exists>g[M]. Ord(x) & |
355 ordinal(M,x) & membership(M,x,mx) & pred_set(M,A,a,r,par) & |
344 order_isomorphism(M,Order.pred(A,a,r),r,x,Memrel(x),g)))" |
356 order_isomorphism(M,par,r,x,mx,g)))" |
|
357 |
345 |
358 |
346 |
359 omap :: "[i=>o,i,i,i] => o" |
347 omap :: "[i=>o,i,i,i] => o" |
360 --{*the function that maps wosets to order types*} |
348 --{*the function that maps wosets to order types*} |
361 "omap(M,A,r,f) == |
349 "omap(M,A,r,f) == |