| author | sandnerr | 
| Mon, 09 Dec 1996 19:11:11 +0100 | |
| changeset 2354 | b4a1e3306aa0 | 
| parent 2033 | 639de962ded4 | 
| child 2566 | cbf02fc74332 | 
| permissions | -rw-r--r-- | 
| 1461 | 1 | (* Title: HOLCF/cfun3.ML | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 2 | ID: $Id$ | 
| 1461 | 3 | Author: Franz Regensburger | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 4 | Copyright 1993 Technische Universitaet Muenchen | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 5 | *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 6 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 7 | open Cfun3; | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 8 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 9 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 10 | (* the contlub property for fapp its 'first' argument *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 11 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 12 | |
| 892 | 13 | qed_goal "contlub_fapp1" Cfun3.thy "contlub(fapp)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 14 | (fn prems => | 
| 1461 | 15 | [ | 
| 16 | (rtac contlubI 1), | |
| 17 | (strip_tac 1), | |
| 18 | (rtac (expand_fun_eq RS iffD2) 1), | |
| 19 | (strip_tac 1), | |
| 2033 | 20 | (stac thelub_cfun 1), | 
| 1461 | 21 | (atac 1), | 
| 2033 | 22 | (stac Cfunapp2 1), | 
| 1461 | 23 | (etac cont_lubcfun 1), | 
| 2033 | 24 | (stac thelub_fun 1), | 
| 1461 | 25 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | 
| 26 | (rtac refl 1) | |
| 27 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 28 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 29 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 30 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 31 | (* the cont property for fapp in its first argument *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 32 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 33 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 34 | qed_goal "cont_fapp1" Cfun3.thy "cont(fapp)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 35 | (fn prems => | 
| 1461 | 36 | [ | 
| 37 | (rtac monocontlub2cont 1), | |
| 38 | (rtac monofun_fapp1 1), | |
| 39 | (rtac contlub_fapp1 1) | |
| 40 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 41 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 42 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 43 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 44 | (* contlub, cont properties of fapp in its first argument in mixfix _[_] *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 45 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 46 | |
| 892 | 47 | qed_goal "contlub_cfun_fun" Cfun3.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 48 | "is_chain(FY) ==>\ | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 49 | \ lub(range FY)`x = lub(range (%i.FY(i)`x))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 50 | (fn prems => | 
| 1461 | 51 | [ | 
| 52 | (cut_facts_tac prems 1), | |
| 53 | (rtac trans 1), | |
| 54 | (etac (contlub_fapp1 RS contlubE RS spec RS mp RS fun_cong) 1), | |
| 2033 | 55 | (stac thelub_fun 1), | 
| 1461 | 56 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | 
| 57 | (rtac refl 1) | |
| 58 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 59 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 60 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 61 | qed_goal "cont_cfun_fun" Cfun3.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 62 | "is_chain(FY) ==>\ | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 63 | \ range(%i.FY(i)`x) <<| lub(range FY)`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 64 | (fn prems => | 
| 1461 | 65 | [ | 
| 66 | (cut_facts_tac prems 1), | |
| 67 | (rtac thelubE 1), | |
| 68 | (etac ch2ch_fappL 1), | |
| 69 | (etac (contlub_cfun_fun RS sym) 1) | |
| 70 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 71 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 72 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 73 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 74 | (* contlub, cont properties of fapp in both argument in mixfix _[_] *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 75 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 76 | |
| 892 | 77 | qed_goal "contlub_cfun" Cfun3.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 78 | "[|is_chain(FY);is_chain(TY)|] ==>\ | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 79 | \ (lub(range FY))`(lub(range TY)) = lub(range(%i.FY(i)`(TY i)))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 80 | (fn prems => | 
| 1461 | 81 | [ | 
| 82 | (cut_facts_tac prems 1), | |
| 83 | (rtac contlub_CF2 1), | |
| 84 | (rtac cont_fapp1 1), | |
| 85 | (rtac allI 1), | |
| 86 | (rtac cont_fapp2 1), | |
| 87 | (atac 1), | |
| 88 | (atac 1) | |
| 89 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 90 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 91 | qed_goal "cont_cfun" Cfun3.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 92 | "[|is_chain(FY);is_chain(TY)|] ==>\ | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 93 | \ range(%i.(FY i)`(TY i)) <<| (lub (range FY))`(lub(range TY))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 94 | (fn prems => | 
| 1461 | 95 | [ | 
| 96 | (cut_facts_tac prems 1), | |
| 97 | (rtac thelubE 1), | |
| 98 | (rtac (monofun_fapp1 RS ch2ch_MF2LR) 1), | |
| 99 | (rtac allI 1), | |
| 100 | (rtac monofun_fapp2 1), | |
| 101 | (atac 1), | |
| 102 | (atac 1), | |
| 103 | (etac (contlub_cfun RS sym) 1), | |
| 104 | (atac 1) | |
| 105 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 106 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 107 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 108 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 109 | (* cont2cont lemma for fapp *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 110 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 111 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 112 | qed_goal "cont2cont_fapp" Cfun3.thy | 
| 1461 | 113 | "[|cont(%x.ft x);cont(%x.tt x)|] ==> cont(%x. (ft x)`(tt x))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 114 | (fn prems => | 
| 1461 | 115 | [ | 
| 116 | (cut_facts_tac prems 1), | |
| 117 | (rtac cont2cont_app2 1), | |
| 118 | (rtac cont2cont_app2 1), | |
| 119 | (rtac cont_const 1), | |
| 120 | (rtac cont_fapp1 1), | |
| 121 | (atac 1), | |
| 122 | (rtac cont_fapp2 1), | |
| 123 | (atac 1) | |
| 124 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 125 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 126 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 127 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 128 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 129 | (* cont2mono Lemma for %x. LAM y. c1(x)(y) *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 130 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 131 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 132 | qed_goal "cont2mono_LAM" Cfun3.thy | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 133 | "[|!x.cont(c1 x); !y.monofun(%x.c1 x y)|] ==>\ | 
| 1461 | 134 | \ monofun(%x. LAM y. c1 x y)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 135 | (fn prems => | 
| 1461 | 136 | [ | 
| 137 | (cut_facts_tac prems 1), | |
| 138 | (rtac monofunI 1), | |
| 139 | (strip_tac 1), | |
| 2033 | 140 | (stac less_cfun 1), | 
| 141 | (stac less_fun 1), | |
| 1461 | 142 | (rtac allI 1), | 
| 2033 | 143 | (stac beta_cfun 1), | 
| 1461 | 144 | (etac spec 1), | 
| 2033 | 145 | (stac beta_cfun 1), | 
| 1461 | 146 | (etac spec 1), | 
| 147 | (etac ((hd (tl prems)) RS spec RS monofunE RS spec RS spec RS mp) 1) | |
| 148 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 149 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 150 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 151 | (* cont2cont Lemma for %x. LAM y. c1 x y) *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 152 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 153 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 154 | qed_goal "cont2cont_LAM" Cfun3.thy | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 155 | "[| !x.cont(c1 x); !y.cont(%x.c1 x y) |] ==> cont(%x. LAM y. c1 x y)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 156 | (fn prems => | 
| 1461 | 157 | [ | 
| 158 | (cut_facts_tac prems 1), | |
| 159 | (rtac monocontlub2cont 1), | |
| 160 | (etac cont2mono_LAM 1), | |
| 161 | (rtac (cont2mono RS allI) 1), | |
| 162 | (etac spec 1), | |
| 163 | (rtac contlubI 1), | |
| 164 | (strip_tac 1), | |
| 2033 | 165 | (stac thelub_cfun 1), | 
| 1461 | 166 | (rtac (cont2mono_LAM RS ch2ch_monofun) 1), | 
| 167 | (atac 1), | |
| 168 | (rtac (cont2mono RS allI) 1), | |
| 169 | (etac spec 1), | |
| 170 | (atac 1), | |
| 171 |         (res_inst_tac [("f","fabs")] arg_cong 1),
 | |
| 172 | (rtac ext 1), | |
| 2033 | 173 | (stac (beta_cfun RS ext) 1), | 
| 1461 | 174 | (etac spec 1), | 
| 175 | (rtac (cont2contlub RS contlubE | |
| 176 | RS spec RS mp ) 1), | |
| 177 | (etac spec 1), | |
| 178 | (atac 1) | |
| 179 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 180 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 181 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 182 | (* elimination of quantifier in premisses of cont2cont_LAM yields good *) | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 183 | (* lemma for the cont tactic *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 184 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 185 | |
| 1779 | 186 | bind_thm ("cont2cont_LAM2", allI RSN (2,(allI RS cont2cont_LAM)));
 | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 187 | (* | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 188 | [| !!x. cont (?c1.0 x); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 189 | !!y. cont (%x. ?c1.0 x y) |] ==> cont (%x. LAM y. ?c1.0 x y) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 190 | *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 191 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 192 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 193 | (* cont2cont tactic *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 194 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 195 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 196 | val cont_lemmas = [cont_const, cont_id, cont_fapp2, | 
| 1461 | 197 | cont2cont_fapp,cont2cont_LAM2]; | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 198 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 199 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 200 | val cont_tac = (fn i => (resolve_tac cont_lemmas i)); | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 201 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 202 | val cont_tacR = (fn i => (REPEAT (cont_tac i))); | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 203 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 204 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 205 | (* function application _[_] is strict in its first arguments *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 206 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 207 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 208 | qed_goal "strict_fapp1" Cfun3.thy "(UU::'a->'b)`x = (UU::'b)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 209 | (fn prems => | 
| 1461 | 210 | [ | 
| 2033 | 211 | (stac inst_cfun_pcpo 1), | 
| 1461 | 212 | (rewtac UU_cfun_def), | 
| 2033 | 213 | (stac beta_cfun 1), | 
| 1461 | 214 | (cont_tac 1), | 
| 215 | (rtac refl 1) | |
| 216 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 217 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 218 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 219 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 220 | (* results about strictify *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 221 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 222 | |
| 892 | 223 | qed_goalw "Istrictify1" Cfun3.thy [Istrictify_def] | 
| 1461 | 224 | "Istrictify(f)(UU)= (UU)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 225 | (fn prems => | 
| 1461 | 226 | [ | 
| 227 | (Simp_tac 1) | |
| 228 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 229 | |
| 892 | 230 | qed_goalw "Istrictify2" Cfun3.thy [Istrictify_def] | 
| 1461 | 231 | "~x=UU ==> Istrictify(f)(x)=f`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 232 | (fn prems => | 
| 1461 | 233 | [ | 
| 234 | (cut_facts_tac prems 1), | |
| 235 | (Asm_simp_tac 1) | |
| 236 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 237 | |
| 892 | 238 | qed_goal "monofun_Istrictify1" Cfun3.thy "monofun(Istrictify)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 239 | (fn prems => | 
| 1461 | 240 | [ | 
| 241 | (rtac monofunI 1), | |
| 242 | (strip_tac 1), | |
| 243 | (rtac (less_fun RS iffD2) 1), | |
| 244 | (strip_tac 1), | |
| 245 |         (res_inst_tac [("Q","xa=UU")] (excluded_middle RS disjE) 1),
 | |
| 2033 | 246 | (stac Istrictify2 1), | 
| 1461 | 247 | (atac 1), | 
| 2033 | 248 | (stac Istrictify2 1), | 
| 1461 | 249 | (atac 1), | 
| 250 | (rtac monofun_cfun_fun 1), | |
| 251 | (atac 1), | |
| 252 | (hyp_subst_tac 1), | |
| 2033 | 253 | (stac Istrictify1 1), | 
| 254 | (stac Istrictify1 1), | |
| 1461 | 255 | (rtac refl_less 1) | 
| 256 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 257 | |
| 892 | 258 | qed_goal "monofun_Istrictify2" Cfun3.thy "monofun(Istrictify(f))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 259 | (fn prems => | 
| 1461 | 260 | [ | 
| 261 | (rtac monofunI 1), | |
| 262 | (strip_tac 1), | |
| 263 |         (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1),
 | |
| 2033 | 264 | (stac Istrictify2 1), | 
| 1461 | 265 | (etac notUU_I 1), | 
| 266 | (atac 1), | |
| 2033 | 267 | (stac Istrictify2 1), | 
| 1461 | 268 | (atac 1), | 
| 269 | (rtac monofun_cfun_arg 1), | |
| 270 | (atac 1), | |
| 271 | (hyp_subst_tac 1), | |
| 2033 | 272 | (stac Istrictify1 1), | 
| 1461 | 273 | (rtac minimal 1) | 
| 274 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 275 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 276 | |
| 892 | 277 | qed_goal "contlub_Istrictify1" Cfun3.thy "contlub(Istrictify)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 278 | (fn prems => | 
| 1461 | 279 | [ | 
| 280 | (rtac contlubI 1), | |
| 281 | (strip_tac 1), | |
| 282 | (rtac (expand_fun_eq RS iffD2) 1), | |
| 283 | (strip_tac 1), | |
| 2033 | 284 | (stac thelub_fun 1), | 
| 1461 | 285 | (etac (monofun_Istrictify1 RS ch2ch_monofun) 1), | 
| 286 |         (res_inst_tac [("Q","x=UU")] (excluded_middle RS disjE) 1),
 | |
| 2033 | 287 | (stac Istrictify2 1), | 
| 1461 | 288 | (atac 1), | 
| 2033 | 289 | (stac (Istrictify2 RS ext) 1), | 
| 1461 | 290 | (atac 1), | 
| 2033 | 291 | (stac thelub_cfun 1), | 
| 1461 | 292 | (atac 1), | 
| 2033 | 293 | (stac beta_cfun 1), | 
| 1461 | 294 | (rtac cont_lubcfun 1), | 
| 295 | (atac 1), | |
| 296 | (rtac refl 1), | |
| 297 | (hyp_subst_tac 1), | |
| 2033 | 298 | (stac Istrictify1 1), | 
| 299 | (stac (Istrictify1 RS ext) 1), | |
| 1461 | 300 | (rtac (chain_UU_I_inverse RS sym) 1), | 
| 301 | (rtac (refl RS allI) 1) | |
| 302 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 303 | |
| 961 
932784dfa671
Removed bugs which occurred due to new generation mechanism for type variables
 regensbu parents: 
892diff
changeset | 304 | qed_goal "contlub_Istrictify2" Cfun3.thy "contlub(Istrictify(f::'a -> 'b))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 305 | (fn prems => | 
| 1461 | 306 | [ | 
| 307 | (rtac contlubI 1), | |
| 308 | (strip_tac 1), | |
| 1675 | 309 | (case_tac "lub(range(Y))=(UU::'a)" 1), | 
| 1461 | 310 |         (res_inst_tac [("t","lub(range(Y))")] subst 1),
 | 
| 311 | (rtac sym 1), | |
| 312 | (atac 1), | |
| 2033 | 313 | (stac Istrictify1 1), | 
| 1461 | 314 | (rtac sym 1), | 
| 315 | (rtac chain_UU_I_inverse 1), | |
| 316 | (strip_tac 1), | |
| 317 |         (res_inst_tac [("t","Y(i)"),("s","UU::'a")] subst 1),
 | |
| 318 | (rtac sym 1), | |
| 319 | (rtac (chain_UU_I RS spec) 1), | |
| 320 | (atac 1), | |
| 321 | (atac 1), | |
| 322 | (rtac Istrictify1 1), | |
| 2033 | 323 | (stac Istrictify2 1), | 
| 1461 | 324 | (atac 1), | 
| 325 |         (res_inst_tac [("s","lub(range(%i. f`(Y i)))")] trans 1),
 | |
| 326 | (rtac contlub_cfun_arg 1), | |
| 327 | (atac 1), | |
| 328 | (rtac lub_equal2 1), | |
| 329 | (rtac (chain_mono2 RS exE) 1), | |
| 330 | (atac 2), | |
| 331 | (rtac chain_UU_I_inverse2 1), | |
| 332 | (atac 1), | |
| 333 | (rtac exI 1), | |
| 334 | (strip_tac 1), | |
| 335 | (rtac (Istrictify2 RS sym) 1), | |
| 336 | (fast_tac HOL_cs 1), | |
| 337 | (rtac ch2ch_monofun 1), | |
| 338 | (rtac monofun_fapp2 1), | |
| 339 | (atac 1), | |
| 340 | (rtac ch2ch_monofun 1), | |
| 341 | (rtac monofun_Istrictify2 1), | |
| 342 | (atac 1) | |
| 343 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 344 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 345 | |
| 1779 | 346 | bind_thm ("cont_Istrictify1", contlub_Istrictify1 RS 
 | 
| 1461 | 347 | (monofun_Istrictify1 RS monocontlub2cont)); | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 348 | |
| 1779 | 349 | bind_thm ("cont_Istrictify2", contlub_Istrictify2 RS 
 | 
| 1461 | 350 | (monofun_Istrictify2 RS monocontlub2cont)); | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 351 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 352 | |
| 892 | 353 | qed_goalw "strictify1" Cfun3.thy [strictify_def] | 
| 1461 | 354 | "strictify`f`UU=UU" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 355 | (fn prems => | 
| 1461 | 356 | [ | 
| 2033 | 357 | (stac beta_cfun 1), | 
| 1461 | 358 | (cont_tac 1), | 
| 359 | (rtac cont_Istrictify2 1), | |
| 360 | (rtac cont2cont_CF1L 1), | |
| 361 | (rtac cont_Istrictify1 1), | |
| 2033 | 362 | (stac beta_cfun 1), | 
| 1461 | 363 | (rtac cont_Istrictify2 1), | 
| 364 | (rtac Istrictify1 1) | |
| 365 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 366 | |
| 892 | 367 | qed_goalw "strictify2" Cfun3.thy [strictify_def] | 
| 1461 | 368 | "~x=UU ==> strictify`f`x=f`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 369 | (fn prems => | 
| 1461 | 370 | [ | 
| 2033 | 371 | (stac beta_cfun 1), | 
| 1461 | 372 | (cont_tac 1), | 
| 373 | (rtac cont_Istrictify2 1), | |
| 374 | (rtac cont2cont_CF1L 1), | |
| 375 | (rtac cont_Istrictify1 1), | |
| 2033 | 376 | (stac beta_cfun 1), | 
| 1461 | 377 | (rtac cont_Istrictify2 1), | 
| 378 | (rtac Istrictify2 1), | |
| 379 | (resolve_tac prems 1) | |
| 380 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 381 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 382 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 383 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 384 | (* Instantiate the simplifier *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 385 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 386 | |
| 1267 | 387 | Addsimps [minimal,refl_less,beta_cfun,strict_fapp1,strictify1, strictify2]; | 
| 388 | ||
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 389 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 390 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
961diff
changeset | 391 | (* use cont_tac as autotac. *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 392 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 393 | |
| 1870 | 394 | simpset := !simpset addsolver (K (DEPTH_SOLVE_1 o cont_tac)); |