src/ZF/Constructible/Relative.thy
changeset 13352 3cd767f8d78b
parent 13350 626b79677dfa
child 13353 1800e7134d2e
equal deleted inserted replaced
13351:bc1fb6941b54 13352:3cd767f8d78b
    94 	\<forall>x[M]. \<forall>y[M]. \<forall>y'[M]. \<forall>p[M]. \<forall>p'[M]. 
    94 	\<forall>x[M]. \<forall>y[M]. \<forall>y'[M]. \<forall>p[M]. \<forall>p'[M]. 
    95            pair(M,x,y,p) --> pair(M,x,y',p') --> p\<in>r --> p'\<in>r --> y=y'"
    95            pair(M,x,y,p) --> pair(M,x,y',p') --> p\<in>r --> p'\<in>r --> y=y'"
    96 
    96 
    97   fun_apply :: "[i=>o,i,i,i] => o"
    97   fun_apply :: "[i=>o,i,i,i] => o"
    98     "fun_apply(M,f,x,y) == 
    98     "fun_apply(M,f,x,y) == 
    99 	(\<forall>y'[M]. (\<exists>u[M]. u\<in>f & pair(M,x,y',u)) <-> y=y')"
    99         (\<exists>xs[M]. \<exists>fxs[M]. 
       
   100          upair(M,x,x,xs) & image(M,f,xs,fxs) & big_union(M,fxs,y))"
   100 
   101 
   101   typed_function :: "[i=>o,i,i,i] => o"
   102   typed_function :: "[i=>o,i,i,i] => o"
   102     "typed_function(M,A,B,r) == 
   103     "typed_function(M,A,B,r) == 
   103         is_function(M,r) & is_relation(M,r) & is_domain(M,r,A) &
   104         is_function(M,r) & is_relation(M,r) & is_domain(M,r,A) &
   104         (\<forall>u[M]. u\<in>r --> (\<forall>x[M]. \<forall>y[M]. pair(M,x,y,u) --> y\<in>B))"
   105         (\<forall>u[M]. u\<in>r --> (\<forall>x[M]. \<forall>y[M]. pair(M,x,y,u) --> y\<in>B))"
   643  apply (force simp add: quasinat_def) 
   644  apply (force simp add: quasinat_def) 
   644 apply (simp add: quasinat_def is_nat_case_def)
   645 apply (simp add: quasinat_def is_nat_case_def)
   645 apply (elim disjE exE) 
   646 apply (elim disjE exE) 
   646  apply (simp_all add: b_abs) 
   647  apply (simp_all add: b_abs) 
   647 done
   648 done
       
   649 
       
   650 (*Needed?  surely better to replace by nat_case?*)
       
   651 lemma (in M_triv_axioms) is_nat_case_cong [cong]:
       
   652      "[| a = a'; k = k';  z = z';  M(z');
       
   653        !!x y. [| M(x); M(y) |] ==> is_b(x,y) <-> is_b'(x,y) |]
       
   654       ==> is_nat_case(M, a, is_b, k, z) <-> is_nat_case(M, a', is_b', k', z')"
       
   655 by (simp add: is_nat_case_def) 
   648 
   656 
   649 lemma (in M_triv_axioms) Inl_in_M_iff [iff]:
   657 lemma (in M_triv_axioms) Inl_in_M_iff [iff]:
   650      "M(Inl(a)) <-> M(a)"
   658      "M(Inl(a)) <-> M(a)"
   651 by (simp add: Inl_def) 
   659 by (simp add: Inl_def) 
   652 
   660 
   968 
   976 
   969 lemma (in M_axioms) apply_closed [intro,simp]: 
   977 lemma (in M_axioms) apply_closed [intro,simp]: 
   970      "[|M(f); M(a)|] ==> M(f`a)"
   978      "[|M(f); M(a)|] ==> M(f`a)"
   971 by (simp add: apply_def)
   979 by (simp add: apply_def)
   972 
   980 
   973 lemma (in M_axioms) apply_abs: 
   981 lemma (in M_axioms) apply_abs [simp]: 
   974      "[| function(f); M(f); M(y) |] 
   982      "[| M(f); M(x); M(y) |] ==> fun_apply(M,f,x,y) <-> f`x = y"
   975       ==> fun_apply(M,f,x,y) <-> x \<in> domain(f) & f`x = y"
   983 apply (simp add: fun_apply_def apply_def)
   976 apply (simp add: fun_apply_def)
   984 apply (blast intro: elim:); 
   977 apply (blast intro: function_apply_equality function_apply_Pair) 
   985 done
   978 done
       
   979 
       
   980 lemma (in M_axioms) typed_apply_abs: 
       
   981      "[| f \<in> A -> B; M(f); M(y) |] 
       
   982       ==> fun_apply(M,f,x,y) <-> x \<in> A & f`x = y"
       
   983 by (simp add: apply_abs fun_is_function domain_of_fun) 
       
   984 
   986 
   985 lemma (in M_axioms) typed_function_abs [simp]: 
   987 lemma (in M_axioms) typed_function_abs [simp]: 
   986      "[| M(A); M(f) |] ==> typed_function(M,A,B,f) <-> f \<in> A -> B"
   988      "[| M(A); M(f) |] ==> typed_function(M,A,B,f) <-> f \<in> A -> B"
   987 apply (auto simp add: typed_function_def relation_def Pi_iff) 
   989 apply (auto simp add: typed_function_def relation_def Pi_iff) 
   988 apply (blast dest: pair_components_in_M)+
   990 apply (blast dest: pair_components_in_M)+
   994 apply (blast dest: transM [of _ A]) 
   996 apply (blast dest: transM [of _ A]) 
   995 done
   997 done
   996 
   998 
   997 lemma (in M_axioms) surjection_abs [simp]: 
   999 lemma (in M_axioms) surjection_abs [simp]: 
   998      "[| M(A); M(B); M(f) |] ==> surjection(M,A,B,f) <-> f \<in> surj(A,B)"
  1000      "[| M(A); M(B); M(f) |] ==> surjection(M,A,B,f) <-> f \<in> surj(A,B)"
   999 by (simp add: typed_apply_abs surjection_def surj_def)
  1001 by (simp add: surjection_def surj_def)
  1000 
  1002 
  1001 lemma (in M_axioms) bijection_abs [simp]: 
  1003 lemma (in M_axioms) bijection_abs [simp]: 
  1002      "[| M(A); M(B); M(f) |] ==> bijection(M,A,B,f) <-> f \<in> bij(A,B)"
  1004      "[| M(A); M(B); M(f) |] ==> bijection(M,A,B,f) <-> f \<in> bij(A,B)"
  1003 by (simp add: bijection_def bij_def)
  1005 by (simp add: bijection_def bij_def)
  1004 
  1006