src/ZF/Constructible/Wellorderings.thy
changeset 13628 87482b5e3f2e
parent 13615 449a70d88b38
child 13634 99a593b49b04
equal deleted inserted replaced
13627:67b0b7500a9d 13628:87482b5e3f2e
    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) ==