195 "is_nat_case(M, a, is_b, k, z) == |
194 "is_nat_case(M, a, is_b, k, z) == |
196 (empty(M,k) --> z=a) & |
195 (empty(M,k) --> z=a) & |
197 (\<forall>m[M]. successor(M,m,k) --> is_b(m,z)) & |
196 (\<forall>m[M]. successor(M,m,k) --> is_b(m,z)) & |
198 (is_quasinat(M,k) | empty(M,z))" |
197 (is_quasinat(M,k) | empty(M,z))" |
199 |
198 |
200 relativize1 :: "[i=>o, [i,i]=>o, i=>i] => o" |
199 relation1 :: "[i=>o, [i,i]=>o, i=>i] => o" |
201 "relativize1(M,is_f,f) == \<forall>x[M]. \<forall>y[M]. is_f(x,y) <-> y = f(x)" |
200 "relation1(M,is_f,f) == \<forall>x[M]. \<forall>y[M]. is_f(x,y) <-> y = f(x)" |
202 |
201 |
203 Relativize1 :: "[i=>o, i, [i,i]=>o, i=>i] => o" |
202 Relation1 :: "[i=>o, i, [i,i]=>o, i=>i] => o" |
204 --{*as above, but typed*} |
203 --{*as above, but typed*} |
205 "Relativize1(M,A,is_f,f) == |
204 "Relation1(M,A,is_f,f) == |
206 \<forall>x[M]. \<forall>y[M]. x\<in>A --> is_f(x,y) <-> y = f(x)" |
205 \<forall>x[M]. \<forall>y[M]. x\<in>A --> is_f(x,y) <-> y = f(x)" |
207 |
206 |
208 relativize2 :: "[i=>o, [i,i,i]=>o, [i,i]=>i] => o" |
207 relation2 :: "[i=>o, [i,i,i]=>o, [i,i]=>i] => o" |
209 "relativize2(M,is_f,f) == \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. is_f(x,y,z) <-> z = f(x,y)" |
208 "relation2(M,is_f,f) == \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. is_f(x,y,z) <-> z = f(x,y)" |
210 |
209 |
211 Relativize2 :: "[i=>o, i, i, [i,i,i]=>o, [i,i]=>i] => o" |
210 Relation2 :: "[i=>o, i, i, [i,i,i]=>o, [i,i]=>i] => o" |
212 "Relativize2(M,A,B,is_f,f) == |
211 "Relation2(M,A,B,is_f,f) == |
213 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. x\<in>A --> y\<in>B --> is_f(x,y,z) <-> z = f(x,y)" |
212 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. x\<in>A --> y\<in>B --> is_f(x,y,z) <-> z = f(x,y)" |
214 |
213 |
215 relativize3 :: "[i=>o, [i,i,i,i]=>o, [i,i,i]=>i] => o" |
214 relation3 :: "[i=>o, [i,i,i,i]=>o, [i,i,i]=>i] => o" |
216 "relativize3(M,is_f,f) == |
215 "relation3(M,is_f,f) == |
217 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>u[M]. is_f(x,y,z,u) <-> u = f(x,y,z)" |
216 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>u[M]. is_f(x,y,z,u) <-> u = f(x,y,z)" |
218 |
217 |
219 Relativize3 :: "[i=>o, i, i, i, [i,i,i,i]=>o, [i,i,i]=>i] => o" |
218 Relation3 :: "[i=>o, i, i, i, [i,i,i,i]=>o, [i,i,i]=>i] => o" |
220 "Relativize3(M,A,B,C,is_f,f) == |
219 "Relation3(M,A,B,C,is_f,f) == |
221 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>u[M]. |
220 \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>u[M]. |
222 x\<in>A --> y\<in>B --> z\<in>C --> is_f(x,y,z,u) <-> u = f(x,y,z)" |
221 x\<in>A --> y\<in>B --> z\<in>C --> is_f(x,y,z,u) <-> u = f(x,y,z)" |
223 |
222 |
224 relativize4 :: "[i=>o, [i,i,i,i,i]=>o, [i,i,i,i]=>i] => o" |
223 relation4 :: "[i=>o, [i,i,i,i,i]=>o, [i,i,i,i]=>i] => o" |
225 "relativize4(M,is_f,f) == |
224 "relation4(M,is_f,f) == |
226 \<forall>u[M]. \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>a[M]. is_f(u,x,y,z,a) <-> a = f(u,x,y,z)" |
225 \<forall>u[M]. \<forall>x[M]. \<forall>y[M]. \<forall>z[M]. \<forall>a[M]. is_f(u,x,y,z,a) <-> a = f(u,x,y,z)" |
227 |
226 |
228 |
227 |
229 text{*Useful when absoluteness reasoning has replaced the predicates by terms*} |
228 text{*Useful when absoluteness reasoning has replaced the predicates by terms*} |
230 lemma triv_Relativize1: |
229 lemma triv_Relation1: |
231 "Relativize1(M, A, \<lambda>x y. y = f(x), f)" |
230 "Relation1(M, A, \<lambda>x y. y = f(x), f)" |
232 by (simp add: Relativize1_def) |
231 by (simp add: Relation1_def) |
233 |
232 |
234 lemma triv_Relativize2: |
233 lemma triv_Relation2: |
235 "Relativize2(M, A, B, \<lambda>x y a. a = f(x,y), f)" |
234 "Relation2(M, A, B, \<lambda>x y a. a = f(x,y), f)" |
236 by (simp add: Relativize2_def) |
235 by (simp add: Relation2_def) |
237 |
236 |
238 |
237 |
239 subsection {*The relativized ZF axioms*} |
238 subsection {*The relativized ZF axioms*} |
240 constdefs |
239 constdefs |
241 |
240 |
785 lemma (in M_trivial) quasinat_abs [simp]: |
784 lemma (in M_trivial) quasinat_abs [simp]: |
786 "M(z) ==> is_quasinat(M,z) <-> quasinat(z)" |
785 "M(z) ==> is_quasinat(M,z) <-> quasinat(z)" |
787 by (auto simp add: is_quasinat_def quasinat_def) |
786 by (auto simp add: is_quasinat_def quasinat_def) |
788 |
787 |
789 lemma (in M_trivial) nat_case_abs [simp]: |
788 lemma (in M_trivial) nat_case_abs [simp]: |
790 "[| relativize1(M,is_b,b); M(k); M(z) |] |
789 "[| relation1(M,is_b,b); M(k); M(z) |] |
791 ==> is_nat_case(M,a,is_b,k,z) <-> z = nat_case(a,b,k)" |
790 ==> is_nat_case(M,a,is_b,k,z) <-> z = nat_case(a,b,k)" |
792 apply (case_tac "quasinat(k)") |
791 apply (case_tac "quasinat(k)") |
793 prefer 2 |
792 prefer 2 |
794 apply (simp add: is_nat_case_def non_nat_case) |
793 apply (simp add: is_nat_case_def non_nat_case) |
795 apply (force simp add: quasinat_def) |
794 apply (force simp add: quasinat_def) |
796 apply (simp add: quasinat_def is_nat_case_def) |
795 apply (simp add: quasinat_def is_nat_case_def) |
797 apply (elim disjE exE) |
796 apply (elim disjE exE) |
798 apply (simp_all add: relativize1_def) |
797 apply (simp_all add: relation1_def) |
799 done |
798 done |
800 |
799 |
801 (*NOT for the simplifier. The assumption M(z') is apparently necessary, but |
800 (*NOT for the simplifier. The assumption M(z') is apparently necessary, but |
802 causes the error "Failed congruence proof!" It may be better to replace |
801 causes the error "Failed congruence proof!" It may be better to replace |
803 is_nat_case by nat_case before attempting congruence reasoning.*) |
802 is_nat_case by nat_case before attempting congruence reasoning.*) |
927 and funspace_succ_replacement: |
926 and funspace_succ_replacement: |
928 "M(n) ==> |
927 "M(n) ==> |
929 strong_replacement(M, \<lambda>p z. \<exists>f[M]. \<exists>b[M]. \<exists>nb[M]. \<exists>cnbf[M]. |
928 strong_replacement(M, \<lambda>p z. \<exists>f[M]. \<exists>b[M]. \<exists>nb[M]. \<exists>cnbf[M]. |
930 pair(M,f,b,p) & pair(M,n,b,nb) & is_cons(M,nb,f,cnbf) & |
929 pair(M,f,b,p) & pair(M,n,b,nb) & is_cons(M,nb,f,cnbf) & |
931 upair(M,cnbf,cnbf,z))" |
930 upair(M,cnbf,cnbf,z))" |
932 and well_ord_iso_separation: |
|
933 "[| M(A); M(f); M(r) |] |
|
934 ==> separation (M, \<lambda>x. x\<in>A --> (\<exists>y[M]. (\<exists>p[M]. |
|
935 fun_apply(M,f,x,y) & pair(M,y,x,p) & p \<in> r)))" |
|
936 and obase_separation: |
|
937 --{*part of the order type formalization*} |
|
938 "[| M(A); M(r) |] |
|
939 ==> separation(M, \<lambda>a. \<exists>x[M]. \<exists>g[M]. \<exists>mx[M]. \<exists>par[M]. |
|
940 ordinal(M,x) & membership(M,x,mx) & pred_set(M,A,a,r,par) & |
|
941 order_isomorphism(M,par,r,x,mx,g))" |
|
942 and obase_equals_separation: |
|
943 "[| M(A); M(r) |] |
|
944 ==> separation (M, \<lambda>x. x\<in>A --> ~(\<exists>y[M]. \<exists>g[M]. |
|
945 ordinal(M,y) & (\<exists>my[M]. \<exists>pxr[M]. |
|
946 membership(M,y,my) & pred_set(M,A,x,r,pxr) & |
|
947 order_isomorphism(M,pxr,r,y,my,g))))" |
|
948 and omap_replacement: |
|
949 "[| M(A); M(r) |] |
|
950 ==> strong_replacement(M, |
|
951 \<lambda>a z. \<exists>x[M]. \<exists>g[M]. \<exists>mx[M]. \<exists>par[M]. |
|
952 ordinal(M,x) & pair(M,a,x,z) & membership(M,x,mx) & |
|
953 pred_set(M,A,a,r,par) & order_isomorphism(M,par,r,x,mx,g))" |
|
954 and is_recfun_separation: |
931 and is_recfun_separation: |
955 --{*for well-founded recursion*} |
932 --{*for well-founded recursion: used to prove @{text is_recfun_equal}*} |
956 "[| M(r); M(f); M(g); M(a); M(b) |] |
933 "[| M(r); M(f); M(g); M(a); M(b) |] |
957 ==> separation(M, |
934 ==> separation(M, |
958 \<lambda>x. \<exists>xa[M]. \<exists>xb[M]. |
935 \<lambda>x. \<exists>xa[M]. \<exists>xb[M]. |
959 pair(M,x,a,xa) & xa \<in> r & pair(M,x,b,xb) & xb \<in> r & |
936 pair(M,x,a,xa) & xa \<in> r & pair(M,x,b,xb) & xb \<in> r & |
960 (\<exists>fx[M]. \<exists>gx[M]. fun_apply(M,f,x,fx) & fun_apply(M,g,x,gx) & |
937 (\<exists>fx[M]. \<exists>gx[M]. fun_apply(M,f,x,fx) & fun_apply(M,g,x,gx) & |
1488 lemma (in M_trivial) quasilist_abs [simp]: |
1465 lemma (in M_trivial) quasilist_abs [simp]: |
1489 "M(z) ==> is_quasilist(M,z) <-> quasilist(z)" |
1466 "M(z) ==> is_quasilist(M,z) <-> quasilist(z)" |
1490 by (auto simp add: is_quasilist_def quasilist_def) |
1467 by (auto simp add: is_quasilist_def quasilist_def) |
1491 |
1468 |
1492 lemma (in M_trivial) list_case_abs [simp]: |
1469 lemma (in M_trivial) list_case_abs [simp]: |
1493 "[| relativize2(M,is_b,b); M(k); M(z) |] |
1470 "[| relation2(M,is_b,b); M(k); M(z) |] |
1494 ==> is_list_case(M,a,is_b,k,z) <-> z = list_case'(a,b,k)" |
1471 ==> is_list_case(M,a,is_b,k,z) <-> z = list_case'(a,b,k)" |
1495 apply (case_tac "quasilist(k)") |
1472 apply (case_tac "quasilist(k)") |
1496 prefer 2 |
1473 prefer 2 |
1497 apply (simp add: is_list_case_def non_list_case) |
1474 apply (simp add: is_list_case_def non_list_case) |
1498 apply (force simp add: quasilist_def) |
1475 apply (force simp add: quasilist_def) |
1499 apply (simp add: quasilist_def is_list_case_def) |
1476 apply (simp add: quasilist_def is_list_case_def) |
1500 apply (elim disjE exE) |
1477 apply (elim disjE exE) |
1501 apply (simp_all add: relativize2_def) |
1478 apply (simp_all add: relation2_def) |
1502 done |
1479 done |
1503 |
1480 |
1504 |
1481 |
1505 subsubsection{*The Modified Operators @{term hd'} and @{term tl'}*} |
1482 subsubsection{*The Modified Operators @{term hd'} and @{term tl'}*} |
1506 |
1483 |