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))" |