410 membership :: "[i=>o,i,i] => o" --{*membership relation*} |
410 membership :: "[i=>o,i,i] => o" --{*membership relation*} |
411 "membership(M,A,r) == |
411 "membership(M,A,r) == |
412 \<forall>p[M]. p \<in> r <-> (\<exists>x[M]. x\<in>A & (\<exists>y[M]. y\<in>A & x\<in>y & pair(M,x,y,p)))" |
412 \<forall>p[M]. p \<in> r <-> (\<exists>x[M]. x\<in>A & (\<exists>y[M]. y\<in>A & x\<in>y & pair(M,x,y,p)))" |
413 |
413 |
414 |
414 |
415 subsection{*Absoluteness for a transitive class model*} |
415 subsection{*Introducing a Transitive Class Model*} |
416 |
416 |
417 text{*The class M is assumed to be transitive and to satisfy some |
417 text{*The class M is assumed to be transitive and to satisfy some |
418 relativized ZF axioms*} |
418 relativized ZF axioms*} |
419 locale (open) M_triv_axioms = |
419 locale (open) M_triv_axioms = |
420 fixes M |
420 fixes M |
424 and Union_ax: "Union_ax(M)" |
424 and Union_ax: "Union_ax(M)" |
425 and power_ax: "power_ax(M)" |
425 and power_ax: "power_ax(M)" |
426 and replacement: "replacement(M,P)" |
426 and replacement: "replacement(M,P)" |
427 and M_nat [iff]: "M(nat)" (*i.e. the axiom of infinity*) |
427 and M_nat [iff]: "M(nat)" (*i.e. the axiom of infinity*) |
428 |
428 |
429 lemma (in M_triv_axioms) ball_abs [simp]: |
|
430 "M(A) ==> (\<forall>x\<in>A. M(x) --> P(x)) <-> (\<forall>x\<in>A. P(x))" |
|
431 by (blast intro: transM) |
|
432 |
|
433 lemma (in M_triv_axioms) rall_abs [simp]: |
429 lemma (in M_triv_axioms) rall_abs [simp]: |
434 "M(A) ==> (\<forall>x[M]. x\<in>A --> P(x)) <-> (\<forall>x\<in>A. P(x))" |
430 "M(A) ==> (\<forall>x[M]. x\<in>A --> P(x)) <-> (\<forall>x\<in>A. P(x))" |
435 by (blast intro: transM) |
|
436 |
|
437 lemma (in M_triv_axioms) bex_abs [simp]: |
|
438 "M(A) ==> (\<exists>x\<in>A. M(x) & P(x)) <-> (\<exists>x\<in>A. P(x))" |
|
439 by (blast intro: transM) |
431 by (blast intro: transM) |
440 |
432 |
441 lemma (in M_triv_axioms) rex_abs [simp]: |
433 lemma (in M_triv_axioms) rex_abs [simp]: |
442 "M(A) ==> (\<exists>x[M]. x\<in>A & P(x)) <-> (\<exists>x\<in>A. P(x))" |
434 "M(A) ==> (\<exists>x[M]. x\<in>A & P(x)) <-> (\<exists>x\<in>A. P(x))" |
443 by (blast intro: transM) |
435 by (blast intro: transM) |
450 text{*Simplifies proofs of equalities when there's an iff-equality |
442 text{*Simplifies proofs of equalities when there's an iff-equality |
451 available for rewriting, universally quantified over M. *} |
443 available for rewriting, universally quantified over M. *} |
452 lemma (in M_triv_axioms) M_equalityI: |
444 lemma (in M_triv_axioms) M_equalityI: |
453 "[| !!x. M(x) ==> x\<in>A <-> x\<in>B; M(A); M(B) |] ==> A=B" |
445 "[| !!x. M(x) ==> x\<in>A <-> x\<in>B; M(A); M(B) |] ==> A=B" |
454 by (blast intro!: equalityI dest: transM) |
446 by (blast intro!: equalityI dest: transM) |
|
447 |
|
448 |
|
449 subsubsection{*Trivial Absoluteness Proofs: Empty Set, Pairs, etc.*} |
455 |
450 |
456 lemma (in M_triv_axioms) empty_abs [simp]: |
451 lemma (in M_triv_axioms) empty_abs [simp]: |
457 "M(z) ==> empty(M,z) <-> z=0" |
452 "M(z) ==> empty(M,z) <-> z=0" |
458 apply (simp add: empty_def) |
453 apply (simp add: empty_def) |
459 apply (blast intro: transM) |
454 apply (blast intro: transM) |
503 apply (rule iffI) |
498 apply (rule iffI) |
504 apply (blast intro!: equalityI intro: transM dest!: rspec) |
499 apply (blast intro!: equalityI intro: transM dest!: rspec) |
505 apply (blast dest: transM) |
500 apply (blast dest: transM) |
506 done |
501 done |
507 |
502 |
|
503 subsubsection{*Absoluteness for Unions and Intersections*} |
|
504 |
508 lemma (in M_triv_axioms) union_abs [simp]: |
505 lemma (in M_triv_axioms) union_abs [simp]: |
509 "[| M(a); M(b); M(z) |] ==> union(M,a,b,z) <-> z = a Un b" |
506 "[| M(a); M(b); M(z) |] ==> union(M,a,b,z) <-> z = a Un b" |
510 apply (simp add: union_def) |
507 apply (simp add: union_def) |
511 apply (blast intro: transM) |
508 apply (blast intro: transM) |
512 done |
509 done |
552 lemma (in M_triv_axioms) succ_in_M_iff [iff]: |
549 lemma (in M_triv_axioms) succ_in_M_iff [iff]: |
553 "M(succ(a)) <-> M(a)" |
550 "M(succ(a)) <-> M(a)" |
554 apply (simp add: succ_def) |
551 apply (simp add: succ_def) |
555 apply (blast intro: transM) |
552 apply (blast intro: transM) |
556 done |
553 done |
|
554 |
|
555 subsubsection{*Absoluteness for Separation and Replacement*} |
557 |
556 |
558 lemma (in M_triv_axioms) separation_closed [intro,simp]: |
557 lemma (in M_triv_axioms) separation_closed [intro,simp]: |
559 "[| separation(M,P); M(A) |] ==> M(Collect(A,P))" |
558 "[| separation(M,P); M(A) |] ==> M(Collect(A,P))" |
560 apply (insert separation, simp add: separation_def) |
559 apply (insert separation, simp add: separation_def) |
561 apply (drule rspec, assumption, clarify) |
560 apply (drule rspec, assumption, clarify) |
619 apply (simp add: RepFun_def) |
618 apply (simp add: RepFun_def) |
620 apply (frule strong_replacement_closed, assumption) |
619 apply (frule strong_replacement_closed, assumption) |
621 apply (auto dest: transM simp add: Replace_conj_eq univalent_def) |
620 apply (auto dest: transM simp add: Replace_conj_eq univalent_def) |
622 done |
621 done |
623 |
622 |
624 lemma (in M_triv_axioms) lam_closed [intro,simp]: |
623 subsubsection {*Absoluteness for @{term Lambda}*} |
|
624 |
|
625 constdefs |
|
626 is_lambda :: "[i=>o, i, [i,i]=>o, i] => o" |
|
627 "is_lambda(M, A, is_b, z) == |
|
628 \<forall>p[M]. p \<in> z <-> |
|
629 (\<exists>u[M]. \<exists>v[M]. u\<in>A & pair(M,u,v,p) & is_b(u,v))" |
|
630 |
|
631 lemma (in M_triv_axioms) lam_closed: |
625 "[| strong_replacement(M, \<lambda>x y. y = <x,b(x)>); M(A); \<forall>x\<in>A. M(b(x)) |] |
632 "[| strong_replacement(M, \<lambda>x y. y = <x,b(x)>); M(A); \<forall>x\<in>A. M(b(x)) |] |
626 ==> M(\<lambda>x\<in>A. b(x))" |
633 ==> M(\<lambda>x\<in>A. b(x))" |
627 by (simp add: lam_def, blast intro: RepFun_closed dest: transM) |
634 by (simp add: lam_def, blast intro: RepFun_closed dest: transM) |
|
635 |
|
636 text{*Better than @{text lam_closed}: has the formula @{term "x\<in>A"}*} |
|
637 lemma (in M_triv_axioms) lam_closed2: |
|
638 "[|strong_replacement(M, \<lambda>x y. x\<in>A & y = \<langle>x, b(x)\<rangle>); |
|
639 M(A); \<forall>m[M]. m\<in>A --> M(b(m))|] ==> M(Lambda(A,b))" |
|
640 apply (simp add: lam_def) |
|
641 apply (blast intro: RepFun_closed2 dest: transM) |
|
642 done |
|
643 |
|
644 lemma (in M_triv_axioms) lambda_abs2 [simp]: |
|
645 "[| strong_replacement(M, \<lambda>x y. x\<in>A & y = \<langle>x, b(x)\<rangle>); |
|
646 relativize1(M,is_b,b); M(A); \<forall>m[M]. m\<in>A --> M(b(m)); M(z) |] |
|
647 ==> is_lambda(M,A,is_b,z) <-> z = Lambda(A,b)" |
|
648 apply (simp add: relativize1_def is_lambda_def) |
|
649 apply (rule iffI) |
|
650 prefer 2 apply (simp add: lam_def) |
|
651 apply (rule M_equalityI) |
|
652 apply (simp add: lam_def) |
|
653 apply (simp add: lam_closed2)+ |
|
654 done |
628 |
655 |
629 lemma (in M_triv_axioms) image_abs [simp]: |
656 lemma (in M_triv_axioms) image_abs [simp]: |
630 "[| M(r); M(A); M(z) |] ==> image(M,r,A,z) <-> z = r``A" |
657 "[| M(r); M(A); M(z) |] ==> image(M,r,A,z) <-> z = r``A" |
631 apply (simp add: image_def) |
658 apply (simp add: image_def) |
632 apply (rule iffI) |
659 apply (rule iffI) |
645 lemma (in M_triv_axioms) powerset_imp_subset_Pow: |
672 lemma (in M_triv_axioms) powerset_imp_subset_Pow: |
646 "[| powerset(M,x,y); M(y) |] ==> y <= Pow(x)" |
673 "[| powerset(M,x,y); M(y) |] ==> y <= Pow(x)" |
647 apply (simp add: powerset_def) |
674 apply (simp add: powerset_def) |
648 apply (blast dest: transM) |
675 apply (blast dest: transM) |
649 done |
676 done |
|
677 |
|
678 subsubsection{*Absoluteness for the Natural Numbers*} |
650 |
679 |
651 lemma (in M_triv_axioms) nat_into_M [intro]: |
680 lemma (in M_triv_axioms) nat_into_M [intro]: |
652 "n \<in> nat ==> M(n)" |
681 "n \<in> nat ==> M(n)" |
653 by (induct n rule: nat_induct, simp_all) |
682 by (induct n rule: nat_induct, simp_all) |
654 |
683 |
691 lemma (in M_triv_axioms) Inr_in_M_iff [iff]: |
720 lemma (in M_triv_axioms) Inr_in_M_iff [iff]: |
692 "M(Inr(a)) <-> M(a)" |
721 "M(Inr(a)) <-> M(a)" |
693 by (simp add: Inr_def) |
722 by (simp add: Inr_def) |
694 |
723 |
695 |
724 |
696 subsection{*Absoluteness for ordinals*} |
725 subsection {*Absoluteness for Booleans*} |
|
726 |
|
727 lemma (in M_triv_axioms) bool_of_o_closed: |
|
728 "M(bool_of_o(P))" |
|
729 by (simp add: bool_of_o_def) |
|
730 |
|
731 lemma (in M_triv_axioms) and_closed: |
|
732 "[| M(p); M(q) |] ==> M(p and q)" |
|
733 by (simp add: and_def cond_def) |
|
734 |
|
735 lemma (in M_triv_axioms) or_closed: |
|
736 "[| M(p); M(q) |] ==> M(p or q)" |
|
737 by (simp add: or_def cond_def) |
|
738 |
|
739 lemma (in M_triv_axioms) not_closed: |
|
740 "M(p) ==> M(not(p))" |
|
741 by (simp add: Bool.not_def cond_def) |
|
742 |
|
743 |
|
744 subsection{*Absoluteness for Ordinals*} |
697 text{*These results constitute Theorem IV 5.1 of Kunen (page 126).*} |
745 text{*These results constitute Theorem IV 5.1 of Kunen (page 126).*} |
698 |
746 |
699 lemma (in M_triv_axioms) lt_closed: |
747 lemma (in M_triv_axioms) lt_closed: |
700 "[| j<i; M(i) |] ==> M(j)" |
748 "[| j<i; M(i) |] ==> M(j)" |
701 by (blast dest: ltD intro: transM) |
749 by (blast dest: ltD intro: transM) |