| author | oheimb | 
| Thu, 30 Aug 2001 15:47:30 +0200 | |
| changeset 11507 | 4b32a46ffd29 | 
| parent 10835 | f4745d77e620 | 
| child 13524 | 604d0f3622d6 | 
| permissions | -rw-r--r-- | 
| 896 | 1 | (* $Id$ *) | 
| 894 | 2 | (* Elegant proof for continuity of fixed-point operator *) | 
| 3 | (* Loeckx & Sieber S.88 *) | |
| 4 | ||
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 5 | Goalw [Ifix_def] "Ifix F= lub (range (%i.%G. iterate i G UU)) F"; | 
| 2033 | 6 | by (stac thelub_fun 1); | 
| 894 | 7 | by (rtac refl 2); | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 8 | by (blast_tac (claset() addIs [ch2ch_fun, chainI, less_fun RS iffD2, | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 9 | chain_iterate RS chainE]) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 10 | qed "loeckx_sieber"; | 
| 894 | 11 | |
| 12 | (* | |
| 13 | ||
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 14 | Idea: (%i.%G.iterate i G UU) is a chain of continuous functions and | 
| 894 | 15 | Ifix is the lub of this chain. Hence Ifix is continuous. | 
| 16 | ||
| 17 | ----- The proof in HOLCF ----------------------- | |
| 18 | ||
| 19 | Since we already proved the theorem | |
| 20 | ||
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 21 | val cont_lubcfun = prove_goal Cfun2.thy | 
| 10835 | 22 | "chain ?F ==> cont (%x. lub (range (%j. ?F j$x)))" | 
| 894 | 23 | |
| 24 | ||
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 25 | it suffices to prove: | 
| 894 | 26 | |
| 10835 | 27 | Ifix = (%f.lub (range (%j. (LAM f. iterate j f UU)$f))) | 
| 894 | 28 | |
| 29 | and | |
| 30 | ||
| 10835 | 31 | cont (%f.lub (range (%j. (LAM f. iterate j f UU)$f))) | 
| 894 | 32 | |
| 33 | Note that if we use the term | |
| 34 | ||
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 35 | %i.%G.iterate i G UU instead of (%j.(LAM f. iterate j f UU)) | 
| 894 | 36 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 37 | we cannot use the theorem cont_lubcfun | 
| 894 | 38 | |
| 39 | *) | |
| 40 | ||
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 41 | Goal "cont(Ifix)"; | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 42 | by (res_inst_tac | 
| 10835 | 43 |  [("t","Ifix"),("s","(%f. lub(range(%j.(LAM f. iterate j f UU)$f)))")]
 | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 44 | ssubst 1); | 
| 894 | 45 | by (rtac ext 1); | 
| 1461 | 46 | by (rewtac Ifix_def ); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 47 | by (subgoal_tac | 
| 10835 | 48 | "range(% i. iterate i f UU) = range(%j.(LAM f. iterate j f UU)$f)" 1); | 
| 894 | 49 | by (etac arg_cong 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 50 | by (subgoal_tac | 
| 10835 | 51 | "(% i. iterate i f UU) = (%j.(LAM f. iterate j f UU)$f)" 1); | 
| 894 | 52 | by (etac arg_cong 1); | 
| 53 | by (rtac ext 1); | |
| 2033 | 54 | by (stac beta_cfun 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 55 | by (rtac cont2cont_CF1L 1); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 56 | by (rtac cont_iterate 1); | 
| 894 | 57 | by (rtac refl 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 58 | by (rtac cont_lubcfun 1); | 
| 4721 
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
 oheimb parents: 
3842diff
changeset | 59 | by (rtac chainI 1); | 
| 894 | 60 | by (strip_tac 1); | 
| 61 | by (rtac less_cfun2 1); | |
| 2033 | 62 | by (stac beta_cfun 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 63 | by (rtac cont2cont_CF1L 1); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 64 | by (rtac cont_iterate 1); | 
| 2033 | 65 | by (stac beta_cfun 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 66 | by (rtac cont2cont_CF1L 1); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 67 | by (rtac cont_iterate 1); | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 68 | by (rtac (chain_iterate RS chainE) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 69 | qed "cont_Ifix2"; | 
| 894 | 70 | |
| 71 | (* the proof in little steps *) | |
| 72 | ||
| 10835 | 73 | Goal "(% i. iterate i f UU) = (%j.(LAM f. iterate j f UU)$f)"; | 
| 894 | 74 | by (rtac ext 1); | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 75 | by (simp_tac (simpset() addsimps [beta_cfun, cont2cont_CF1L, cont_iterate]) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 76 | qed "fix_lemma1"; | 
| 894 | 77 | |
| 10835 | 78 | Goal "Ifix = (%f. lub(range(%j.(LAM f. iterate j f UU)$f)))"; | 
| 894 | 79 | by (rtac ext 1); | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 80 | by (simp_tac (simpset() addsimps [Ifix_def, fix_lemma1]) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 81 | qed "fix_lemma2"; | 
| 894 | 82 | |
| 83 | (* | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 84 | - cont_lubcfun; | 
| 10835 | 85 | val it = "chain ?F ==> cont (%x. lub (range (%j. ?F j$x)))" : thm | 
| 894 | 86 | |
| 87 | *) | |
| 88 | ||
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 89 | Goal "cont Ifix"; | 
| 2033 | 90 | by (stac fix_lemma2 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 91 | by (rtac cont_lubcfun 1); | 
| 4721 
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
 oheimb parents: 
3842diff
changeset | 92 | by (rtac chainI 1); | 
| 894 | 93 | by (rtac less_cfun2 1); | 
| 2033 | 94 | by (stac beta_cfun 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 95 | by (rtac cont2cont_CF1L 1); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 96 | by (rtac cont_iterate 1); | 
| 2033 | 97 | by (stac beta_cfun 1); | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 98 | by (rtac cont2cont_CF1L 1); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
896diff
changeset | 99 | by (rtac cont_iterate 1); | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 100 | by (rtac (chain_iterate RS chainE) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
4721diff
changeset | 101 | qed "cont_Ifix2"; | 
| 894 | 102 |