124 iterates_replacement :: "[i=>o, [i,i]=>o, i] => o" |
124 iterates_replacement :: "[i=>o, [i,i]=>o, i] => o" |
125 "iterates_replacement(M,isF,v) == |
125 "iterates_replacement(M,isF,v) == |
126 \<forall>n[M]. n\<in>nat --> |
126 \<forall>n[M]. n\<in>nat --> |
127 wfrec_replacement(M, iterates_MH(M,isF,v), Memrel(succ(n)))" |
127 wfrec_replacement(M, iterates_MH(M,isF,v), Memrel(succ(n)))" |
128 |
128 |
129 lemma (in M_axioms) iterates_MH_abs: |
129 lemma (in M_basic) iterates_MH_abs: |
130 "[| relativize1(M,isF,F); M(n); M(g); M(z) |] |
130 "[| relativize1(M,isF,F); M(n); M(g); M(z) |] |
131 ==> iterates_MH(M,isF,v,n,g,z) <-> z = nat_case(v, \<lambda>m. F(g`m), n)" |
131 ==> iterates_MH(M,isF,v,n,g,z) <-> z = nat_case(v, \<lambda>m. F(g`m), n)" |
132 by (simp add: nat_case_abs [of _ "\<lambda>m. F(g ` m)"] |
132 by (simp add: nat_case_abs [of _ "\<lambda>m. F(g ` m)"] |
133 relativize1_def iterates_MH_def) |
133 relativize1_def iterates_MH_def) |
134 |
134 |
135 lemma (in M_axioms) iterates_imp_wfrec_replacement: |
135 lemma (in M_basic) iterates_imp_wfrec_replacement: |
136 "[|relativize1(M,isF,F); n \<in> nat; iterates_replacement(M,isF,v)|] |
136 "[|relativize1(M,isF,F); n \<in> nat; iterates_replacement(M,isF,v)|] |
137 ==> wfrec_replacement(M, \<lambda>n f z. z = nat_case(v, \<lambda>m. F(f`m), n), |
137 ==> wfrec_replacement(M, \<lambda>n f z. z = nat_case(v, \<lambda>m. F(f`m), n), |
138 Memrel(succ(n)))" |
138 Memrel(succ(n)))" |
139 by (simp add: iterates_replacement_def iterates_MH_abs) |
139 by (simp add: iterates_replacement_def iterates_MH_abs) |
140 |
140 |
208 is_list_functor :: "[i=>o,i,i,i] => o" |
208 is_list_functor :: "[i=>o,i,i,i] => o" |
209 "is_list_functor(M,A,X,Z) == |
209 "is_list_functor(M,A,X,Z) == |
210 \<exists>n1[M]. \<exists>AX[M]. |
210 \<exists>n1[M]. \<exists>AX[M]. |
211 number1(M,n1) & cartprod(M,A,X,AX) & is_sum(M,n1,AX,Z)" |
211 number1(M,n1) & cartprod(M,A,X,AX) & is_sum(M,n1,AX,Z)" |
212 |
212 |
213 lemma (in M_axioms) list_functor_abs [simp]: |
213 lemma (in M_basic) list_functor_abs [simp]: |
214 "[| M(A); M(X); M(Z) |] ==> is_list_functor(M,A,X,Z) <-> (Z = {0} + A*X)" |
214 "[| M(A); M(X); M(Z) |] ==> is_list_functor(M,A,X,Z) <-> (Z = {0} + A*X)" |
215 by (simp add: is_list_functor_def singleton_0 nat_into_M) |
215 by (simp add: is_list_functor_def singleton_0 nat_into_M) |
216 |
216 |
217 |
217 |
218 subsection {*formulas without univ*} |
218 subsection {*formulas without univ*} |
264 omega(M,nat') & cartprod(M,nat',nat',natnat) & |
264 omega(M,nat') & cartprod(M,nat',nat',natnat) & |
265 is_sum(M,natnat,natnat,natnatsum) & |
265 is_sum(M,natnat,natnat,natnatsum) & |
266 cartprod(M,X,X,XX) & is_sum(M,XX,X,X3) & |
266 cartprod(M,X,X,XX) & is_sum(M,XX,X,X3) & |
267 is_sum(M,natnatsum,X3,Z)" |
267 is_sum(M,natnatsum,X3,Z)" |
268 |
268 |
269 lemma (in M_axioms) formula_functor_abs [simp]: |
269 lemma (in M_basic) formula_functor_abs [simp]: |
270 "[| M(X); M(Z) |] |
270 "[| M(X); M(Z) |] |
271 ==> is_formula_functor(M,X,Z) <-> |
271 ==> is_formula_functor(M,X,Z) <-> |
272 Z = ((nat*nat) + (nat*nat)) + (X*X + X)" |
272 Z = ((nat*nat) + (nat*nat)) + (X*X + X)" |
273 by (simp add: is_formula_functor_def) |
273 by (simp add: is_formula_functor_def) |
274 |
274 |
783 is_Member :: "[i=>o,i,i,i] => o" |
783 is_Member :: "[i=>o,i,i,i] => o" |
784 --{* because @{term "Member(x,y) \<equiv> Inl(Inl(\<langle>x,y\<rangle>))"}*} |
784 --{* because @{term "Member(x,y) \<equiv> Inl(Inl(\<langle>x,y\<rangle>))"}*} |
785 "is_Member(M,x,y,Z) == |
785 "is_Member(M,x,y,Z) == |
786 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" |
786 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" |
787 |
787 |
788 lemma (in M_triv_axioms) Member_abs [simp]: |
788 lemma (in M_trivial) Member_abs [simp]: |
789 "[|M(x); M(y); M(Z)|] ==> is_Member(M,x,y,Z) <-> (Z = Member(x,y))" |
789 "[|M(x); M(y); M(Z)|] ==> is_Member(M,x,y,Z) <-> (Z = Member(x,y))" |
790 by (simp add: is_Member_def Member_def) |
790 by (simp add: is_Member_def Member_def) |
791 |
791 |
792 lemma (in M_triv_axioms) Member_in_M_iff [iff]: |
792 lemma (in M_trivial) Member_in_M_iff [iff]: |
793 "M(Member(x,y)) <-> M(x) & M(y)" |
793 "M(Member(x,y)) <-> M(x) & M(y)" |
794 by (simp add: Member_def) |
794 by (simp add: Member_def) |
795 |
795 |
796 constdefs |
796 constdefs |
797 is_Equal :: "[i=>o,i,i,i] => o" |
797 is_Equal :: "[i=>o,i,i,i] => o" |
798 --{* because @{term "Equal(x,y) \<equiv> Inl(Inr(\<langle>x,y\<rangle>))"}*} |
798 --{* because @{term "Equal(x,y) \<equiv> Inl(Inr(\<langle>x,y\<rangle>))"}*} |
799 "is_Equal(M,x,y,Z) == |
799 "is_Equal(M,x,y,Z) == |
800 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" |
800 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" |
801 |
801 |
802 lemma (in M_triv_axioms) Equal_abs [simp]: |
802 lemma (in M_trivial) Equal_abs [simp]: |
803 "[|M(x); M(y); M(Z)|] ==> is_Equal(M,x,y,Z) <-> (Z = Equal(x,y))" |
803 "[|M(x); M(y); M(Z)|] ==> is_Equal(M,x,y,Z) <-> (Z = Equal(x,y))" |
804 by (simp add: is_Equal_def Equal_def) |
804 by (simp add: is_Equal_def Equal_def) |
805 |
805 |
806 lemma (in M_triv_axioms) Equal_in_M_iff [iff]: "M(Equal(x,y)) <-> M(x) & M(y)" |
806 lemma (in M_trivial) Equal_in_M_iff [iff]: "M(Equal(x,y)) <-> M(x) & M(y)" |
807 by (simp add: Equal_def) |
807 by (simp add: Equal_def) |
808 |
808 |
809 constdefs |
809 constdefs |
810 is_Nand :: "[i=>o,i,i,i] => o" |
810 is_Nand :: "[i=>o,i,i,i] => o" |
811 --{* because @{term "Nand(x,y) \<equiv> Inr(Inl(\<langle>x,y\<rangle>))"}*} |
811 --{* because @{term "Nand(x,y) \<equiv> Inr(Inl(\<langle>x,y\<rangle>))"}*} |
812 "is_Nand(M,x,y,Z) == |
812 "is_Nand(M,x,y,Z) == |
813 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" |
813 \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" |
814 |
814 |
815 lemma (in M_triv_axioms) Nand_abs [simp]: |
815 lemma (in M_trivial) Nand_abs [simp]: |
816 "[|M(x); M(y); M(Z)|] ==> is_Nand(M,x,y,Z) <-> (Z = Nand(x,y))" |
816 "[|M(x); M(y); M(Z)|] ==> is_Nand(M,x,y,Z) <-> (Z = Nand(x,y))" |
817 by (simp add: is_Nand_def Nand_def) |
817 by (simp add: is_Nand_def Nand_def) |
818 |
818 |
819 lemma (in M_triv_axioms) Nand_in_M_iff [iff]: "M(Nand(x,y)) <-> M(x) & M(y)" |
819 lemma (in M_trivial) Nand_in_M_iff [iff]: "M(Nand(x,y)) <-> M(x) & M(y)" |
820 by (simp add: Nand_def) |
820 by (simp add: Nand_def) |
821 |
821 |
822 constdefs |
822 constdefs |
823 is_Forall :: "[i=>o,i,i] => o" |
823 is_Forall :: "[i=>o,i,i] => o" |
824 --{* because @{term "Forall(x) \<equiv> Inr(Inr(p))"}*} |
824 --{* because @{term "Forall(x) \<equiv> Inr(Inr(p))"}*} |
825 "is_Forall(M,p,Z) == \<exists>u[M]. is_Inr(M,p,u) & is_Inr(M,u,Z)" |
825 "is_Forall(M,p,Z) == \<exists>u[M]. is_Inr(M,p,u) & is_Inr(M,u,Z)" |
826 |
826 |
827 lemma (in M_triv_axioms) Forall_abs [simp]: |
827 lemma (in M_trivial) Forall_abs [simp]: |
828 "[|M(x); M(Z)|] ==> is_Forall(M,x,Z) <-> (Z = Forall(x))" |
828 "[|M(x); M(Z)|] ==> is_Forall(M,x,Z) <-> (Z = Forall(x))" |
829 by (simp add: is_Forall_def Forall_def) |
829 by (simp add: is_Forall_def Forall_def) |
830 |
830 |
831 lemma (in M_triv_axioms) Forall_in_M_iff [iff]: "M(Forall(x)) <-> M(x)" |
831 lemma (in M_trivial) Forall_in_M_iff [iff]: "M(Forall(x)) <-> M(x)" |
832 by (simp add: Forall_def) |
832 by (simp add: Forall_def) |
833 |
833 |
834 |
834 |
835 subsection {*Absoluteness for @{term formula_rec}*} |
835 subsection {*Absoluteness for @{term formula_rec}*} |
836 |
836 |
914 successor(M,dp,i) & fun_apply(M,f,p,z) & is_transrec(M,MH,i,f)" |
914 successor(M,dp,i) & fun_apply(M,f,p,z) & is_transrec(M,MH,i,f)" |
915 |
915 |
916 text{*Unfold @{term formula_rec} to @{term formula_rec_case}. |
916 text{*Unfold @{term formula_rec} to @{term formula_rec_case}. |
917 Express @{term formula_rec} without using @{term rank} or @{term Vset}, |
917 Express @{term formula_rec} without using @{term rank} or @{term Vset}, |
918 neither of which is absolute.*} |
918 neither of which is absolute.*} |
919 lemma (in M_triv_axioms) formula_rec_eq: |
919 lemma (in M_trivial) formula_rec_eq: |
920 "p \<in> formula ==> |
920 "p \<in> formula ==> |
921 formula_rec(a,b,c,d,p) = |
921 formula_rec(a,b,c,d,p) = |
922 transrec (succ(depth(p)), |
922 transrec (succ(depth(p)), |
923 \<lambda>x h. Lambda (formula, formula_rec_case(a,b,c,d,h))) ` p" |
923 \<lambda>x h. Lambda (formula, formula_rec_case(a,b,c,d,h))) ` p" |
924 apply (simp add: formula_rec_case_def) |
924 apply (simp add: formula_rec_case_def) |