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