src/ZF/Constructible/Internalize.thy
changeset 32960 69916a850301
parent 21404 eb85850d3eb7
child 46823 57bf0cecb366
equal deleted inserted replaced
32959:23a8c5ac35f8 32960:69916a850301
     1 (*  Title:      ZF/Constructible/Internalize.thy
     1 (*  Title:      ZF/Constructible/Internalize.thy
     2     ID: $Id$
       
     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     2     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     4 *)
     3 *)
     5 
     4 
     6 theory Internalize imports L_axioms Datatype_absolute begin
     5 theory Internalize imports L_axioms Datatype_absolute begin
     7 
     6 
   321 done
   320 done
   322 
   321 
   323 subsubsection{*The Operator @{term is_Member}, Internalized*}
   322 subsubsection{*The Operator @{term is_Member}, Internalized*}
   324 
   323 
   325 (*    "is_Member(M,x,y,Z) ==
   324 (*    "is_Member(M,x,y,Z) ==
   326 	\<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" *)
   325         \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inl(M,u,Z)" *)
   327 definition
   326 definition
   328   Member_fm :: "[i,i,i]=>i" where
   327   Member_fm :: "[i,i,i]=>i" where
   329     "Member_fm(x,y,Z) ==
   328     "Member_fm(x,y,Z) ==
   330        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   329        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   331                       And(Inl_fm(1,0), Inl_fm(0,Z#+2)))))"
   330                       And(Inl_fm(1,0), Inl_fm(0,Z#+2)))))"
   354 done
   353 done
   355 
   354 
   356 subsubsection{*The Operator @{term is_Equal}, Internalized*}
   355 subsubsection{*The Operator @{term is_Equal}, Internalized*}
   357 
   356 
   358 (*    "is_Equal(M,x,y,Z) ==
   357 (*    "is_Equal(M,x,y,Z) ==
   359 	\<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" *)
   358         \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inr(M,p,u) & is_Inl(M,u,Z)" *)
   360 definition
   359 definition
   361   Equal_fm :: "[i,i,i]=>i" where
   360   Equal_fm :: "[i,i,i]=>i" where
   362     "Equal_fm(x,y,Z) ==
   361     "Equal_fm(x,y,Z) ==
   363        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   362        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   364                       And(Inr_fm(1,0), Inl_fm(0,Z#+2)))))"
   363                       And(Inr_fm(1,0), Inl_fm(0,Z#+2)))))"
   387 done
   386 done
   388 
   387 
   389 subsubsection{*The Operator @{term is_Nand}, Internalized*}
   388 subsubsection{*The Operator @{term is_Nand}, Internalized*}
   390 
   389 
   391 (*    "is_Nand(M,x,y,Z) ==
   390 (*    "is_Nand(M,x,y,Z) ==
   392 	\<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" *)
   391         \<exists>p[M]. \<exists>u[M]. pair(M,x,y,p) & is_Inl(M,p,u) & is_Inr(M,u,Z)" *)
   393 definition
   392 definition
   394   Nand_fm :: "[i,i,i]=>i" where
   393   Nand_fm :: "[i,i,i]=>i" where
   395     "Nand_fm(x,y,Z) ==
   394     "Nand_fm(x,y,Z) ==
   396        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   395        Exists(Exists(And(pair_fm(x#+2,y#+2,1), 
   397                       And(Inl_fm(1,0), Inr_fm(0,Z#+2)))))"
   396                       And(Inl_fm(1,0), Inr_fm(0,Z#+2)))))"
   598    Forall(Iff(Member(0,succ(f)),
   597    Forall(Iff(Member(0,succ(f)),
   599     Exists(Exists(Exists(
   598     Exists(Exists(Exists(
   600      And(p, 
   599      And(p, 
   601       And(pair_fm(2,0,3),
   600       And(pair_fm(2,0,3),
   602        Exists(Exists(Exists(
   601        Exists(Exists(Exists(
   603 	And(pair_fm(5,a#+7,2),
   602         And(pair_fm(5,a#+7,2),
   604 	 And(upair_fm(5,5,1),
   603          And(upair_fm(5,5,1),
   605 	  And(pre_image_fm(r#+7,1,0),
   604           And(pre_image_fm(r#+7,1,0),
   606 	   And(restriction_fm(f#+7,0,4), Member(2,r#+7)))))))))))))))"
   605            And(restriction_fm(f#+7,0,4), Member(2,r#+7)))))))))))))))"
   607 
   606 
   608 lemma is_recfun_type [TC]:
   607 lemma is_recfun_type [TC]:
   609      "[| p \<in> formula; x \<in> nat; y \<in> nat; z \<in> nat |] 
   608      "[| p \<in> formula; x \<in> nat; y \<in> nat; z \<in> nat |] 
   610       ==> is_recfun_fm(p,x,y,z) \<in> formula"
   609       ==> is_recfun_fm(p,x,y,z) \<in> formula"
   611 by (simp add: is_recfun_fm_def)
   610 by (simp add: is_recfun_fm_def)