section‹Transitive set models of ZF› text‹This theory defines the locale term‹M_ZF_trans› for
models of ZF, and the associated term‹forcing_data›
that adds a forcing notion› theory Forcing_Data imports
Forcing_Notions
Interface
begin
lemma Transset_M : "Transset(M) ==> y∈x ==> x ∈ M ==> y ∈ M" by (simp add: Transset_def,auto)
locale M_ZF = fixes M assumes
upair_ax: "upair_ax(##M)" and Union_ax: "Union_ax(##M)" and power_ax: "power_ax(##M)" and extensionality: "extensionality(##M)" and foundation_ax: "foundation_ax(##M)" and infinity_ax: "infinity_ax(##M)" and separation_ax: "φ∈formula ==> env∈list(M) ==> arity(φ) ≤ 1 #+ length(env) ==> separation(##M,λx. sats(M,φ,[x] @ env))" and replacement_ax: "φ∈formula ==> env∈list(M) ==> arity(φ) ≤ 2 #+ length(env) ==> strong_replacement(##M,λx y. sats(M,φ,[x,y] @ env))"
sublocale M_ctm ⊆ M_trancl "##M" by (rule mtrancl)
sublocale M_ctm ⊆ M_datatypes "##M" by (rule mdatatypes)
sublocale M_ctm ⊆ M_eclose "##M" by (rule meclose)
sublocale M_ctm ⊆ M_eclose_pow "##M" by (rule meclose_pow)
(* end interface *)
context M_ctm begin
subsection‹term‹Collects› in $M$› lemma Collect_in_M_0p : assumes
Qfm : "Q_fm ∈ formula"and
Qarty : "arity(Q_fm) = 1"and
Qsats : "∧x. x∈M ==> sats(M,Q_fm,[x]) ⟷ is_Q(##M,x)"and
Qabs : "∧x. x∈M ==> is_Q(##M,x) ⟷ Q(x)"and "A∈M" shows "Collect(A,Q)∈M" proof - have"z∈A ==> z∈M"for z using‹A∈M› transitivity[of z A] by simp then have1:"Collect(A,is_Q(##M)) = Collect(A,Q)" using Qabs Collect_cong[of "A""A""is_Q(##M)""Q"] by simp have"separation(##M,is_Q(##M))" using separation_ax Qsats Qarty Qfm
separation_cong[of "##M""λy. sats(M,Q_fm,[y])""is_Q(##M)"] by simp then have"Collect(A,is_Q(##M))∈M" using separation_closed ‹A∈M›by simp then show ?thesis using1by simp qed
lemma Collect_in_M_2p : assumes
Qfm : "Q_fm ∈ formula"and
Qarty : "arity(Q_fm) = 3"and
params_M : "y∈M""z∈M"and
Qsats : "∧x. x∈M ==> sats(M,Q_fm,[x,y,z]) ⟷ is_Q(##M,x,y,z)"and
Qabs : "∧x. x∈M ==> is_Q(##M,x,y,z) ⟷ Q(x,y,z)"and "A∈M" shows "Collect(A,λx. Q(x,y,z))∈M" proof - have"z∈A ==> z∈M"for z using‹A∈M› transitivity[of z A] by simp then have1:"Collect(A,λx. is_Q(##M,x,y,z)) = Collect(A,λx. Q(x,y,z))" using Qabs Collect_cong[of "A""A""λx. is_Q(##M,x,y,z)""λx. Q(x,y,z)"] by simp have"separation(##M,λx. is_Q(##M,x,y,z))" using separation_ax Qsats Qarty Qfm params_M
separation_cong[of "##M""λx. sats(M,Q_fm,[x,y,z])""λx. is_Q(##M,x,y,z)"] by simp then have"Collect(A,λx. is_Q(##M,x,y,z))∈M" using separation_closed ‹A∈M›by simp then show ?thesis using1by simp qed
lemma Collect_in_M_4p : assumes
Qfm : "Q_fm ∈ formula"and
Qarty : "arity(Q_fm) = 5"and
params_M : "a1∈M""a2∈M""a3∈M""a4∈M"and
Qsats : "∧x. x∈M ==> sats(M,Q_fm,[x,a1,a2,a3,a4]) ⟷ is_Q(##M,x,a1,a2,a3,a4)"and
Qabs : "∧x. x∈M ==> is_Q(##M,x,a1,a2,a3,a4) ⟷ Q(x,a1,a2,a3,a4)"and "A∈M" shows "Collect(A,λx. Q(x,a1,a2,a3,a4))∈M" proof - have"z∈A ==> z∈M"for z using‹A∈M› transitivity[of z A] by simp then have1:"Collect(A,λx. is_Q(##M,x,a1,a2,a3,a4)) = Collect(A,λx. Q(x,a1,a2,a3,a4))" using Qabs Collect_cong[of "A""A""λx. is_Q(##M,x,a1,a2,a3,a4)""λx. Q(x,a1,a2,a3,a4)"] by simp have"separation(##M,λx. is_Q(##M,x,a1,a2,a3,a4))" using separation_ax Qsats Qarty Qfm params_M
separation_cong[of "##M""λx. sats(M,Q_fm,[x,a1,a2,a3,a4])" "λx. is_Q(##M,x,a1,a2,a3,a4)"] by simp then have"Collect(A,λx. is_Q(##M,x,a1,a2,a3,a4))∈M" using separation_closed ‹A∈M›by simp then show ?thesis using1by simp qed
lemma Repl_in_M : assumes
f_fm: "f_fm ∈ formula"and
f_ar: "arity(f_fm)≤ 2 #+ length(env)"and
fsats: "∧x y. x∈M ==> y∈M ==> sats(M,f_fm,[x,y]@env) ⟷ is_f(x,y)"and
fabs: "∧x y. x∈M ==> y∈M ==> is_f(x,y) ⟷ y = f(x)"and
fclosed: "∧x. x∈A ==> f(x) ∈ M"and "A∈M""env∈list(M)" shows"{f(x). x∈A}∈M" proof - have"strong_replacement(##M, λx y. sats(M,f_fm,[x,y]@env))" using replacement_ax f_fm f_ar ‹env∈list(M)›by simp then have"strong_replacement(##M, λx y. y = f(x))" using fsats fabs
strong_replacement_cong[of "##M""λx y. sats(M,f_fm,[x,y]@env)""λx y. y = f(x)"] by simp then have"{ y . x∈A , y = f(x) } ∈ M" using‹A∈M› fclosed strong_replacement_closed by simp moreover have"{f(x). x∈A} = { y . x∈A , y = f(x) }" by auto ultimatelyshow ?thesis by simp qed
lemma G_nonempty: "M_generic(G) ==> G≠0" proof - have"P⊆P" .. assume "M_generic(G)" with P_in_M P_dense ‹P⊆P›show "G ≠ 0" unfolding M_generic_def by auto qed
lemma one_in_G : assumes"M_generic(G)" shows"one ∈ G" proof - from assms have"G⊆P" unfolding M_generic_def and filter_def by simp from‹M_generic(G)›have"increasing(G)" unfolding M_generic_def and filter_def by simp with‹G⊆P›and‹M_generic(G)› show ?thesis using G_nonempty and one_in_P and one_max unfolding increasing_def by blast qed
lemma G_subset_M: "M_generic(G) ==> G ⊆ M" using transitivity[OF _ P_in_M] by auto
declare iff_trans [trans]
lemma generic_filter_existence: "p∈P ==>∃G. p∈G ∧ M_generic(G)" proof - assume"p∈P" let ?D="λn∈nat. (if (enum`n⊆P ∧ dense(enum`n)) then enum`n else P)" have"∀n∈nat. ?D`n ∈ Pow(P)" by auto then have"?D:nat→Pow(P)" using lam_type by auto have Eq4: "∀n∈nat. dense(?D`n)" proof(intro ballI) fix n assume"n∈nat" then have"dense(?D`n) ⟷ dense(if enum`n ⊆ P ∧ dense(enum`n) then enum`n else P)" by simp also have"... ⟷ (¬(enum`n ⊆ P ∧ dense(enum`n)) ⟶ dense(P)) " using split_if by simp finally show"dense(?D`n)" using P_dense ‹n∈nat›by auto qed from‹?D∈_›and Eq4 interpret cg: countable_generic P leq one ?D by (unfold_locales, auto) from‹p∈P› obtain G where Eq6: "p∈G ∧ filter(G) ∧ (∀n∈nat.(?D`n)∩G≠0)" using cg.countable_rasiowa_sikorski[where M="λ_. M"] P_sub_M
M_countable[THEN bij_is_fun] M_countable[THEN bij_is_surj, THEN surj_range] unfolding cg.D_generic_def by blast then have Eq7: "(∀D∈M. D⊆P ∧ dense(D)⟶D∩G≠0)" proof (intro ballI impI) fix D assume"D∈M"and Eq9: "D ⊆ P ∧ dense(D) " have"∀y∈M. ∃x∈nat. enum`x= y" using M_countable and bij_is_surj unfolding surj_def by (simp) with‹D∈M›obtain n where Eq10: "n∈nat ∧ enum`n = D" by auto with Eq9 and if_P have"?D`n = D"by (simp) with Eq6 and Eq10 show"D∩G≠0"by auto qed with Eq6 show ?thesis unfolding M_generic_def by auto qed
(* Compatibility lemmas *) lemma compat_in_abs : assumes "A∈M""r∈M""p∈M""q∈M" shows "is_compat_in(##M,A,r,p,q) ⟷ compat_in(A,r,p,q)" proof - have"d∈A ==> d∈M"for d using transitivity ‹A∈M›by simp moreoverfrom this have"d∈A ==>⟨d, t⟩∈ M"if"t∈M"for t d using that pair_in_M_iff by simp ultimately show ?thesis unfolding is_compat_in_def compat_in_def using assms pair_in_M_iff transitivity by auto 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.