src/HOL/ZF/HOLZF.thy
changeset 39246 9e58f0499f57
parent 39198 f967a16dfcdd
child 39302 d7728f65b353
equal deleted inserted replaced
39215:7b2631c91a95 39246:9e58f0499f57
   400     apply (rule P_induct[simplified UQ])
   400     apply (rule P_induct[simplified UQ])
   401     apply simp
   401     apply simp
   402     done
   402     done
   403 qed
   403 qed
   404 
   404 
   405 consts
   405 primrec nat2Nat :: "nat \<Rightarrow> ZF" where
   406   nat2Nat :: "nat \<Rightarrow> ZF"
   406   nat2Nat_0[intro]:  "nat2Nat 0 = Empty"
   407 
   407 | nat2Nat_Suc[intro]:  "nat2Nat (Suc n) = SucNat (nat2Nat n)"
   408 primrec
       
   409 nat2Nat_0[intro]:  "nat2Nat 0 = Empty"
       
   410 nat2Nat_Suc[intro]:  "nat2Nat (Suc n) = SucNat (nat2Nat n)"
       
   411 
   408 
   412 definition Nat2nat :: "ZF \<Rightarrow> nat" where
   409 definition Nat2nat :: "ZF \<Rightarrow> nat" where
   413   "Nat2nat == inv nat2Nat"
   410   "Nat2nat == inv nat2Nat"
   414 
   411 
   415 lemma Elem_nat2Nat_inf[intro]: "Elem (nat2Nat n) Inf"
   412 lemma Elem_nat2Nat_inf[intro]: "Elem (nat2Nat n) Inf"
   498 lemma antisym_Elem: "Elem a b \<Longrightarrow> Not (Elem b a)"
   495 lemma antisym_Elem: "Elem a b \<Longrightarrow> Not (Elem b a)"
   499   apply (insert notsym_Elem[of a b])
   496   apply (insert notsym_Elem[of a b])
   500   apply auto
   497   apply auto
   501   done
   498   done
   502 
   499 
   503 consts
   500 primrec NatInterval :: "nat \<Rightarrow> nat \<Rightarrow> ZF" where
   504   NatInterval :: "nat \<Rightarrow> nat \<Rightarrow> ZF"
       
   505 
       
   506 primrec
       
   507   "NatInterval n 0 = Singleton (nat2Nat n)"
   501   "NatInterval n 0 = Singleton (nat2Nat n)"
   508   "NatInterval n (Suc m) = union (NatInterval n m) (Singleton (nat2Nat (n+m+1)))"
   502 | "NatInterval n (Suc m) = union (NatInterval n m) (Singleton (nat2Nat (n+m+1)))"
   509 
   503 
   510 lemma n_Elem_NatInterval[rule_format]: "! q. q <= m \<longrightarrow> Elem (nat2Nat (n+q)) (NatInterval n m)"
   504 lemma n_Elem_NatInterval[rule_format]: "! q. q <= m \<longrightarrow> Elem (nat2Nat (n+q)) (NatInterval n m)"
   511   apply (induct m)
   505   apply (induct m)
   512   apply (auto simp add: Singleton union)
   506   apply (auto simp add: Singleton union)
   513   apply (case_tac "q <= m")
   507   apply (case_tac "q <= m")
   727   apply (subst Elem_implode)
   721   apply (subst Elem_implode)
   728   apply (simp add: set_like_def)
   722   apply (simp add: set_like_def)
   729   apply (simp add: Ext_def)
   723   apply (simp add: Ext_def)
   730   done
   724   done
   731 
   725 
   732 consts
   726 primrec Ext_ZF_n :: "(ZF * ZF) set \<Rightarrow> ZF \<Rightarrow> nat \<Rightarrow> ZF" where
   733   Ext_ZF_n :: "(ZF * ZF) set \<Rightarrow> ZF \<Rightarrow> nat \<Rightarrow> ZF"
       
   734 
       
   735 primrec
       
   736   "Ext_ZF_n R s 0 = Ext_ZF R s"
   727   "Ext_ZF_n R s 0 = Ext_ZF R s"
   737   "Ext_ZF_n R s (Suc n) = Sum (Repl (Ext_ZF_n R s n) (Ext_ZF R))"
   728 | "Ext_ZF_n R s (Suc n) = Sum (Repl (Ext_ZF_n R s n) (Ext_ZF R))"
   738 
   729 
   739 definition Ext_ZF_hull :: "(ZF * ZF) set \<Rightarrow> ZF \<Rightarrow> ZF" where
   730 definition Ext_ZF_hull :: "(ZF * ZF) set \<Rightarrow> ZF \<Rightarrow> ZF" where
   740   "Ext_ZF_hull R s == SeqSum (Ext_ZF_n R s)"
   731   "Ext_ZF_hull R s == SeqSum (Ext_ZF_n R s)"
   741 
   732 
   742 lemma Elem_Ext_ZF_hull:
   733 lemma Elem_Ext_ZF_hull: