|
1 (* Title: ZF/Constructible/Separation.thy |
|
2 ID: $Id$ |
|
3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
|
4 Copyright 2002 University of Cambridge |
|
5 *) |
|
6 |
1 header{*Early Instances of Separation and Strong Replacement*} |
7 header{*Early Instances of Separation and Strong Replacement*} |
2 |
8 |
3 theory Separation = L_axioms + WF_absolute: |
9 theory Separation = L_axioms + WF_absolute: |
4 |
10 |
5 text{*This theory proves all instances needed for locale @{text "M_axioms"}*} |
11 text{*This theory proves all instances needed for locale @{text "M_axioms"}*} |
67 apply (rule_tac [2] i=1 and j=0 and env="[y,x,A]" in mem_iff_sats) |
73 apply (rule_tac [2] i=1 and j=0 and env="[y,x,A]" in mem_iff_sats) |
68 apply (rule_tac i=0 and j=2 in mem_iff_sats) |
74 apply (rule_tac i=0 and j=2 in mem_iff_sats) |
69 apply (simp_all add: succ_Un_distrib [symmetric]) |
75 apply (simp_all add: succ_Un_distrib [symmetric]) |
70 done |
76 done |
71 |
77 |
|
78 subsection{*Separation for Set Difference*} |
|
79 |
|
80 lemma Diff_Reflects: |
|
81 "REFLECTS[\<lambda>x. x \<notin> B, \<lambda>i x. x \<notin> B]" |
|
82 by (intro FOL_reflections) |
|
83 |
|
84 lemma Diff_separation: |
|
85 "L(B) ==> separation(L, \<lambda>x. x \<notin> B)" |
|
86 apply (rule separation_CollectI) |
|
87 apply (rule_tac A="{B,z}" in subset_LsetE, blast ) |
|
88 apply (rule ReflectsE [OF Diff_Reflects], assumption) |
|
89 apply (drule subset_Lset_ltD, assumption) |
|
90 apply (erule reflection_imp_L_separation) |
|
91 apply (simp_all add: lt_Ord2, clarify) |
|
92 apply (rule DPow_LsetI) |
|
93 apply (rule not_iff_sats) |
|
94 apply (rule_tac env="[x,B]" in mem_iff_sats) |
|
95 apply (rule sep_rules | simp)+ |
|
96 done |
|
97 |
72 subsection{*Separation for Cartesian Product*} |
98 subsection{*Separation for Cartesian Product*} |
73 |
99 |
74 lemma cartprod_Reflects: |
100 lemma cartprod_Reflects: |
75 "REFLECTS[\<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)), |
101 "REFLECTS[\<lambda>z. \<exists>x[L]. x\<in>A & (\<exists>y[L]. y\<in>B & pair(L,x,y,z)), |
76 \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). y\<in>B & |
102 \<lambda>i z. \<exists>x\<in>Lset(i). x\<in>A & (\<exists>y\<in>Lset(i). y\<in>B & |
446 |
472 |
447 subsection{*Instantiating the locale @{text M_axioms}*} |
473 subsection{*Instantiating the locale @{text M_axioms}*} |
448 text{*Separation (and Strong Replacement) for basic set-theoretic constructions |
474 text{*Separation (and Strong Replacement) for basic set-theoretic constructions |
449 such as intersection, Cartesian Product and image.*} |
475 such as intersection, Cartesian Product and image.*} |
450 |
476 |
|
477 lemma M_axioms_axioms_L: "M_axioms_axioms(L)" |
|
478 apply (rule M_axioms_axioms.intro) |
|
479 apply (assumption | rule |
|
480 Inter_separation Diff_separation cartprod_separation image_separation |
|
481 converse_separation restrict_separation |
|
482 comp_separation pred_separation Memrel_separation |
|
483 funspace_succ_replacement well_ord_iso_separation |
|
484 obase_separation obase_equals_separation |
|
485 omap_replacement is_recfun_separation)+ |
|
486 done |
|
487 |
451 theorem M_axioms_L: "PROP M_axioms(L)" |
488 theorem M_axioms_L: "PROP M_axioms(L)" |
452 apply (rule M_axioms.intro) |
489 by (rule M_axioms.intro [OF M_triv_axioms_L M_axioms_axioms_L]) |
453 apply (rule M_triv_axioms_L) |
490 |
454 apply (rule M_axioms_axioms.intro) |
|
455 apply (assumption | rule |
|
456 Inter_separation cartprod_separation image_separation |
|
457 converse_separation restrict_separation |
|
458 comp_separation pred_separation Memrel_separation |
|
459 funspace_succ_replacement well_ord_iso_separation |
|
460 obase_separation obase_equals_separation |
|
461 omap_replacement is_recfun_separation)+ |
|
462 done |
|
463 |
491 |
464 lemmas cartprod_iff = M_axioms.cartprod_iff [OF M_axioms_L] |
492 lemmas cartprod_iff = M_axioms.cartprod_iff [OF M_axioms_L] |
465 and cartprod_closed = M_axioms.cartprod_closed [OF M_axioms_L] |
493 and cartprod_closed = M_axioms.cartprod_closed [OF M_axioms_L] |
466 and sum_closed = M_axioms.sum_closed [OF M_axioms_L] |
494 and sum_closed = M_axioms.sum_closed [OF M_axioms_L] |
467 and M_converse_iff = M_axioms.M_converse_iff [OF M_axioms_L] |
495 and M_converse_iff = M_axioms.M_converse_iff [OF M_axioms_L] |