src/ZF/Constructible/WFrec.thy
changeset 13350 626b79677dfa
parent 13348 374d05460db4
child 13352 3cd767f8d78b
equal deleted inserted replaced
13349:7d4441c8c46a 13350:626b79677dfa
   281             (\<exists>x[M]. \<exists>y[M]. \<exists>xa[M]. \<exists>sx[M]. \<exists>r_sx[M]. \<exists>f_r_sx[M]. 
   281             (\<exists>x[M]. \<exists>y[M]. \<exists>xa[M]. \<exists>sx[M]. \<exists>r_sx[M]. \<exists>f_r_sx[M]. 
   282 	       pair(M,x,y,z) & pair(M,x,a,xa) & upair(M,x,x,sx) &
   282 	       pair(M,x,y,z) & pair(M,x,a,xa) & upair(M,x,x,sx) &
   283                pre_image(M,r,sx,r_sx) & restriction(M,f,r_sx,f_r_sx) &
   283                pre_image(M,r,sx,r_sx) & restriction(M,f,r_sx,f_r_sx) &
   284                xa \<in> r & MH(x, f_r_sx, y))"
   284                xa \<in> r & MH(x, f_r_sx, y))"
   285 
   285 
   286 lemma (in M_axioms) is_recfun_iff_M:
   286 lemma (in M_axioms) is_recfun_abs:
   287      "[| M(r); M(a); M(f); \<forall>x[M]. \<forall>g[M]. function(g) --> M(H(x,g));
   287      "[| \<forall>x[M]. \<forall>g[M]. function(g) --> M(H(x,g));  M(r); M(a); M(f); 
   288        \<forall>x g y. M(x) --> M(g) --> M(y) --> MH(x,g,y) <-> y = H(x,g) |] ==>
   288          \<forall>x g y. M(x) --> M(g) --> M(y) --> MH(x,g,y) <-> y = H(x,g) |] 
   289        is_recfun(r,a,H,f) <-> M_is_recfun(M,r,a,MH,f)"
   289       ==> M_is_recfun(M,r,a,MH,f) <-> is_recfun(r,a,H,f)"
   290 apply (simp add: M_is_recfun_def is_recfun_relativize)
   290 apply (simp add: M_is_recfun_def is_recfun_relativize)
   291 apply (rule rall_cong)
   291 apply (rule rall_cong)
   292 apply (blast dest: transM)
   292 apply (blast dest: transM)
   293 done
   293 done
   294 
   294 
   298       ==> M_is_recfun(M,r,a,MH,f) <-> M_is_recfun(M,r',a',MH',f')"
   298       ==> M_is_recfun(M,r,a,MH,f) <-> M_is_recfun(M,r',a',MH',f')"
   299 by (simp add: M_is_recfun_def) 
   299 by (simp add: M_is_recfun_def) 
   300 
   300 
   301 
   301 
   302 constdefs
   302 constdefs
   303  (*This expresses ordinal addition as a formula in the LAST.  It also 
   303  (*This expresses ordinal addition in the language of ZF.  It also 
   304    provides an abbreviation that can be used in the instance of strong
   304    provides an abbreviation that can be used in the instance of strong
   305    replacement below.  Here j is used to define the relation, namely
   305    replacement below.  Here j is used to define the relation, namely
   306    Memrel(succ(j)), while x determines the domain of f.*)
   306    Memrel(succ(j)), while x determines the domain of f.*)
   307  is_oadd_fun :: "[i=>o,i,i,i,i] => o"
   307  is_oadd_fun :: "[i=>o,i,i,i,i] => o"
   308     "is_oadd_fun(M,i,j,x,f) == 
   308     "is_oadd_fun(M,i,j,x,f) == 
   365    "[| a\<le>j; M(i); M(j); M(a); M(f) |] 
   365    "[| a\<le>j; M(i); M(j); M(a); M(f) |] 
   366     ==> is_oadd_fun(M,i,j,a,f) <->
   366     ==> is_oadd_fun(M,i,j,a,f) <->
   367 	f \<in> a \<rightarrow> range(f) & (\<forall>x. M(x) --> x < a --> f`x = i Un f``x)"
   367 	f \<in> a \<rightarrow> range(f) & (\<forall>x. M(x) --> x < a --> f`x = i Un f``x)"
   368 apply (frule lt_Ord) 
   368 apply (frule lt_Ord) 
   369 apply (simp add: is_oadd_fun_def Memrel_closed Un_closed 
   369 apply (simp add: is_oadd_fun_def Memrel_closed Un_closed 
   370              is_recfun_iff_M [of concl: _ _ "%x g. i Un g``x", THEN iff_sym]
   370              is_recfun_abs [of "%x g. i Un g``x"]
   371              image_closed is_recfun_iff_equation  
   371              image_closed is_recfun_iff_equation  
   372              Ball_def lt_trans [OF ltI, of _ a] lt_Memrel)
   372              Ball_def lt_trans [OF ltI, of _ a] lt_Memrel)
   373 apply (simp add: lt_def) 
   373 apply (simp add: lt_def) 
   374 apply (blast dest: transM) 
   374 apply (blast dest: transM) 
   375 done
   375 done
   380      strong_replacement(M, 
   380      strong_replacement(M, 
   381             \<lambda>x z. \<exists>y[M]. z = <x,y> &
   381             \<lambda>x z. \<exists>y[M]. z = <x,y> &
   382 		  (\<exists>g[M]. is_recfun(Memrel(succ(j)),x,%x g. i Un g``x,g) & 
   382 		  (\<exists>g[M]. is_recfun(Memrel(succ(j)),x,%x g. i Un g``x,g) & 
   383 		  y = i Un g``x))" 
   383 		  y = i Un g``x))" 
   384 apply (insert oadd_strong_replacement [of i j]) 
   384 apply (insert oadd_strong_replacement [of i j]) 
   385 apply (simp add: Memrel_closed Un_closed image_closed is_oadd_fun_def
   385 apply (simp add: is_oadd_fun_def is_recfun_abs [of "%x g. i Un g``x"])  
   386                  is_recfun_iff_M)  
       
   387 done
   386 done
   388 
   387 
   389 
   388 
   390 lemma (in M_ord_arith) exists_oadd:
   389 lemma (in M_ord_arith) exists_oadd:
   391     "[| Ord(j);  M(i);  M(j) |]
   390     "[| Ord(j);  M(i);  M(j) |]