src/ZF/OrderArith.thy
changeset 13634 99a593b49b04
parent 13544 895994073bdf
child 13784 b9f6154427a4
equal deleted inserted replaced
13633:b03a36b8d528 13634:99a593b49b04
   394 done
   394 done
   395 
   395 
   396 lemma ord_iso_rvimage_eq: 
   396 lemma ord_iso_rvimage_eq: 
   397     "f: ord_iso(A,r, B,s) ==> rvimage(A,f,s) = r Int A*A"
   397     "f: ord_iso(A,r, B,s) ==> rvimage(A,f,s) = r Int A*A"
   398 by (unfold ord_iso_def rvimage_def, blast)
   398 by (unfold ord_iso_def rvimage_def, blast)
       
   399 
       
   400 
       
   401 subsection{*Every well-founded relation is a subset of some inverse image of
       
   402       an ordinal*}
       
   403 
       
   404 lemma wf_rvimage_Ord: "Ord(i) \<Longrightarrow> wf(rvimage(A, f, Memrel(i)))"
       
   405 by (blast intro: wf_rvimage wf_Memrel)
       
   406 
       
   407 
       
   408 constdefs
       
   409   wfrank :: "[i,i]=>i"
       
   410     "wfrank(r,a) == wfrec(r, a, %x f. \<Union>y \<in> r-``{x}. succ(f`y))"
       
   411 
       
   412 constdefs
       
   413   wftype :: "i=>i"
       
   414     "wftype(r) == \<Union>y \<in> range(r). succ(wfrank(r,y))"
       
   415 
       
   416 lemma wfrank: "wf(r) ==> wfrank(r,a) = (\<Union>y \<in> r-``{a}. succ(wfrank(r,y)))"
       
   417 by (subst wfrank_def [THEN def_wfrec], simp_all)
       
   418 
       
   419 lemma Ord_wfrank: "wf(r) ==> Ord(wfrank(r,a))"
       
   420 apply (rule_tac a=a in wf_induct, assumption)
       
   421 apply (subst wfrank, assumption)
       
   422 apply (rule Ord_succ [THEN Ord_UN], blast)
       
   423 done
       
   424 
       
   425 lemma wfrank_lt: "[|wf(r); <a,b> \<in> r|] ==> wfrank(r,a) < wfrank(r,b)"
       
   426 apply (rule_tac a1 = b in wfrank [THEN ssubst], assumption)
       
   427 apply (rule UN_I [THEN ltI])
       
   428 apply (simp add: Ord_wfrank vimage_iff)+
       
   429 done
       
   430 
       
   431 lemma Ord_wftype: "wf(r) ==> Ord(wftype(r))"
       
   432 by (simp add: wftype_def Ord_wfrank)
       
   433 
       
   434 lemma wftypeI: "\<lbrakk>wf(r);  x \<in> field(r)\<rbrakk> \<Longrightarrow> wfrank(r,x) \<in> wftype(r)"
       
   435 apply (simp add: wftype_def)
       
   436 apply (blast intro: wfrank_lt [THEN ltD])
       
   437 done
       
   438 
       
   439 
       
   440 lemma wf_imp_subset_rvimage:
       
   441      "[|wf(r); r \<subseteq> A*A|] ==> \<exists>i f. Ord(i) & r <= rvimage(A, f, Memrel(i))"
       
   442 apply (rule_tac x="wftype(r)" in exI)
       
   443 apply (rule_tac x="\<lambda>x\<in>A. wfrank(r,x)" in exI)
       
   444 apply (simp add: Ord_wftype, clarify)
       
   445 apply (frule subsetD, assumption, clarify)
       
   446 apply (simp add: rvimage_iff wfrank_lt [THEN ltD])
       
   447 apply (blast intro: wftypeI)
       
   448 done
       
   449 
       
   450 theorem wf_iff_subset_rvimage:
       
   451   "relation(r) ==> wf(r) <-> (\<exists>i f A. Ord(i) & r <= rvimage(A, f, Memrel(i)))"
       
   452 by (blast dest!: relation_field_times_field wf_imp_subset_rvimage
       
   453           intro: wf_rvimage_Ord [THEN wf_subset])
   399 
   454 
   400 
   455 
   401 subsection{*Other Results*}
   456 subsection{*Other Results*}
   402 
   457 
   403 lemma wf_times: "A Int B = 0 ==> wf(A*B)"
   458 lemma wf_times: "A Int B = 0 ==> wf(A*B)"