9 |
9 |
10 |
10 |
11 subsection{*The lfp of a continuous function can be expressed as a union*} |
11 subsection{*The lfp of a continuous function can be expressed as a union*} |
12 |
12 |
13 definition |
13 definition |
14 directed :: "i=>o" |
14 directed :: "i=>o" where |
15 "directed(A) == A\<noteq>0 & (\<forall>x\<in>A. \<forall>y\<in>A. x \<union> y \<in> A)" |
15 "directed(A) == A\<noteq>0 & (\<forall>x\<in>A. \<forall>y\<in>A. x \<union> y \<in> A)" |
16 |
16 |
17 contin :: "(i=>i) => o" |
17 definition |
|
18 contin :: "(i=>i) => o" where |
18 "contin(h) == (\<forall>A. directed(A) --> h(\<Union>A) = (\<Union>X\<in>A. h(X)))" |
19 "contin(h) == (\<forall>A. directed(A) --> h(\<Union>A) = (\<Union>X\<in>A. h(X)))" |
19 |
20 |
20 lemma bnd_mono_iterates_subset: "[|bnd_mono(D, h); n \<in> nat|] ==> h^n (0) <= D" |
21 lemma bnd_mono_iterates_subset: "[|bnd_mono(D, h); n \<in> nat|] ==> h^n (0) <= D" |
21 apply (induct_tac n) |
22 apply (induct_tac n) |
22 apply (simp_all add: bnd_mono_def, blast) |
23 apply (simp_all add: bnd_mono_def, blast) |
112 |
113 |
113 |
114 |
114 subsection {*Absoluteness for "Iterates"*} |
115 subsection {*Absoluteness for "Iterates"*} |
115 |
116 |
116 definition |
117 definition |
117 |
118 iterates_MH :: "[i=>o, [i,i]=>o, i, i, i, i] => o" where |
118 iterates_MH :: "[i=>o, [i,i]=>o, i, i, i, i] => o" |
|
119 "iterates_MH(M,isF,v,n,g,z) == |
119 "iterates_MH(M,isF,v,n,g,z) == |
120 is_nat_case(M, v, \<lambda>m u. \<exists>gm[M]. fun_apply(M,g,m,gm) & isF(gm,u), |
120 is_nat_case(M, v, \<lambda>m u. \<exists>gm[M]. fun_apply(M,g,m,gm) & isF(gm,u), |
121 n, z)" |
121 n, z)" |
122 |
122 |
123 is_iterates :: "[i=>o, [i,i]=>o, i, i, i] => o" |
123 definition |
|
124 is_iterates :: "[i=>o, [i,i]=>o, i, i, i] => o" where |
124 "is_iterates(M,isF,v,n,Z) == |
125 "is_iterates(M,isF,v,n,Z) == |
125 \<exists>sn[M]. \<exists>msn[M]. successor(M,n,sn) & membership(M,sn,msn) & |
126 \<exists>sn[M]. \<exists>msn[M]. successor(M,n,sn) & membership(M,sn,msn) & |
126 is_wfrec(M, iterates_MH(M,isF,v), msn, n, Z)" |
127 is_wfrec(M, iterates_MH(M,isF,v), msn, n, Z)" |
127 |
128 |
128 iterates_replacement :: "[i=>o, [i,i]=>o, i] => o" |
129 definition |
|
130 iterates_replacement :: "[i=>o, [i,i]=>o, i] => o" where |
129 "iterates_replacement(M,isF,v) == |
131 "iterates_replacement(M,isF,v) == |
130 \<forall>n[M]. n\<in>nat --> |
132 \<forall>n[M]. n\<in>nat --> |
131 wfrec_replacement(M, iterates_MH(M,isF,v), Memrel(succ(n)))" |
133 wfrec_replacement(M, iterates_MH(M,isF,v), Memrel(succ(n)))" |
132 |
134 |
133 lemma (in M_basic) iterates_MH_abs: |
135 lemma (in M_basic) iterates_MH_abs: |
206 "list(A) = (\<Union>n\<in>nat. (\<lambda>X. {0} + A*X) ^ n (0))" |
208 "list(A) = (\<Union>n\<in>nat. (\<lambda>X. {0} + A*X) ^ n (0))" |
207 by (simp add: list_eq_lfp2 lfp_eq_Union list_fun_bnd_mono list_fun_contin) |
209 by (simp add: list_eq_lfp2 lfp_eq_Union list_fun_bnd_mono list_fun_contin) |
208 |
210 |
209 |
211 |
210 definition |
212 definition |
211 is_list_functor :: "[i=>o,i,i,i] => o" |
213 is_list_functor :: "[i=>o,i,i,i] => o" where |
212 "is_list_functor(M,A,X,Z) == |
214 "is_list_functor(M,A,X,Z) == |
213 \<exists>n1[M]. \<exists>AX[M]. |
215 \<exists>n1[M]. \<exists>AX[M]. |
214 number1(M,n1) & cartprod(M,A,X,AX) & is_sum(M,n1,AX,Z)" |
216 number1(M,n1) & cartprod(M,A,X,AX) & is_sum(M,n1,AX,Z)" |
215 |
217 |
216 lemma (in M_basic) list_functor_abs [simp]: |
218 lemma (in M_basic) list_functor_abs [simp]: |
259 by (simp add: formula_eq_lfp2 lfp_eq_Union formula_fun_bnd_mono |
261 by (simp add: formula_eq_lfp2 lfp_eq_Union formula_fun_bnd_mono |
260 formula_fun_contin) |
262 formula_fun_contin) |
261 |
263 |
262 |
264 |
263 definition |
265 definition |
264 is_formula_functor :: "[i=>o,i,i] => o" |
266 is_formula_functor :: "[i=>o,i,i] => o" where |
265 "is_formula_functor(M,X,Z) == |
267 "is_formula_functor(M,X,Z) == |
266 \<exists>nat'[M]. \<exists>natnat[M]. \<exists>natnatsum[M]. \<exists>XX[M]. \<exists>X3[M]. |
268 \<exists>nat'[M]. \<exists>natnat[M]. \<exists>natnatsum[M]. \<exists>XX[M]. \<exists>X3[M]. |
267 omega(M,nat') & cartprod(M,nat',nat',natnat) & |
269 omega(M,nat') & cartprod(M,nat',nat',natnat) & |
268 is_sum(M,natnat,natnat,natnatsum) & |
270 is_sum(M,natnat,natnat,natnatsum) & |
269 cartprod(M,X,X,XX) & is_sum(M,XX,X,X3) & |
271 cartprod(M,X,X,XX) & is_sum(M,XX,X,X3) & |
338 apply (subst transrec) |
340 apply (subst transrec) |
339 apply (simp add: list_imp_list_N) |
341 apply (simp add: list_imp_list_N) |
340 done |
342 done |
341 |
343 |
342 definition |
344 definition |
343 is_list_N :: "[i=>o,i,i,i] => o" |
345 is_list_N :: "[i=>o,i,i,i] => o" where |
344 "is_list_N(M,A,n,Z) == |
346 "is_list_N(M,A,n,Z) == |
345 \<exists>zero[M]. empty(M,zero) & |
347 \<exists>zero[M]. empty(M,zero) & |
346 is_iterates(M, is_list_functor(M,A), zero, n, Z)" |
348 is_iterates(M, is_list_functor(M,A), zero, n, Z)" |
347 |
349 |
348 mem_list :: "[i=>o,i,i] => o" |
350 definition |
|
351 mem_list :: "[i=>o,i,i] => o" where |
349 "mem_list(M,A,l) == |
352 "mem_list(M,A,l) == |
350 \<exists>n[M]. \<exists>listn[M]. |
353 \<exists>n[M]. \<exists>listn[M]. |
351 finite_ordinal(M,n) & is_list_N(M,A,n,listn) & l \<in> listn" |
354 finite_ordinal(M,n) & is_list_N(M,A,n,listn) & l \<in> listn" |
352 |
355 |
353 is_list :: "[i=>o,i,i] => o" |
356 definition |
|
357 is_list :: "[i=>o,i,i] => o" where |
354 "is_list(M,A,Z) == \<forall>l[M]. l \<in> Z <-> mem_list(M,A,l)" |
358 "is_list(M,A,Z) == \<forall>l[M]. l \<in> Z <-> mem_list(M,A,l)" |
355 |
359 |
356 subsubsection{*Towards Absoluteness of @{term formula_rec}*} |
360 subsubsection{*Towards Absoluteness of @{term formula_rec}*} |
357 |
361 |
358 consts depth :: "i=>i" |
362 consts depth :: "i=>i" |
365 lemma depth_type [TC]: "p \<in> formula ==> depth(p) \<in> nat" |
369 lemma depth_type [TC]: "p \<in> formula ==> depth(p) \<in> nat" |
366 by (induct_tac p, simp_all) |
370 by (induct_tac p, simp_all) |
367 |
371 |
368 |
372 |
369 definition |
373 definition |
370 formula_N :: "i => i" |
374 formula_N :: "i => i" where |
371 "formula_N(n) == (\<lambda>X. ((nat*nat) + (nat*nat)) + (X*X + X)) ^ n (0)" |
375 "formula_N(n) == (\<lambda>X. ((nat*nat) + (nat*nat)) + (X*X + X)) ^ n (0)" |
372 |
376 |
373 lemma Member_in_formula_N [simp]: |
377 lemma Member_in_formula_N [simp]: |
374 "Member(x,y) \<in> formula_N(succ(n)) <-> x \<in> nat & y \<in> nat" |
378 "Member(x,y) \<in> formula_N(succ(n)) <-> x \<in> nat & y \<in> nat" |
375 by (simp add: formula_N_def Member_def) |
379 by (simp add: formula_N_def Member_def) |
440 apply (simp_all add: subset_Un_iff [THEN iffD1] subset_Un_iff2 [THEN iffD1] |
444 apply (simp_all add: subset_Un_iff [THEN iffD1] subset_Un_iff2 [THEN iffD1] |
441 le_imp_subset formula_N_mono) |
445 le_imp_subset formula_N_mono) |
442 done |
446 done |
443 |
447 |
444 definition |
448 definition |
445 is_formula_N :: "[i=>o,i,i] => o" |
449 is_formula_N :: "[i=>o,i,i] => o" where |
446 "is_formula_N(M,n,Z) == |
450 "is_formula_N(M,n,Z) == |
447 \<exists>zero[M]. empty(M,zero) & |
451 \<exists>zero[M]. empty(M,zero) & |
448 is_iterates(M, is_formula_functor(M), zero, n, Z)" |
452 is_iterates(M, is_formula_functor(M), zero, n, Z)" |
449 |
453 |
450 |
454 |
451 definition |
455 definition |
452 |
456 mem_formula :: "[i=>o,i] => o" where |
453 mem_formula :: "[i=>o,i] => o" |
|
454 "mem_formula(M,p) == |
457 "mem_formula(M,p) == |
455 \<exists>n[M]. \<exists>formn[M]. |
458 \<exists>n[M]. \<exists>formn[M]. |
456 finite_ordinal(M,n) & is_formula_N(M,n,formn) & p \<in> formn" |
459 finite_ordinal(M,n) & is_formula_N(M,n,formn) & p \<in> formn" |
457 |
460 |
458 is_formula :: "[i=>o,i] => o" |
461 definition |
|
462 is_formula :: "[i=>o,i] => o" where |
459 "is_formula(M,Z) == \<forall>p[M]. p \<in> Z <-> mem_formula(M,p)" |
463 "is_formula(M,Z) == \<forall>p[M]. p \<in> Z <-> mem_formula(M,p)" |
460 |
464 |
461 locale M_datatypes = M_trancl + |
465 locale M_datatypes = M_trancl + |
462 assumes list_replacement1: |
466 assumes list_replacement1: |
463 "M(A) ==> iterates_replacement(M, is_list_functor(M,A), 0)" |
467 "M(A) ==> iterates_replacement(M, is_list_functor(M,A), 0)" |
583 apply (simp add: nat_rec_0) |
587 apply (simp add: nat_rec_0) |
584 apply (simp add: nat_rec_succ) |
588 apply (simp add: nat_rec_succ) |
585 done |
589 done |
586 |
590 |
587 definition |
591 definition |
588 is_eclose_n :: "[i=>o,i,i,i] => o" |
592 is_eclose_n :: "[i=>o,i,i,i] => o" where |
589 "is_eclose_n(M,A,n,Z) == is_iterates(M, big_union(M), A, n, Z)" |
593 "is_eclose_n(M,A,n,Z) == is_iterates(M, big_union(M), A, n, Z)" |
590 |
594 |
591 mem_eclose :: "[i=>o,i,i] => o" |
595 definition |
|
596 mem_eclose :: "[i=>o,i,i] => o" where |
592 "mem_eclose(M,A,l) == |
597 "mem_eclose(M,A,l) == |
593 \<exists>n[M]. \<exists>eclosen[M]. |
598 \<exists>n[M]. \<exists>eclosen[M]. |
594 finite_ordinal(M,n) & is_eclose_n(M,A,n,eclosen) & l \<in> eclosen" |
599 finite_ordinal(M,n) & is_eclose_n(M,A,n,eclosen) & l \<in> eclosen" |
595 |
600 |
596 is_eclose :: "[i=>o,i,i] => o" |
601 definition |
|
602 is_eclose :: "[i=>o,i,i] => o" where |
597 "is_eclose(M,A,Z) == \<forall>u[M]. u \<in> Z <-> mem_eclose(M,A,u)" |
603 "is_eclose(M,A,Z) == \<forall>u[M]. u \<in> Z <-> mem_eclose(M,A,u)" |
598 |
604 |
599 |
605 |
600 locale M_eclose = M_datatypes + |
606 locale M_eclose = M_datatypes + |
601 assumes eclose_replacement1: |
607 assumes eclose_replacement1: |
641 |
647 |
642 |
648 |
643 subsection {*Absoluteness for @{term transrec}*} |
649 subsection {*Absoluteness for @{term transrec}*} |
644 |
650 |
645 text{* @{term "transrec(a,H) \<equiv> wfrec(Memrel(eclose({a})), a, H)"} *} |
651 text{* @{term "transrec(a,H) \<equiv> wfrec(Memrel(eclose({a})), a, H)"} *} |
646 definition |
652 |
647 |
653 definition |
648 is_transrec :: "[i=>o, [i,i,i]=>o, i, i] => o" |
654 is_transrec :: "[i=>o, [i,i,i]=>o, i, i] => o" where |
649 "is_transrec(M,MH,a,z) == |
655 "is_transrec(M,MH,a,z) == |
650 \<exists>sa[M]. \<exists>esa[M]. \<exists>mesa[M]. |
656 \<exists>sa[M]. \<exists>esa[M]. \<exists>mesa[M]. |
651 upair(M,a,a,sa) & is_eclose(M,sa,esa) & membership(M,esa,mesa) & |
657 upair(M,a,a,sa) & is_eclose(M,sa,esa) & membership(M,esa,mesa) & |
652 is_wfrec(M,MH,mesa,a,z)" |
658 is_wfrec(M,MH,mesa,a,z)" |
653 |
659 |
654 transrec_replacement :: "[i=>o, [i,i,i]=>o, i] => o" |
660 definition |
|
661 transrec_replacement :: "[i=>o, [i,i,i]=>o, i] => o" where |
655 "transrec_replacement(M,MH,a) == |
662 "transrec_replacement(M,MH,a) == |
656 \<exists>sa[M]. \<exists>esa[M]. \<exists>mesa[M]. |
663 \<exists>sa[M]. \<exists>esa[M]. \<exists>mesa[M]. |
657 upair(M,a,a,sa) & is_eclose(M,sa,esa) & membership(M,esa,mesa) & |
664 upair(M,a,a,sa) & is_eclose(M,sa,esa) & membership(M,esa,mesa) & |
658 wfrec_replacement(M,MH,mesa)" |
665 wfrec_replacement(M,MH,mesa)" |
659 |
666 |
690 |
697 |
691 subsection{*Absoluteness for the List Operator @{term length}*} |
698 subsection{*Absoluteness for the List Operator @{term length}*} |
692 text{*But it is never used.*} |
699 text{*But it is never used.*} |
693 |
700 |
694 definition |
701 definition |
695 is_length :: "[i=>o,i,i,i] => o" |
702 is_length :: "[i=>o,i,i,i] => o" where |
696 "is_length(M,A,l,n) == |
703 "is_length(M,A,l,n) == |
697 \<exists>sn[M]. \<exists>list_n[M]. \<exists>list_sn[M]. |
704 \<exists>sn[M]. \<exists>list_n[M]. \<exists>list_sn[M]. |
698 is_list_N(M,A,n,list_n) & l \<notin> list_n & |
705 is_list_N(M,A,n,list_n) & l \<notin> list_n & |
699 successor(M,n,sn) & is_list_N(M,A,sn,list_sn) & l \<in> list_sn" |
706 successor(M,n,sn) & is_list_N(M,A,sn,list_sn) & l \<in> list_sn" |
700 |
707 |
738 apply (blast intro: nth_type transM) |
745 apply (blast intro: nth_type transM) |
739 apply (simp add: not_lt_iff_le nth_eq_0) |
746 apply (simp add: not_lt_iff_le nth_eq_0) |
740 done |
747 done |
741 |
748 |
742 definition |
749 definition |
743 is_nth :: "[i=>o,i,i,i] => o" |
750 is_nth :: "[i=>o,i,i,i] => o" where |
744 "is_nth(M,n,l,Z) == |
751 "is_nth(M,n,l,Z) == |
745 \<exists>X[M]. is_iterates(M, is_tl(M), l, n, X) & is_hd(M,X,Z)" |
752 \<exists>X[M]. is_iterates(M, is_tl(M), l, n, X) & is_hd(M,X,Z)" |
746 |
753 |
747 lemma (in M_datatypes) nth_abs [simp]: |
754 lemma (in M_datatypes) nth_abs [simp]: |
748 "[|M(A); n \<in> nat; l \<in> list(A); M(Z)|] |
755 "[|M(A); n \<in> nat; l \<in> list(A); M(Z)|] |
756 |
763 |
757 |
764 |
758 subsection{*Relativization and Absoluteness for the @{term formula} Constructors*} |
765 subsection{*Relativization and Absoluteness for the @{term formula} Constructors*} |
759 |
766 |
760 definition |
767 definition |
761 is_Member :: "[i=>o,i,i,i] => o" |
768 is_Member :: "[i=>o,i,i,i] => o" where |
762 --{* because @{term "Member(x,y) \<equiv> Inl(Inl(\<langle>x,y\<rangle>))"}*} |
769 --{* because @{term "Member(x,y) \<equiv> Inl(Inl(\<langle>x,y\<rangle>))"}*} |
763 "is_Member(M,x,y,Z) == |
770 "is_Member(M,x,y,Z) == |
764 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" |
771 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" |
765 |
772 |
766 lemma (in M_trivial) Member_abs [simp]: |
773 lemma (in M_trivial) Member_abs [simp]: |
770 lemma (in M_trivial) Member_in_M_iff [iff]: |
777 lemma (in M_trivial) Member_in_M_iff [iff]: |
771 "M(Member(x,y)) <-> M(x) & M(y)" |
778 "M(Member(x,y)) <-> M(x) & M(y)" |
772 by (simp add: Member_def) |
779 by (simp add: Member_def) |
773 |
780 |
774 definition |
781 definition |
775 is_Equal :: "[i=>o,i,i,i] => o" |
782 is_Equal :: "[i=>o,i,i,i] => o" where |
776 --{* because @{term "Equal(x,y) \<equiv> Inl(Inr(\<langle>x,y\<rangle>))"}*} |
783 --{* because @{term "Equal(x,y) \<equiv> Inl(Inr(\<langle>x,y\<rangle>))"}*} |
777 "is_Equal(M,x,y,Z) == |
784 "is_Equal(M,x,y,Z) == |
778 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" |
785 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" |
779 |
786 |
780 lemma (in M_trivial) Equal_abs [simp]: |
787 lemma (in M_trivial) Equal_abs [simp]: |
783 |
790 |
784 lemma (in M_trivial) Equal_in_M_iff [iff]: "M(Equal(x,y)) <-> M(x) & M(y)" |
791 lemma (in M_trivial) Equal_in_M_iff [iff]: "M(Equal(x,y)) <-> M(x) & M(y)" |
785 by (simp add: Equal_def) |
792 by (simp add: Equal_def) |
786 |
793 |
787 definition |
794 definition |
788 is_Nand :: "[i=>o,i,i,i] => o" |
795 is_Nand :: "[i=>o,i,i,i] => o" where |
789 --{* because @{term "Nand(x,y) \<equiv> Inr(Inl(\<langle>x,y\<rangle>))"}*} |
796 --{* because @{term "Nand(x,y) \<equiv> Inr(Inl(\<langle>x,y\<rangle>))"}*} |
790 "is_Nand(M,x,y,Z) == |
797 "is_Nand(M,x,y,Z) == |
791 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" |
798 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" |
792 |
799 |
793 lemma (in M_trivial) Nand_abs [simp]: |
800 lemma (in M_trivial) Nand_abs [simp]: |
796 |
803 |
797 lemma (in M_trivial) Nand_in_M_iff [iff]: "M(Nand(x,y)) <-> M(x) & M(y)" |
804 lemma (in M_trivial) Nand_in_M_iff [iff]: "M(Nand(x,y)) <-> M(x) & M(y)" |
798 by (simp add: Nand_def) |
805 by (simp add: Nand_def) |
799 |
806 |
800 definition |
807 definition |
801 is_Forall :: "[i=>o,i,i] => o" |
808 is_Forall :: "[i=>o,i,i] => o" where |
802 --{* because @{term "Forall(x) \<equiv> Inr(Inr(p))"}*} |
809 --{* because @{term "Forall(x) \<equiv> Inr(Inr(p))"}*} |
803 "is_Forall(M,p,Z) == \<exists>u[M]. is_Inr(M,p,u) & is_Inr(M,u,Z)" |
810 "is_Forall(M,p,Z) == \<exists>u[M]. is_Inr(M,p,u) & is_Inr(M,u,Z)" |
804 |
811 |
805 lemma (in M_trivial) Forall_abs [simp]: |
812 lemma (in M_trivial) Forall_abs [simp]: |
806 "[|M(x); M(Z)|] ==> is_Forall(M,x,Z) <-> (Z = Forall(x))" |
813 "[|M(x); M(Z)|] ==> is_Forall(M,x,Z) <-> (Z = Forall(x))" |
812 |
819 |
813 |
820 |
814 subsection {*Absoluteness for @{term formula_rec}*} |
821 subsection {*Absoluteness for @{term formula_rec}*} |
815 |
822 |
816 definition |
823 definition |
817 |
824 formula_rec_case :: "[[i,i]=>i, [i,i]=>i, [i,i,i,i]=>i, [i,i]=>i, i, i] => i" where |
818 formula_rec_case :: "[[i,i]=>i, [i,i]=>i, [i,i,i,i]=>i, [i,i]=>i, i, i] => i" |
|
819 --{* the instance of @{term formula_case} in @{term formula_rec}*} |
825 --{* the instance of @{term formula_case} in @{term formula_rec}*} |
820 "formula_rec_case(a,b,c,d,h) == |
826 "formula_rec_case(a,b,c,d,h) == |
821 formula_case (a, b, |
827 formula_case (a, b, |
822 \<lambda>u v. c(u, v, h ` succ(depth(u)) ` u, |
828 \<lambda>u v. c(u, v, h ` succ(depth(u)) ` u, |
823 h ` succ(depth(v)) ` v), |
829 h ` succ(depth(v)) ` v), |
845 apply (simp add: formula_imp_formula_N formula.intros) |
851 apply (simp add: formula_imp_formula_N formula.intros) |
846 done |
852 done |
847 |
853 |
848 |
854 |
849 subsubsection{*Absoluteness for the Formula Operator @{term depth}*} |
855 subsubsection{*Absoluteness for the Formula Operator @{term depth}*} |
850 definition |
856 |
851 |
857 definition |
852 is_depth :: "[i=>o,i,i] => o" |
858 is_depth :: "[i=>o,i,i] => o" where |
853 "is_depth(M,p,n) == |
859 "is_depth(M,p,n) == |
854 \<exists>sn[M]. \<exists>formula_n[M]. \<exists>formula_sn[M]. |
860 \<exists>sn[M]. \<exists>formula_n[M]. \<exists>formula_sn[M]. |
855 is_formula_N(M,n,formula_n) & p \<notin> formula_n & |
861 is_formula_N(M,n,formula_n) & p \<notin> formula_n & |
856 successor(M,n,sn) & is_formula_N(M,sn,formula_sn) & p \<in> formula_sn" |
862 successor(M,n,sn) & is_formula_N(M,sn,formula_sn) & p \<in> formula_sn" |
857 |
863 |
872 |
878 |
873 |
879 |
874 subsubsection{*@{term is_formula_case}: relativization of @{term formula_case}*} |
880 subsubsection{*@{term is_formula_case}: relativization of @{term formula_case}*} |
875 |
881 |
876 definition |
882 definition |
877 |
|
878 is_formula_case :: |
883 is_formula_case :: |
879 "[i=>o, [i,i,i]=>o, [i,i,i]=>o, [i,i,i]=>o, [i,i]=>o, i, i] => o" |
884 "[i=>o, [i,i,i]=>o, [i,i,i]=>o, [i,i,i]=>o, [i,i]=>o, i, i] => o" where |
880 --{*no constraint on non-formulas*} |
885 --{*no constraint on non-formulas*} |
881 "is_formula_case(M, is_a, is_b, is_c, is_d, p, z) == |
886 "is_formula_case(M, is_a, is_b, is_c, is_d, p, z) == |
882 (\<forall>x[M]. \<forall>y[M]. finite_ordinal(M,x) --> finite_ordinal(M,y) --> |
887 (\<forall>x[M]. \<forall>y[M]. finite_ordinal(M,x) --> finite_ordinal(M,y) --> |
883 is_Member(M,x,y,p) --> is_a(x,y,z)) & |
888 is_Member(M,x,y,p) --> is_a(x,y,z)) & |
884 (\<forall>x[M]. \<forall>y[M]. finite_ordinal(M,x) --> finite_ordinal(M,y) --> |
889 (\<forall>x[M]. \<forall>y[M]. finite_ordinal(M,x) --> finite_ordinal(M,y) --> |
908 |
913 |
909 |
914 |
910 subsubsection {*Absoluteness for @{term formula_rec}: Final Results*} |
915 subsubsection {*Absoluteness for @{term formula_rec}: Final Results*} |
911 |
916 |
912 definition |
917 definition |
913 is_formula_rec :: "[i=>o, [i,i,i]=>o, i, i] => o" |
918 is_formula_rec :: "[i=>o, [i,i,i]=>o, i, i] => o" where |
914 --{* predicate to relativize the functional @{term formula_rec}*} |
919 --{* predicate to relativize the functional @{term formula_rec}*} |
915 "is_formula_rec(M,MH,p,z) == |
920 "is_formula_rec(M,MH,p,z) == |
916 \<exists>dp[M]. \<exists>i[M]. \<exists>f[M]. finite_ordinal(M,dp) & is_depth(M,p,dp) & |
921 \<exists>dp[M]. \<exists>i[M]. \<exists>f[M]. finite_ordinal(M,dp) & is_depth(M,p,dp) & |
917 successor(M,dp,i) & fun_apply(M,f,p,z) & is_transrec(M,MH,i,f)" |
922 successor(M,dp,i) & fun_apply(M,f,p,z) & is_transrec(M,MH,i,f)" |
918 |
923 |