src/ZF/Constructible/Separation.thy
changeset 13314 84b9de3cbc91
parent 13306 6eebcddee32b
child 13316 d16629fd0f95
equal deleted inserted replaced
13313:e4dc78f4e51e 13314:84b9de3cbc91
    42 
    42 
    43 
    43 
    44 subsubsection{*Separation for Intersection*}
    44 subsubsection{*Separation for Intersection*}
    45 
    45 
    46 lemma Inter_Reflects:
    46 lemma Inter_Reflects:
    47      "L_Reflects(?Cl, \<lambda>x. \<forall>y[L]. y\<in>A --> x \<in> y, 
    47      "REFLECTS[\<lambda>x. \<forall>y[L]. y\<in>A --> x \<in> y, 
    48                \<lambda>i x. \<forall>y\<in>Lset(i). y\<in>A --> x \<in> y)"
    48                \<lambda>i x. \<forall>y\<in>Lset(i). y\<in>A --> x \<in> y]"
    49 by fast
    49 by (intro FOL_reflection)  
    50 
    50 
    51 lemma Inter_separation:
    51 lemma Inter_separation:
    52      "L(A) ==> separation(L, \<lambda>x. \<forall>y[L]. y\<in>A --> x\<in>y)"
    52      "L(A) ==> separation(L, \<lambda>x. \<forall>y[L]. y\<in>A --> x\<in>y)"
    53 apply (rule separation_CollectI) 
    53 apply (rule separation_CollectI) 
    54 apply (rule_tac A="{A,z}" in subset_LsetE, blast ) 
    54 apply (rule_tac A="{A,z}" in subset_LsetE, blast ) 
    65 done
    65 done
    66 
    66 
    67 subsubsection{*Separation for Cartesian Product*}
    67 subsubsection{*Separation for Cartesian Product*}
    68 
    68 
    69 lemma cartprod_Reflects [simplified]:
    69 lemma cartprod_Reflects [simplified]:
    70      "L_Reflects(?Cl, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)),
    70      "REFLECTS[\<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)),
    71                 \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). y\<in>B & 
    71                 \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). y\<in>B & 
    72                                pair(**Lset(i),x,y,z)))"
    72                                    pair(**Lset(i),x,y,z))]"
    73 by fast
    73 by (intro FOL_reflection function_reflection)  
    74 
    74 
    75 lemma cartprod_separation:
    75 lemma cartprod_separation:
    76      "[| L(A); L(B) |] 
    76      "[| L(A); L(B) |] 
    77       ==> separation(L, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)))"
    77       ==> separation(L, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)))"
    78 apply (rule separation_CollectI) 
    78 apply (rule separation_CollectI) 
    98 subsubsection{*Separation for Image*}
    98 subsubsection{*Separation for Image*}
    99 
    99 
   100 text{*No @{text simplified} here: it simplifies the occurrence of 
   100 text{*No @{text simplified} here: it simplifies the occurrence of 
   101       the predicate @{term pair}!*}
   101       the predicate @{term pair}!*}
   102 lemma image_Reflects:
   102 lemma image_Reflects:
   103      "L_Reflects(?Cl, \<lambda>y. \<exists>p[L]. p\<in>r & (\<exists>x[L]. x\<in>A & pair(L,x,y,p)),
   103      "REFLECTS[\<lambda>y. \<exists>p[L]. p\<in>r & (\<exists>x[L]. x\<in>A & pair(L,x,y,p)),
   104            \<lambda>i y. \<exists>p\<in>Lset(i). p\<in>r & (\<exists>x\<in>Lset(i). x\<in>A & pair(**Lset(i),x,y,p)))"
   104            \<lambda>i y. \<exists>p\<in>Lset(i). p\<in>r & (\<exists>x\<in>Lset(i). x\<in>A & pair(**Lset(i),x,y,p))]"
   105 by fast
   105 by (intro FOL_reflection function_reflection)
   106 
   106 
   107 
   107 
   108 lemma image_separation:
   108 lemma image_separation:
   109      "[| L(A); L(r) |] 
   109      "[| L(A); L(r) |] 
   110       ==> separation(L, \<lambda>y. \<exists>p[L]. p\<in>r & (\<exists>x[L]. x\<in>A & pair(L,x,y,p)))"
   110       ==> separation(L, \<lambda>y. \<exists>p[L]. p\<in>r & (\<exists>x[L]. x\<in>A & pair(L,x,y,p)))"
   134 
   134 
   135 
   135 
   136 subsubsection{*Separation for Converse*}
   136 subsubsection{*Separation for Converse*}
   137 
   137 
   138 lemma converse_Reflects:
   138 lemma converse_Reflects:
   139      "L_Reflects(?Cl, 
   139   "REFLECTS[\<lambda>z. \<exists>p[L]. p\<in>r & (\<exists>x[L]. \<exists>y[L]. pair(L,x,y,p) & pair(L,y,x,z)),
   140         \<lambda>z. \<exists>p[L]. p\<in>r & (\<exists>x[L]. \<exists>y[L]. pair(L,x,y,p) & pair(L,y,x,z)),
       
   141      \<lambda>i z. \<exists>p\<in>Lset(i). p\<in>r & (\<exists>x\<in>Lset(i). \<exists>y\<in>Lset(i). 
   140      \<lambda>i z. \<exists>p\<in>Lset(i). p\<in>r & (\<exists>x\<in>Lset(i). \<exists>y\<in>Lset(i). 
   142                      pair(**Lset(i),x,y,p) & pair(**Lset(i),y,x,z)))"
   141                      pair(**Lset(i),x,y,p) & pair(**Lset(i),y,x,z))]"
   143 by fast
   142 by (intro FOL_reflection function_reflection)
   144 
   143 
   145 lemma converse_separation:
   144 lemma converse_separation:
   146      "L(r) ==> separation(L, 
   145      "L(r) ==> separation(L, 
   147          \<lambda>z. \<exists>p[L]. p\<in>r & (\<exists>x[L]. \<exists>y[L]. pair(L,x,y,p) & pair(L,y,x,z)))"
   146          \<lambda>z. \<exists>p[L]. p\<in>r & (\<exists>x[L]. \<exists>y[L]. pair(L,x,y,p) & pair(L,y,x,z)))"
   148 apply (rule separation_CollectI) 
   147 apply (rule separation_CollectI) 
   169 
   168 
   170 
   169 
   171 subsubsection{*Separation for Restriction*}
   170 subsubsection{*Separation for Restriction*}
   172 
   171 
   173 lemma restrict_Reflects:
   172 lemma restrict_Reflects:
   174      "L_Reflects(?Cl, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. pair(L,x,y,z)),
   173      "REFLECTS[\<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. pair(L,x,y,z)),
   175         \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). pair(**Lset(i),x,y,z)))"
   174         \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). pair(**Lset(i),x,y,z))]"
   176 by fast
   175 by (intro FOL_reflection function_reflection)
   177 
   176 
   178 lemma restrict_separation:
   177 lemma restrict_separation:
   179    "L(A) ==> separation(L, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. pair(L,x,y,z)))"
   178    "L(A) ==> separation(L, \<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. pair(L,x,y,z)))"
   180 apply (rule separation_CollectI) 
   179 apply (rule separation_CollectI) 
   181 apply (rule_tac A="{A,z}" in subset_LsetE, blast ) 
   180 apply (rule_tac A="{A,z}" in subset_LsetE, blast ) 
   195 
   194 
   196 
   195 
   197 subsubsection{*Separation for Composition*}
   196 subsubsection{*Separation for Composition*}
   198 
   197 
   199 lemma comp_Reflects:
   198 lemma comp_Reflects:
   200      "L_Reflects(?Cl, \<lambda>xz. \<exists>x[L]. \<exists>y[L]. \<exists>z[L]. \<exists>xy[L]. \<exists>yz[L]. 
   199      "REFLECTS[\<lambda>xz. \<exists>x[L]. \<exists>y[L]. \<exists>z[L]. \<exists>xy[L]. \<exists>yz[L]. 
   201 		  pair(L,x,z,xz) & pair(L,x,y,xy) & pair(L,y,z,yz) & 
   200 		  pair(L,x,z,xz) & pair(L,x,y,xy) & pair(L,y,z,yz) & 
   202                   xy\<in>s & yz\<in>r,
   201                   xy\<in>s & yz\<in>r,
   203         \<lambda>i xz. \<exists>x\<in>Lset(i). \<exists>y\<in>Lset(i). \<exists>z\<in>Lset(i). \<exists>xy\<in>Lset(i). \<exists>yz\<in>Lset(i). 
   202         \<lambda>i xz. \<exists>x\<in>Lset(i). \<exists>y\<in>Lset(i). \<exists>z\<in>Lset(i). \<exists>xy\<in>Lset(i). \<exists>yz\<in>Lset(i). 
   204 		  pair(**Lset(i),x,z,xz) & pair(**Lset(i),x,y,xy) & 
   203 		  pair(**Lset(i),x,z,xz) & pair(**Lset(i),x,y,xy) & 
   205                   pair(**Lset(i),y,z,yz) & xy\<in>s & yz\<in>r)"
   204                   pair(**Lset(i),y,z,yz) & xy\<in>s & yz\<in>r]"
   206 by fast
   205 by (intro FOL_reflection function_reflection)
   207 
   206 
   208 lemma comp_separation:
   207 lemma comp_separation:
   209      "[| L(r); L(s) |]
   208      "[| L(r); L(s) |]
   210       ==> separation(L, \<lambda>xz. \<exists>x[L]. \<exists>y[L]. \<exists>z[L]. \<exists>xy[L]. \<exists>yz[L]. 
   209       ==> separation(L, \<lambda>xz. \<exists>x[L]. \<exists>y[L]. \<exists>z[L]. \<exists>xy[L]. \<exists>yz[L]. 
   211 		  pair(L,x,z,xz) & pair(L,x,y,xy) & pair(L,y,z,yz) & 
   210 		  pair(L,x,z,xz) & pair(L,x,y,xy) & pair(L,y,z,yz) & 
   248 done
   247 done
   249 
   248 
   250 subsubsection{*Separation for Predecessors in an Order*}
   249 subsubsection{*Separation for Predecessors in an Order*}
   251 
   250 
   252 lemma pred_Reflects:
   251 lemma pred_Reflects:
   253      "L_Reflects(?Cl, \<lambda>y. \<exists>p[L]. p\<in>r & pair(L,y,x,p),
   252      "REFLECTS[\<lambda>y. \<exists>p[L]. p\<in>r & pair(L,y,x,p),
   254                     \<lambda>i y. \<exists>p \<in> Lset(i). p\<in>r & pair(**Lset(i),y,x,p))"
   253                     \<lambda>i y. \<exists>p \<in> Lset(i). p\<in>r & pair(**Lset(i),y,x,p)]"
   255 by fast
   254 by (intro FOL_reflection function_reflection)
   256 
   255 
   257 lemma pred_separation:
   256 lemma pred_separation:
   258      "[| L(r); L(x) |] ==> separation(L, \<lambda>y. \<exists>p[L]. p\<in>r & pair(L,y,x,p))"
   257      "[| L(r); L(x) |] ==> separation(L, \<lambda>y. \<exists>p[L]. p\<in>r & pair(L,y,x,p))"
   259 apply (rule separation_CollectI) 
   258 apply (rule separation_CollectI) 
   260 apply (rule_tac A="{r,x,z}" in subset_LsetE, blast ) 
   259 apply (rule_tac A="{r,x,z}" in subset_LsetE, blast ) 
   278 
   277 
   279 
   278 
   280 subsubsection{*Separation for the Membership Relation*}
   279 subsubsection{*Separation for the Membership Relation*}
   281 
   280 
   282 lemma Memrel_Reflects:
   281 lemma Memrel_Reflects:
   283      "L_Reflects(?Cl, \<lambda>z. \<exists>x[L]. \<exists>y[L]. pair(L,x,y,z) & x \<in> y,
   282      "REFLECTS[\<lambda>z. \<exists>x[L]. \<exists>y[L]. pair(L,x,y,z) & x \<in> y,
   284             \<lambda>i z. \<exists>x \<in> Lset(i). \<exists>y \<in> Lset(i). pair(**Lset(i),x,y,z) & x \<in> y)"
   283             \<lambda>i z. \<exists>x \<in> Lset(i). \<exists>y \<in> Lset(i). pair(**Lset(i),x,y,z) & x \<in> y]"
   285 by fast
   284 by (intro FOL_reflection function_reflection)
   286 
   285 
   287 lemma Memrel_separation:
   286 lemma Memrel_separation:
   288      "separation(L, \<lambda>z. \<exists>x[L]. \<exists>y[L]. pair(L,x,y,z) & x \<in> y)"
   287      "separation(L, \<lambda>z. \<exists>x[L]. \<exists>y[L]. pair(L,x,y,z) & x \<in> y)"
   289 apply (rule separation_CollectI) 
   288 apply (rule separation_CollectI) 
   290 apply (rule_tac A="{z}" in subset_LsetE, blast ) 
   289 apply (rule_tac A="{z}" in subset_LsetE, blast ) 
   308 
   307 
   309 
   308 
   310 subsubsection{*Replacement for FunSpace*}
   309 subsubsection{*Replacement for FunSpace*}
   311 		
   310 		
   312 lemma funspace_succ_Reflects:
   311 lemma funspace_succ_Reflects:
   313  "L_Reflects(?Cl, \<lambda>z. \<exists>p[L]. p\<in>A & (\<exists>f[L]. \<exists>b[L]. \<exists>nb[L]. \<exists>cnbf[L]. 
   312  "REFLECTS[\<lambda>z. \<exists>p[L]. p\<in>A & (\<exists>f[L]. \<exists>b[L]. \<exists>nb[L]. \<exists>cnbf[L]. 
   314 	    pair(L,f,b,p) & pair(L,n,b,nb) & is_cons(L,nb,f,cnbf) &
   313 	    pair(L,f,b,p) & pair(L,n,b,nb) & is_cons(L,nb,f,cnbf) &
   315 	    upair(L,cnbf,cnbf,z)),
   314 	    upair(L,cnbf,cnbf,z)),
   316 	\<lambda>i z. \<exists>p \<in> Lset(i). p\<in>A & (\<exists>f \<in> Lset(i). \<exists>b \<in> Lset(i). 
   315 	\<lambda>i z. \<exists>p \<in> Lset(i). p\<in>A & (\<exists>f \<in> Lset(i). \<exists>b \<in> Lset(i). 
   317 	      \<exists>nb \<in> Lset(i). \<exists>cnbf \<in> Lset(i). 
   316 	      \<exists>nb \<in> Lset(i). \<exists>cnbf \<in> Lset(i). 
   318 		pair(**Lset(i),f,b,p) & pair(**Lset(i),n,b,nb) & 
   317 		pair(**Lset(i),f,b,p) & pair(**Lset(i),n,b,nb) & 
   319 		is_cons(**Lset(i),nb,f,cnbf) & upair(**Lset(i),cnbf,cnbf,z)))"
   318 		is_cons(**Lset(i),nb,f,cnbf) & upair(**Lset(i),cnbf,cnbf,z))]"
   320 by fast
   319 by (intro FOL_reflection function_reflection)
   321 
   320 
   322 lemma funspace_succ_replacement:
   321 lemma funspace_succ_replacement:
   323      "L(n) ==> 
   322      "L(n) ==> 
   324       strong_replacement(L, \<lambda>p z. \<exists>f[L]. \<exists>b[L]. \<exists>nb[L]. \<exists>cnbf[L]. 
   323       strong_replacement(L, \<lambda>p z. \<exists>f[L]. \<exists>b[L]. \<exists>nb[L]. \<exists>cnbf[L]. 
   325                 pair(L,f,b,p) & pair(L,n,b,nb) & is_cons(L,nb,f,cnbf) &
   324                 pair(L,f,b,p) & pair(L,n,b,nb) & is_cons(L,nb,f,cnbf) &
   365 
   364 
   366 
   365 
   367 subsubsection{*Separation for Order-Isomorphisms*}
   366 subsubsection{*Separation for Order-Isomorphisms*}
   368 
   367 
   369 lemma well_ord_iso_Reflects:
   368 lemma well_ord_iso_Reflects:
   370      "L_Reflects(?Cl, \<lambda>x. x\<in>A --> (\<exists>y[L]. \<exists>p[L]. 
   369   "REFLECTS[\<lambda>x. x\<in>A --> 
   371 		     fun_apply(L,f,x,y) & pair(L,y,x,p) & p \<in> r),
   370                 (\<exists>y[L]. \<exists>p[L]. fun_apply(L,f,x,y) & pair(L,y,x,p) & p \<in> r),
   372             \<lambda>i x. x\<in>A --> (\<exists>y \<in> Lset(i). \<exists>p \<in> Lset(i). 
   371         \<lambda>i x. x\<in>A --> (\<exists>y \<in> Lset(i). \<exists>p \<in> Lset(i). 
   373 		     fun_apply(**Lset(i),f,x,y) & pair(**Lset(i),y,x,p) & p \<in> r))"
   372                 fun_apply(**Lset(i),f,x,y) & pair(**Lset(i),y,x,p) & p \<in> r)]"
   374 by fast
   373 by (intro FOL_reflection function_reflection)
   375 
   374 
   376 lemma well_ord_iso_separation:
   375 lemma well_ord_iso_separation:
   377      "[| L(A); L(f); L(r) |] 
   376      "[| L(A); L(f); L(r) |] 
   378       ==> separation (L, \<lambda>x. x\<in>A --> (\<exists>y[L]. (\<exists>p[L]. 
   377       ==> separation (L, \<lambda>x. x\<in>A --> (\<exists>y[L]. (\<exists>p[L]. 
   379 		     fun_apply(L,f,x,y) & pair(L,y,x,p) & p \<in> r)))"
   378 		     fun_apply(L,f,x,y) & pair(L,y,x,p) & p \<in> r)))"