section‹Interface between set models and Constructibility›
text‹This theory provides an interface between Paulson's
results and set models of ZFC. In particular,
is used to prove that the locale term‹forcing_data› is
sublocale of all relevant locales in ZF-Constructibility term‹M_trivial›, term‹M_basic›, term‹M_eclose›, etc).›
theory Interface imports
Nat_Miscellanea
Relative_Univ
Synthetic_Definition begin
lemma zero_in_M: "0 ∈ M" proof - from infinity_ax have "(∃z[##M]. empty(##M,z))" by (rule empty_intf) thenobtain z where
zm: "empty(##M,z)""z∈M" by auto with trans_M have"z=0" by (simp add: empty_def, blast intro: Transset_intf ) with zm show ?thesis by simp qed
subsection‹Interface with term‹M_trivial›› lemma mtrans : "M_trans(##M)" using Transset_intf[OF trans_M] zero_in_M exI[of "λx. x∈M"] by unfold_locales auto
lemma mtriv : "M_trivial(##M)" using trans_M M_trivial.intro mtrans M_trivial_axioms.intro upair_ax Union_ax by simp
end
sublocale M_ZF_trans ⊆ M_trivial "##M" by (rule mtriv)
lemma diff_sep_intf : assumes "B∈M" shows "separation(##M,λx . x∉B)" proof - obtain dfm where
fmsats:"∧env. env∈list(M) ==> nth(0,env)∉nth(1,env) ⟷ sats(M,dfm(0,1),env)" and "dfm(0,1) ∈ formula" and "arity(dfm(0,1)) = 2" using‹B∈M› diff_fm_auto by (simp del:FOL_sats_iff add: nat_simp_union) then have"∀b∈M. separation(##M, λx. sats(M,dfm(0,1) , [x, b]))" using separation_ax by simp moreover have"x∉b ⟷ sats(M,dfm(0,1),[x,b])" if"b∈M""x∈M"for b x using that fmsats[of "[x,b]"] by simp ultimately have"∀b∈M. separation(##M, λx . x∉b)" unfolding separation_def by simp with‹B∈M›show ?thesis by simp qed
lemma pred_sep_intf: assumes "R∈M" and "X∈M" shows "separation(##M, λy. ∃p∈M. p∈R & pair(##M,y,X,p))" proof - obtain pfm where
fmsats:"∧env. env∈list(M) ==> (∃p∈M. p∈nth(1,env) & pair(##M,nth(0,env),nth(2,env),p)) ⟷ sats(M,pfm(0,1,2),env)" and "pfm(0,1,2) ∈ formula" and "arity(pfm(0,1,2)) = 3" using pred_fm_auto by (simp del:FOL_sats_iff pair_abs add: fm_defs nat_simp_union) then have"∀x∈M. ∀r∈M. separation(##M, λy. sats(M,pfm(0,1,2) , [y,r,x]))" using separation_ax by simp moreover have"(∃p∈M. p∈r & pair(##M,y,x,p)) ⟷ sats(M,pfm(0,1,2) , [y,r,x])" if"y∈M""r∈M""x∈M"for y x r using that fmsats[of "[y,r,x]"] by simp ultimately have"∀x∈M. ∀r∈M. separation(##M, λ y . ∃p∈M. p∈r & pair(##M,y,x,p))" unfolding separation_def by simp with‹X∈M›‹R∈M›show ?thesis by simp qed
lemma memrel_sep_intf: "separation(##M, λz. ∃x∈M. ∃y∈M. pair(##M,x,y,z) & x ∈y)" proof - obtain mfm where
fmsats:"∧env. env∈list(M) ==> (∃x∈M. ∃y∈M. pair(##M,x,y,nth(0,env)) & x ∈ y) ⟷ sats(M,mfm(0),env)" and "mfm(0) ∈ formula" and "arity(mfm(0)) = 1" using mem_fm_auto by (simp del:FOL_sats_iff pair_abs add: fm_defs nat_simp_union) then have"separation(##M, λz. sats(M,mfm(0) , [z]))" using separation_ax by simp moreover have"(∃x∈M. ∃y∈M. pair(##M,x,y,z) & x ∈ y) ⟷ sats(M,mfm(0),[z])" if"z∈M"for z using that fmsats[of "[z]"] by simp ultimately have"separation(##M, λz . ∃x∈M. ∃y∈M. pair(##M,x,y,z) & x ∈ y)" unfolding separation_def by simp thenshow ?thesis by simp qed
lemma (in M_ZF_trans) rtrancl_separation_intf: assumes "r∈M" and "A∈M" shows "separation (##M, rtran_closure_mem(##M,A,r))" proof - obtain rcfm where
fmsats:"∧env. env∈list(M) ==> (rtran_closure_mem(##M,nth(2,env),nth(1,env),nth(0,env))) ⟷ sats(M,rcfm(0,1,2),env)" and "rcfm(0,1,2) ∈ formula" and "arity(rcfm(0,1,2)) = 3" using rtran_closure_mem_auto by (simp del:FOL_sats_iff pair_abs add: fm_defs nat_simp_union) then have"∀x∈M. ∀a∈M. separation(##M, λy. sats(M,rcfm(0,1,2) , [y,x,a]))" using separation_ax by simp moreover have"(rtran_closure_mem(##M,a,x,y)) ⟷ sats(M,rcfm(0,1,2) , [y,x,a])" if"y∈M""x∈M""a∈M"for y x a using that fmsats[of "[y,x,a]"] by simp ultimately have"∀x∈M. ∀a∈M. separation(##M, rtran_closure_mem(##M,a,x))" unfolding separation_def by simp with‹r∈M›‹A∈M›show ?thesis by simp qed
lemma (in M_ZF_trans) wftrancl_separation_intf: assumes "r∈M" and "Z∈M" shows "separation (##M, wellfounded_trancl(##M,Z,r))" proof - obtain rcfm where
fmsats:"∧env. env∈list(M) ==> (wellfounded_trancl(##M,nth(2,env),nth(1,env),nth(0,env))) ⟷ sats(M,rcfm(0,1,2),env)" and "rcfm(0,1,2) ∈ formula" and "arity(rcfm(0,1,2)) = 3" using wellfounded_trancl_fm_auto[of concl:M "nth(2,_)"] unfolding fm_defs trans_closure_fm_def by (simp del:FOL_sats_iff pair_abs add: fm_defs nat_simp_union) then have"∀x∈M. ∀z∈M. separation(##M, λy. sats(M,rcfm(0,1,2) , [y,x,z]))" using separation_ax by simp moreover have"(wellfounded_trancl(##M,z,x,y)) ⟷ sats(M,rcfm(0,1,2) , [y,x,z])" if"y∈M""x∈M""z∈M"for y x z using that fmsats[of "[y,x,z]"] by simp ultimately have"∀x∈M. ∀z∈M. separation(##M, wellfounded_trancl(##M,z,x))" unfolding separation_def by simp with‹r∈M›‹Z∈M›show ?thesis by simp qed
(* nat \<in> M *)
lemma (in M_ZF_trans) finite_sep_intf: "separation(##M, λx. x∈nat)" proof - have"arity(finite_ordinal_fm(0)) = 1 " unfolding finite_ordinal_fm_def limit_ordinal_fm_def empty_fm_def succ_fm_def cons_fm_def
union_fm_def upair_fm_def by (simp add: nat_union_abs1 Un_commute) with separation_ax have"(∀v∈M. separation(##M,λx. sats(M,finite_ordinal_fm(0),[x,v])))" by simp thenhave"(∀v∈M. separation(##M,finite_ordinal(##M)))" unfolding separation_def by simp thenhave"separation(##M,finite_ordinal(##M))" using zero_in_M by auto thenshow ?thesis unfolding separation_def by simp qed
lemma (in M_ZF_trans) nat_subset_I : "∃I∈M. nat ⊆ I" proof - have"∃I∈M. 0∈I ∧ (∀x∈M. x∈I ⟶ succ(x)∈I)" using infinity_ax unfolding infinity_ax_def by auto thenobtain I where "I∈M""0∈I""(∀x∈M. x∈I ⟶ succ(x)∈I)" by auto thenhave"∧x. x∈I ==> succ(x)∈I" using Transset_intf[OF trans_M] by simp thenhave"nat⊆I" using‹I∈M›‹0∈I› nat_subset_I' by simp thenshow ?thesis using‹I∈M›by auto qed
lemma (in M_ZF_trans) nat_in_M : "nat ∈ M" proof - have1:"{x∈B . x∈A}=A"if"A⊆B"for A B using that by auto obtain I where "I∈M""nat⊆I" using nat_subset_I by auto thenhave"{x∈I . x∈nat} ∈ M" using finite_sep_intf separation_closed[of "λx . x∈nat"] by simp thenshow ?thesis using‹nat⊆I›1by simp qed (* end nat \<in> M *)
lemma (in M_ZF_trans) mtrancl : "M_trancl(##M)" using mbasic rtrancl_separation_intf wftrancl_separation_intf nat_in_M
wellfounded_trancl_def by unfold_locales auto
sublocale M_ZF_trans ⊆ M_trancl "##M" by (rule mtrancl)
subsection‹Interface with term‹M_eclose››
lemma repl_sats: assumes
sat:"∧x z. x∈M ==> z∈M ==> sats(M,φ,Cons(x,Cons(z,env))) ⟷ P(x,z)" shows "strong_replacement(##M,λx z. sats(M,φ,Cons(x,Cons(z,env)))) ⟷ strong_replacement(##M,P)" by (rule strong_replacement_cong,simp add:sat)
lemma (in M_ZF_trans) nat_trans_M : "n∈M"if"n∈nat"for n using that nat_in_M Transset_intf[OF trans_M] by simp
lemma (in M_ZF_trans) list_repl1_intf: assumes "A∈M" shows "iterates_replacement(##M, is_list_functor(##M,A), 0)" proof -
{ fix n assume"n∈nat" have"succ(n)∈M" using‹n∈nat› nat_trans_M by simp thenhave1:"Memrel(succ(n))∈M" using‹n∈nat› Memrel_closed by simp have"0∈M" using nat_0I nat_trans_M by simp thenhave"is_list_functor(##M, A, a, b) ⟷ sats(M, list_functor_fm(13,1,0), [b,a,c,d,a0,a1,a2,a3,a4,y,x,z,Memrel(succ(n)),A,0])" if"a∈M""b∈M""c∈M""d∈M""a0∈M""a1∈M""a2∈M""a3∈M""a4∈M""y∈M""x∈M""z∈M" for a b c d a0 a1 a2 a3 a4 y x z using that 1‹A∈M› list_functor_iff_sats by simp thenhave"sats(M, iterates_MH_fm(list_functor_fm(13,1,0),10,2,1,0), [a0,a1,a2,a3,a4,y,x,z,Memrel(succ(n)),A,0]) ⟷ iterates_MH(##M,is_list_functor(##M,A),0,a2, a1, a0)" if"a0∈M""a1∈M""a2∈M""a3∈M""a4∈M""y∈M""x∈M""z∈M" for a0 a1 a2 a3 a4 y x z using that sats_iterates_MH_fm[of M "is_list_functor(##M,A)" _] 1‹0∈M›‹A∈M›by simp thenhave2:"sats(M, is_wfrec_fm(iterates_MH_fm(list_functor_fm(13,1,0),10,2,1,0),3,1,0), [y,x,z,Memrel(succ(n)),A,0]) ⟷ is_wfrec(##M, iterates_MH(##M,is_list_functor(##M,A),0) , Memrel(succ(n)), x, y)" if"y∈M""x∈M""z∈M"for y x z using that sats_is_wfrec_fm 1‹0∈M›‹A∈M›by simp let
?f="Exists(And(pair_fm(1,0,2), is_wfrec_fm(iterates_MH_fm(list_functor_fm(13,1,0),10,2,1,0),3,1,0)))" have satsf:"sats(M, ?f, [x,z,Memrel(succ(n)),A,0]) ⟷ (∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, iterates_MH(##M,is_list_functor(##M,A),0) , Memrel(succ(n)), x, y))" if"x∈M""z∈M"for x z using that 21‹0∈M›‹A∈M›by (simp del:pair_abs) have"arity(?f) = 5" unfolding iterates_MH_fm_def is_wfrec_fm_def is_recfun_fm_def is_nat_case_fm_def
restriction_fm_def list_functor_fm_def number1_fm_def cartprod_fm_def
sum_fm_def quasinat_fm_def pre_image_fm_def fm_defs by (simp add:nat_simp_union) then have"strong_replacement(##M,λx z. sats(M,?f,[x,z,Memrel(succ(n)),A,0]))" using replacement_ax 1‹A∈M›‹0∈M›by simp then have"strong_replacement(##M,λx z. ∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, iterates_MH(##M,is_list_functor(##M,A),0) , Memrel(succ(n)), x, y))" using repl_sats[of M ?f "[Memrel(succ(n)),A,0]"] satsf by (simp del:pair_abs)
} then show ?thesis unfolding iterates_replacement_def wfrec_replacement_def by simp qed
(* Iterates_replacement para predicados sin parámetros *) lemma (in M_ZF_trans) iterates_repl_intf : assumes "v∈M"and
isfm:"is_F_fm ∈ formula"and
arty:"arity(is_F_fm)=2"and
satsf: "∧a b env'. [ a∈M ; b∈M ; env'∈list(M) ] ==> is_F(a,b) ⟷ sats(M, is_F_fm, [b,a]@env')" shows "iterates_replacement(##M,is_F,v)" proof -
{ fix n assume"n∈nat" have"succ(n)∈M" using‹n∈nat› nat_trans_M by simp thenhave1:"Memrel(succ(n))∈M" using‹n∈nat› Memrel_closed by simp
{ fix a0 a1 a2 a3 a4 y x z assume as:"a0∈M""a1∈M""a2∈M""a3∈M""a4∈M""y∈M""x∈M""z∈M" have"sats(M, is_F_fm, Cons(b,Cons(a,Cons(c,Cons(d,[a0,a1,a2,a3,a4,y,x,z,Memrel(succ(n)),v]))))) ⟷ is_F(a,b)" if"a∈M""b∈M""c∈M""d∈M"for a b c d using as that 1 satsf[of a b "[c,d,a0,a1,a2,a3,a4,y,x,z,Memrel(succ(n)),v]"] ‹v∈M›by simp then have"sats(M, iterates_MH_fm(is_F_fm,9,2,1,0), [a0,a1,a2,a3,a4,y,x,z,Memrel(succ(n)),v]) ⟷ iterates_MH(##M,is_F,v,a2, a1, a0)" using as
sats_iterates_MH_fm[of M "is_F""is_F_fm"] 1‹v∈M›by simp
} thenhave2:"sats(M, is_wfrec_fm(iterates_MH_fm(is_F_fm,9,2,1,0),3,1,0), [y,x,z,Memrel(succ(n)),v]) ⟷ is_wfrec(##M, iterates_MH(##M,is_F,v),Memrel(succ(n)), x, y)" if"y∈M""x∈M""z∈M"for y x z using that sats_is_wfrec_fm 1‹v∈M›by simp let
?f="Exists(And(pair_fm(1,0,2), is_wfrec_fm(iterates_MH_fm(is_F_fm,9,2,1,0),3,1,0)))" have satsf:"sats(M, ?f, [x,z,Memrel(succ(n)),v]) ⟷ (∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, iterates_MH(##M,is_F,v) , Memrel(succ(n)), x, y))" if"x∈M""z∈M"for x z using that 21‹v∈M›by (simp del:pair_abs) have"arity(?f) = 4" unfolding iterates_MH_fm_def is_wfrec_fm_def is_recfun_fm_def is_nat_case_fm_def
restriction_fm_def pre_image_fm_def quasinat_fm_def fm_defs using arty by (simp add:nat_simp_union) then have"strong_replacement(##M,λx z. sats(M,?f,[x,z,Memrel(succ(n)),v]))" using replacement_ax 1‹v∈M›‹is_F_fm∈formula›by simp then have"strong_replacement(##M,λx z. ∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, iterates_MH(##M,is_F,v) , Memrel(succ(n)), x, y))" using repl_sats[of M ?f "[Memrel(succ(n)),v]"] satsf by (simp del:pair_abs)
} then show ?thesis unfolding iterates_replacement_def wfrec_replacement_def by simp qed
lemma (in M_ZF_trans) formula_repl1_intf : "iterates_replacement(##M, is_formula_functor(##M), 0)" proof - have"0∈M" using nat_0I nat_trans_M by simp have1:"arity(formula_functor_fm(1,0)) = 2" unfolding formula_functor_fm_def fm_defs sum_fm_def cartprod_fm_def number1_fm_def by (simp add:nat_simp_union) have2:"formula_functor_fm(1,0)∈formula"by simp have"is_formula_functor(##M,a,b) ⟷ sats(M, formula_functor_fm(1,0), [b,a])" if"a∈M""b∈M"for a b using that by simp thenshow ?thesis using‹0∈M›12 iterates_repl_intf by simp qed
lemma (in M_ZF_trans) nth_repl_intf: assumes "l ∈ M" shows "iterates_replacement(##M,λl' t. is_tl(##M,l',t),l)" proof - have1:"arity(tl_fm(1,0)) = 2" unfolding tl_fm_def fm_defs quasilist_fm_def Cons_fm_def Nil_fm_def Inr_fm_def number1_fm_def
Inl_fm_def by (simp add:nat_simp_union) have2:"tl_fm(1,0)∈formula"by simp have"is_tl(##M,a,b) ⟷ sats(M, tl_fm(1,0), [b,a])" if"a∈M""b∈M"for a b using that by simp thenshow ?thesis using‹l∈M›12 iterates_repl_intf by simp qed
lemma (in M_ZF_trans) eclose_repl1_intf: assumes "A∈M" shows "iterates_replacement(##M, big_union(##M), A)" proof - have1:"arity(big_union_fm(1,0)) = 2" unfolding big_union_fm_def fm_defs by (simp add:nat_simp_union) have2:"big_union_fm(1,0)∈formula"by simp have"big_union(##M,a,b) ⟷ sats(M, big_union_fm(1,0), [b,a])" if"a∈M""b∈M"for a b using that by simp thenshow ?thesis using‹A∈M›12 iterates_repl_intf by simp qed
*) lemma (in M_ZF_trans) list_repl2_intf: assumes "A∈M" shows "strong_replacement(##M,λn y. n∈nat & is_iterates(##M, is_list_functor(##M,A), 0, n, y))" proof - have"0∈M" using nat_0I nat_trans_M by simp have"is_list_functor(##M,A,a,b) ⟷ sats(M,list_functor_fm(13,1,0),[b,a,c,d,e,f,g,h,i,j,k,n,y,A,0,nat])" if"a∈M""b∈M""c∈M""d∈M""e∈M""f∈M""g∈M""h∈M""i∈M""j∈M""k∈M""n∈M""y∈M" for a b c d e f g h i j k n y using that ‹0∈M› nat_in_M ‹A∈M›by simp then have1:"sats(M, is_iterates_fm(list_functor_fm(13,1,0),3,0,1),[n,y,A,0,nat] ) ⟷ is_iterates(##M, is_list_functor(##M,A), 0, n , y)" if"n∈M""y∈M"for n y using that ‹0∈M›‹A∈M› nat_in_M
sats_is_iterates_fm[of M "is_list_functor(##M,A)"] by simp let ?f = "And(Member(0,4),is_iterates_fm(list_functor_fm(13,1,0),3,0,1))" have satsf:"sats(M, ?f,[n,y,A,0,nat] ) ⟷ n∈nat & is_iterates(##M, is_list_functor(##M,A), 0, n, y)" if"n∈M""y∈M"for n y using that ‹0∈M›‹A∈M› nat_in_M 1by simp have"arity(?f) = 5" unfolding is_iterates_fm_def restriction_fm_def list_functor_fm_def number1_fm_def Memrel_fm_def
cartprod_fm_def sum_fm_def quasinat_fm_def pre_image_fm_def fm_defs is_wfrec_fm_def
is_recfun_fm_def iterates_MH_fm_def is_nat_case_fm_def by (simp add:nat_simp_union) then have"strong_replacement(##M,λn y. sats(M,?f,[n,y,A,0,nat]))" using replacement_ax 1 nat_in_M ‹A∈M›‹0∈M›by simp then show ?thesis using repl_sats[of M ?f "[A,0,nat]"] satsf by simp qed
lemma (in M_ZF_trans) formula_repl2_intf: "strong_replacement(##M,λn y. n∈nat & is_iterates(##M, is_formula_functor(##M), 0, n, y))" proof - have"0∈M" using nat_0I nat_trans_M by simp have"is_formula_functor(##M,a,b) ⟷ sats(M,formula_functor_fm(1,0),[b,a,c,d,e,f,g,h,i,j,k,n,y,0,nat])" if"a∈M""b∈M""c∈M""d∈M""e∈M""f∈M""g∈M""h∈M""i∈M""j∈M""k∈M""n∈M""y∈M" for a b c d e f g h i j k n y using that ‹0∈M› nat_in_M by simp then have1:"sats(M, is_iterates_fm(formula_functor_fm(1,0),2,0,1),[n,y,0,nat] ) ⟷ is_iterates(##M, is_formula_functor(##M), 0, n , y)" if"n∈M""y∈M"for n y using that ‹0∈M› nat_in_M
sats_is_iterates_fm[of M "is_formula_functor(##M)"] by simp let ?f = "And(Member(0,3),is_iterates_fm(formula_functor_fm(1,0),2,0,1))" have satsf:"sats(M, ?f,[n,y,0,nat] ) ⟷ n∈nat & is_iterates(##M, is_formula_functor(##M), 0, n, y)" if"n∈M""y∈M"for n y using that ‹0∈M› nat_in_M 1by simp have artyf:"arity(?f) = 4" unfolding is_iterates_fm_def formula_functor_fm_def fm_defs sum_fm_def quasinat_fm_def
cartprod_fm_def number1_fm_def Memrel_fm_def ordinal_fm_def transset_fm_def
is_wfrec_fm_def is_recfun_fm_def iterates_MH_fm_def is_nat_case_fm_def subset_fm_def
pre_image_fm_def restriction_fm_def by (simp add:nat_simp_union) then have"strong_replacement(##M,λn y. sats(M,?f,[n,y,0,nat]))" using replacement_ax 1 artyf ‹0∈M› nat_in_M by simp then show ?thesis using repl_sats[of M ?f "[0,nat]"] satsf by simp qed
lemma (in M_ZF_trans) eclose_repl2_intf: assumes "A∈M" shows "strong_replacement(##M,λn y. n∈nat & is_iterates(##M, big_union(##M), A, n, y))" proof - have"big_union(##M,a,b) ⟷ sats(M,big_union_fm(1,0),[b,a,c,d,e,f,g,h,i,j,k,n,y,A,nat])" if"a∈M""b∈M""c∈M""d∈M""e∈M""f∈M""g∈M""h∈M""i∈M""j∈M""k∈M""n∈M""y∈M" for a b c d e f g h i j k n y using that ‹A∈M› nat_in_M by simp then have1:"sats(M, is_iterates_fm(big_union_fm(1,0),2,0,1),[n,y,A,nat] ) ⟷ is_iterates(##M, big_union(##M), A, n , y)" if"n∈M""y∈M"for n y using that ‹A∈M› nat_in_M
sats_is_iterates_fm[of M "big_union(##M)"] by simp let ?f = "And(Member(0,3),is_iterates_fm(big_union_fm(1,0),2,0,1))" have satsf:"sats(M, ?f,[n,y,A,nat] ) ⟷ n∈nat & is_iterates(##M, big_union(##M), A, n, y)" if"n∈M""y∈M"for n y using that ‹A∈M› nat_in_M 1by simp have artyf:"arity(?f) = 4" unfolding is_iterates_fm_def formula_functor_fm_def fm_defs sum_fm_def quasinat_fm_def
cartprod_fm_def number1_fm_def Memrel_fm_def ordinal_fm_def transset_fm_def
is_wfrec_fm_def is_recfun_fm_def iterates_MH_fm_def is_nat_case_fm_def subset_fm_def
pre_image_fm_def restriction_fm_def by (simp add:nat_simp_union) then have"strong_replacement(##M,λn y. sats(M,?f,[n,y,A,nat]))" using replacement_ax 1 artyf ‹A∈M› nat_in_M by simp then show ?thesis using repl_sats[of M ?f "[A,nat]"] satsf by simp qed
lemma (in M_ZF_trans) mdatatypes : "M_datatypes(##M)" using mtrancl list_repl1_intf list_repl2_intf formula_repl1_intf
formula_repl2_intf nth_repl_intf by unfold_locales auto
sublocale M_ZF_trans ⊆ M_datatypes "##M" by (rule mdatatypes)
lemma (in M_ZF_trans) meclose : "M_eclose(##M)" using mdatatypes eclose_repl1_intf eclose_repl2_intf by unfold_locales auto
sublocale M_ZF_trans ⊆ M_eclose "##M" by (rule meclose)
(* Interface with locale M_eclose_pow *)
(* "powerset(M,A,z) \<equiv> \<forall>x[M]. x \<in> z \<longleftrightarrow> subset(M,x,A)" *) definition
powerset_fm :: "[i,i] ==> i"where "powerset_fm(A,z) ≡ Forall(Iff(Member(0,succ(z)),subset_fm(0,succ(A))))"
lemma powerset_type [TC]: "[ x ∈ nat; y ∈ nat ]==> powerset_fm(x,y) ∈ formula" by (simp add:powerset_fm_def)
lemma (in M_ZF_trans) powapply_repl : assumes "f∈M" shows "strong_replacement(##M,is_powapply(##M,f))" proof - have"arity(is_powapply_fm(2,0,1)) = 3" unfolding is_powapply_fm_def by (simp add: fm_defs nat_simp_union) then have"∀f0∈M. strong_replacement(##M, λp z. sats(M,is_powapply_fm(2,0,1) , [p,z,f0]))" using replacement_ax by simp moreover have"is_powapply(##M,f0,p,z) ⟷ sats(M,is_powapply_fm(2,0,1) , [p,z,f0])" if"p∈M""z∈M""f0∈M"for p z f0 using that zero_in_M sats_is_powapply_fm[of 201"[p,z,f0]" M] by simp ultimately have"∀f0∈M. strong_replacement(##M, is_powapply(##M,f0))" unfolding strong_replacement_def univalent_def by simp with‹f∈M›show ?thesis by simp qed
lemma PHrank_type [TC]: "[ x ∈ nat; y ∈ nat; z ∈ nat ]==> PHrank_fm(x,y,z) ∈ formula" by (simp add:PHrank_fm_def)
lemma (in M_ZF_trans) sats_PHrank_fm [simp]: "[ x ∈ nat; y ∈ nat; z ∈ nat; env ∈ list(M) ] ==> sats(M,PHrank_fm(x,y,z),env) ⟷ PHrank(##M,nth(x,env),nth(y,env),nth(z,env))" using zero_in_M Internalizations.nth_closed by (simp add: PHrank_def PHrank_fm_def)
lemma (in M_ZF_trans) phrank_repl : assumes "f∈M" shows "strong_replacement(##M,PHrank(##M,f))" proof - have"arity(PHrank_fm(2,0,1)) = 3" unfolding PHrank_fm_def by (simp add: fm_defs nat_simp_union) then have"∀f0∈M. strong_replacement(##M, λp z. sats(M,PHrank_fm(2,0,1) , [p,z,f0]))" using replacement_ax by simp then have"∀f0∈M. strong_replacement(##M, PHrank(##M,f0))" unfolding strong_replacement_def univalent_def by simp with‹f∈M›show ?thesis by simp qed
lemma is_Hrank_type [TC]: "[ x ∈ nat; y ∈ nat; z ∈ nat ]==> is_Hrank_fm(x,y,z) ∈ formula" by (simp add:is_Hrank_fm_def)
lemma (in M_ZF_trans) sats_is_Hrank_fm [simp]: "[ x ∈ nat; y ∈ nat; z ∈ nat; env ∈ list(M)] ==> sats(M,is_Hrank_fm(x,y,z),env) ⟷ is_Hrank(##M,nth(x,env),nth(y,env),nth(z,env))" using zero_in_M is_Hrank_def is_Hrank_fm_def sats_Replace_fm by simp
(* M(x) \<Longrightarrow> wfrec_replacement(M,is_Hrank(M),rrank(x)) *) lemma (in M_ZF_trans) wfrec_rank : assumes "X∈M" shows "wfrec_replacement(##M,is_Hrank(##M),rrank(X))" proof - have "is_Hrank(##M,a2, a1, a0) ⟷ sats(M, is_Hrank_fm(2,1,0), [a0,a1,a2,a3,a4,y,x,z,rrank(X)])" if"a4∈M""a3∈M""a2∈M""a1∈M""a0∈M""y∈M""x∈M""z∈M"for a4 a3 a2 a1 a0 y x z using that rrank_in_M ‹X∈M›by simp then have 1:"sats(M, is_wfrec_fm(is_Hrank_fm(2,1,0),3,1,0),[y,x,z,rrank(X)]) ⟷ is_wfrec(##M, is_Hrank(##M) ,rrank(X), x, y)" if"y∈M""x∈M""z∈M"for y x z using that ‹X∈M› rrank_in_M sats_is_wfrec_fm by simp let
?f="Exists(And(pair_fm(1,0,2),is_wfrec_fm(is_Hrank_fm(2,1,0),3,1,0)))" have satsf:"sats(M, ?f, [x,z,rrank(X)]) ⟷ (∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, is_Hrank(##M) , rrank(X), x, y))" if"x∈M""z∈M"for x z using that 1‹X∈M› rrank_in_M by (simp del:pair_abs) have"arity(?f) = 3" unfolding is_wfrec_fm_def is_recfun_fm_def is_nat_case_fm_def is_Hrank_fm_def PHrank_fm_def
restriction_fm_def list_functor_fm_def number1_fm_def cartprod_fm_def
sum_fm_def quasinat_fm_def pre_image_fm_def fm_defs by (simp add:nat_simp_union) then have"strong_replacement(##M,λx z. sats(M,?f,[x,z,rrank(X)]))" using replacement_ax 1‹X∈M› rrank_in_M by simp then have"strong_replacement(##M,λx z. ∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, is_Hrank(##M) , rrank(X), x, y))" using repl_sats[of M ?f "[rrank(X)]"] satsf by (simp del:pair_abs) then show ?thesis unfolding wfrec_replacement_def by simp qed
lemma (in M_ZF_trans) memrel_eclose_sing : "a∈M ==>∃sa∈M. ∃esa∈M. ∃mesa∈M. upair(##M,a,a,sa) & is_eclose(##M,sa,esa) & membership(##M,esa,mesa)" using upair_ax eclose_closed Memrel_closed unfolding upair_ax_def by (simp del:upair_abs)
lemma (in M_ZF_trans) trans_repl_HVFrom : assumes "A∈M""i∈M" shows "transrec_replacement(##M,is_HVfrom(##M,A),i)" proof -
{ fix mesa assume"mesa∈M" have 0:"is_HVfrom(##M,A,a2, a1, a0) ⟷ sats(M, is_HVfrom_fm(8,2,1,0), [a0,a1,a2,a3,a4,y,x,z,A,mesa])" if"a4∈M""a3∈M""a2∈M""a1∈M""a0∈M""y∈M""x∈M""z∈M"for a4 a3 a2 a1 a0 y x z using that zero_in_M sats_is_HVfrom_fm ‹mesa∈M›‹A∈M›by simp have 1:"sats(M, is_wfrec_fm(is_HVfrom_fm(8,2,1,0),4,1,0),[y,x,z,A,mesa]) ⟷ is_wfrec(##M, is_HVfrom(##M,A),mesa, x, y)" if"y∈M""x∈M""z∈M"for y x z using that ‹A∈M›‹mesa∈M› sats_is_wfrec_fm[OF 0] by simp let
?f="Exists(And(pair_fm(1,0,2),is_wfrec_fm(is_HVfrom_fm(8,2,1,0),4,1,0)))" have satsf:"sats(M, ?f, [x,z,A,mesa]) ⟷ (∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, is_HVfrom(##M,A) , mesa, x, y))" if"x∈M""z∈M"for x z using that 1‹A∈M›‹mesa∈M›by (simp del:pair_abs) have"arity(?f) = 4" unfolding is_HVfrom_fm_def is_wfrec_fm_def is_recfun_fm_def is_nat_case_fm_def
restriction_fm_def list_functor_fm_def number1_fm_def cartprod_fm_def
is_powapply_fm_def sum_fm_def quasinat_fm_def pre_image_fm_def fm_defs by (simp add:nat_simp_union) then have"strong_replacement(##M,λx z. sats(M,?f,[x,z,A,mesa]))" using replacement_ax 1‹A∈M›‹mesa∈M›by simp then have"strong_replacement(##M,λx z. ∃y∈M. pair(##M,x,y,z) & is_wfrec(##M, is_HVfrom(##M,A) , mesa, x, y))" using repl_sats[of M ?f "[A,mesa]"] satsf by (simp del:pair_abs) then have"wfrec_replacement(##M,is_HVfrom(##M,A),mesa)" unfolding wfrec_replacement_def by simp
} thenshow ?thesis unfolding transrec_replacement_def using‹i∈M› memrel_eclose_sing by simp qed
lemma (in M_ZF_trans) meclose_pow : "M_eclose_pow(##M)" using meclose power_ax powapply_repl phrank_repl trans_repl_HVFrom wfrec_rank by unfold_locales auto
sublocale M_ZF_trans ⊆ M_eclose_pow "##M" by (rule meclose_pow)
lemma (in M_ZF_trans) repl_gen : assumes
f_abs: "∧x y. [ x∈M; y∈M ]==> is_F(##M,x,y) ⟷ y = f(x)" and
f_sats: "∧x y. [x∈M ; y∈M ]==> sats(M,f_fm,Cons(x,Cons(y,env))) ⟷ is_F(##M,x,y)" and
f_form: "f_fm ∈ formula" and
f_arty: "arity(f_fm) = 2" and "env∈list(M)" shows "strong_replacement(##M, λx y. y = f(x))" proof - have"sats(M,f_fm,[x,y]@env) ⟷ is_F(##M,x,y)"if"x∈M""y∈M"for x y using that f_sats[of x y] by simp moreover from f_form f_arty have"strong_replacement(##M, λx y. sats(M,f_fm,[x,y]@env))" using‹env∈list(M)› replacement_ax by simp ultimately have"strong_replacement(##M, is_F(##M))" using strong_replacement_cong[of "##M""λx y. sats(M,f_fm,[x,y]@env)""is_F(##M)"] by simp with f_abs show ?thesis using strong_replacement_cong[of "##M""is_F(##M)""λx y. y = f(x)"] by simp qed
(* Proof Scheme for instances of separation *) lemma (in M_ZF_trans) sep_in_M : assumes "φ ∈ formula""env∈list(M)" "arity(φ) ≤ 1 #+ length(env)""A∈M"and
satsQ: "∧x. x∈M ==> sats(M,φ,[x]@env) ⟷ Q(x)" shows "{y∈A . Q(y)}∈M" proof - have"separation(##M,λx. sats(M,φ,[x] @ env))" using assms separation_ax by simp thenshow ?thesis using ‹A∈M› satsQ trans_M
separation_cong[of "##M""λy. sats(M,φ,[y]@env)""Q"]
separation_closed by simp qed
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.