src/ZF/Constructible/Relative.thy
changeset 13339 0f89104dd377
parent 13323 2c287f50c9f3
child 13348 374d05460db4
equal deleted inserted replaced
13338:20ca66539bef 13339:0f89104dd377
   225      "A \<in> univ(0) ==> (\<exists>x\<in>A. x \<in> univ(0) & P(x)) <-> (\<exists>x\<in>A. P(x))" 
   225      "A \<in> univ(0) ==> (\<exists>x\<in>A. x \<in> univ(0) & P(x)) <-> (\<exists>x\<in>A. P(x))" 
   226 by (blast intro: univ0_downwards_mem) 
   226 by (blast intro: univ0_downwards_mem) 
   227 
   227 
   228 text{*Congruence rule for separation: can assume the variable is in @{text M}*}
   228 text{*Congruence rule for separation: can assume the variable is in @{text M}*}
   229 lemma separation_cong [cong]:
   229 lemma separation_cong [cong]:
   230      "(!!x. M(x) ==> P(x) <-> P'(x)) ==> separation(M,P) <-> separation(M,P')"
   230      "(!!x. M(x) ==> P(x) <-> P'(x)) 
       
   231       ==> separation(M, %x. P(x)) <-> separation(M, %x. P'(x))"
   231 by (simp add: separation_def) 
   232 by (simp add: separation_def) 
   232 
   233 
   233 text{*Congruence rules for replacement*}
   234 text{*Congruence rules for replacement*}
   234 lemma univalent_cong [cong]:
   235 lemma univalent_cong [cong]:
   235      "[| A=A'; !!x y. [| x\<in>A; M(x); M(y) |] ==> P(x,y) <-> P'(x,y) |] 
   236      "[| A=A'; !!x y. [| x\<in>A; M(x); M(y) |] ==> P(x,y) <-> P'(x,y) |] 
   236       ==> univalent(M,A,P) <-> univalent(M,A',P')"
   237       ==> univalent(M, A, %x y. P(x,y)) <-> univalent(M, A', %x y. P'(x,y))"
   237 by (simp add: univalent_def) 
   238 by (simp add: univalent_def) 
   238 
   239 
   239 lemma strong_replacement_cong [cong]:
   240 lemma strong_replacement_cong [cong]:
   240      "[| !!x y. [| M(x); M(y) |] ==> P(x,y) <-> P'(x,y) |] 
   241      "[| !!x y. [| M(x); M(y) |] ==> P(x,y) <-> P'(x,y) |] 
   241       ==> strong_replacement(M,P) <-> strong_replacement(M,P')" 
   242       ==> strong_replacement(M, %x y. P(x,y)) <-> 
       
   243           strong_replacement(M, %x y. P'(x,y))" 
   242 by (simp add: strong_replacement_def) 
   244 by (simp add: strong_replacement_def) 
   243 
   245 
   244 text{*The extensionality axiom*}
   246 text{*The extensionality axiom*}
   245 lemma "extensionality(\<lambda>x. x \<in> univ(0))"
   247 lemma "extensionality(\<lambda>x. x \<in> univ(0))"
   246 apply (simp add: extensionality_def)
   248 apply (simp add: extensionality_def)
   266      "[| X \<in> univ(A);  Transset(A) |] ==> Collect(X,P) \<in> univ(A)"
   268      "[| X \<in> univ(A);  Transset(A) |] ==> Collect(X,P) \<in> univ(A)"
   267 by (simp add: univ_def Collect_in_VLimit Limit_nat)
   269 by (simp add: univ_def Collect_in_VLimit Limit_nat)
   268 
   270 
   269 lemma "separation(\<lambda>x. x \<in> univ(0), P)"
   271 lemma "separation(\<lambda>x. x \<in> univ(0), P)"
   270 apply (simp add: separation_def, clarify) 
   272 apply (simp add: separation_def, clarify) 
   271 apply (rule_tac x = "Collect(x,P)" in bexI) 
   273 apply (rule_tac x = "Collect(z,P)" in bexI) 
   272 apply (blast intro: Collect_in_univ Transset_0)+
   274 apply (blast intro: Collect_in_univ Transset_0)+
   273 done
   275 done
   274 
   276 
   275 text{*Unordered pairing axiom*}
   277 text{*Unordered pairing axiom*}
   276 lemma "upair_ax(\<lambda>x. x \<in> univ(0))"
   278 lemma "upair_ax(\<lambda>x. x \<in> univ(0))"