| author | paulson | 
| Tue, 22 Jul 1997 11:23:03 +0200 | |
| changeset 3542 | db5e9aceea49 | 
| parent 3323 | 194ae2e0c193 | 
| child 3842 | b55686a7b22c | 
| permissions | -rw-r--r-- | 
| 1461 | 1 | (* Title: HOLCF/cfun2.thy | 
| 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 | Lemmas for cfun2.thy | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 7 | *) | 
| 
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 | open Cfun2; | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 10 | |
| 2640 | 11 | (* for compatibility with old HOLCF-Version *) | 
| 12 | qed_goal "inst_cfun_po" thy "(op <<)=(%f1 f2.fapp f1 << fapp f2)" | |
| 13 | (fn prems => | |
| 14 | [ | |
| 3323 
194ae2e0c193
eliminated the constant less by the introduction of the axclass sq_ord
 slotosch parents: 
2838diff
changeset | 15 | (fold_goals_tac [less_cfun_def]), | 
| 2640 | 16 | (rtac refl 1) | 
| 17 | ]); | |
| 18 | ||
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 19 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 20 | (* access to less_cfun in class po *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 21 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 22 | |
| 2640 | 23 | qed_goal "less_cfun" thy "( f1 << f2 ) = (fapp(f1) << fapp(f2))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 24 | (fn prems => | 
| 1461 | 25 | [ | 
| 2640 | 26 | (simp_tac (!simpset addsimps [inst_cfun_po]) 1) | 
| 1461 | 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 | (* Type 'a ->'b is pointed *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 31 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 32 | |
| 2640 | 33 | qed_goal "minimal_cfun" thy "fabs(% x.UU) << f" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 34 | (fn prems => | 
| 1461 | 35 | [ | 
| 2033 | 36 | (stac less_cfun 1), | 
| 37 | (stac Abs_Cfun_inverse2 1), | |
| 1461 | 38 | (rtac cont_const 1), | 
| 39 | (rtac minimal_fun 1) | |
| 40 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 41 | |
| 2640 | 42 | bind_thm ("UU_cfun_def",minimal_cfun RS minimal2UU RS sym);
 | 
| 43 | ||
| 2838 
2e908f29bc3d
changed continuous functions from pcpo to cpo (including instances)
 slotosch parents: 
2640diff
changeset | 44 | qed_goal "least_cfun" thy "? x::'a->'b::pcpo.!y.x<<y" | 
| 2640 | 45 | (fn prems => | 
| 46 | [ | |
| 47 |         (res_inst_tac [("x","fabs(% x.UU)")] exI 1),
 | |
| 48 | (rtac (minimal_cfun RS allI) 1) | |
| 49 | ]); | |
| 50 | ||
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 51 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 52 | (* fapp yields continuous functions in 'a => 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 53 | (* this is continuity of fapp in its 'second' argument *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 54 | (* cont_fapp2 ==> monofun_fapp2 & contlub_fapp2 *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 55 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 56 | |
| 2640 | 57 | qed_goal "cont_fapp2" thy "cont(fapp(fo))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 58 | (fn prems => | 
| 1461 | 59 | [ | 
| 60 |         (res_inst_tac [("P","cont")] CollectD 1),
 | |
| 2640 | 61 | (fold_goals_tac [CFun_def]), | 
| 1461 | 62 | (rtac Rep_Cfun 1) | 
| 63 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 64 | |
| 1779 | 65 | bind_thm ("monofun_fapp2", cont_fapp2 RS cont2mono);
 | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 66 | (* monofun(fapp(?fo1)) *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 67 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 68 | |
| 1779 | 69 | bind_thm ("contlub_fapp2", cont_fapp2 RS cont2contlub);
 | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 70 | (* contlub(fapp(?fo1)) *) | 
| 
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 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 73 | (* expanded thms cont_fapp2, contlub_fapp2 *) | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 74 | (* looks nice with mixfix syntac *) | 
| 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 | |
| 1779 | 77 | bind_thm ("cont_cfun_arg", (cont_fapp2 RS contE RS spec RS mp));
 | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 78 | (* is_chain(?x1) ==> range (%i. ?fo3`(?x1 i)) <<| ?fo3`(lub (range ?x1)) *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 79 | |
| 1779 | 80 | bind_thm ("contlub_cfun_arg", (contlub_fapp2 RS contlubE RS spec RS mp));
 | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 81 | (* is_chain(?x1) ==> ?fo4`(lub (range ?x1)) = lub (range (%i. ?fo4`(?x1 i))) *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 82 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 83 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 84 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 85 | (* fapp is monotone in its 'first' argument *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 86 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 87 | |
| 2640 | 88 | qed_goalw "monofun_fapp1" thy [monofun] "monofun(fapp)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 89 | (fn prems => | 
| 1461 | 90 | [ | 
| 91 | (strip_tac 1), | |
| 92 | (etac (less_cfun RS subst) 1) | |
| 93 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 94 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 95 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 96 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 97 | (* monotonicity of application fapp in mixfix syntax [_]_ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 98 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 99 | |
| 2640 | 100 | qed_goal "monofun_cfun_fun" thy "f1 << f2 ==> f1`x << f2`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 101 | (fn prems => | 
| 1461 | 102 | [ | 
| 103 | (cut_facts_tac prems 1), | |
| 104 |         (res_inst_tac [("x","x")] spec 1),
 | |
| 105 | (rtac (less_fun RS subst) 1), | |
| 106 | (etac (monofun_fapp1 RS monofunE RS spec RS spec RS mp) 1) | |
| 107 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 108 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 109 | |
| 1779 | 110 | bind_thm ("monofun_cfun_arg", monofun_fapp2 RS monofunE RS spec RS spec RS mp);
 | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 111 | (* ?x2 << ?x1 ==> ?fo5`?x2 << ?fo5`?x1 *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 112 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 113 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 114 | (* monotonicity of fapp in both arguments in mixfix syntax [_]_ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 115 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 116 | |
| 2640 | 117 | qed_goal "monofun_cfun" thy | 
| 1461 | 118 | "[|f1<<f2;x1<<x2|] ==> f1`x1 << f2`x2" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 119 | (fn prems => | 
| 1461 | 120 | [ | 
| 121 | (cut_facts_tac prems 1), | |
| 122 | (rtac trans_less 1), | |
| 123 | (etac monofun_cfun_arg 1), | |
| 124 | (etac monofun_cfun_fun 1) | |
| 125 | ]); | |
| 243 
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 | |
| 2640 | 128 | qed_goal "strictI" thy "f`x = UU ==> f`UU = UU" (fn prems => [ | 
| 2033 | 129 | cut_facts_tac prems 1, | 
| 130 | rtac (eq_UU_iff RS iffD2) 1, | |
| 131 | etac subst 1, | |
| 132 | rtac (minimal RS monofun_cfun_arg) 1]); | |
| 1989 | 133 | |
| 134 | ||
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 135 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 136 | (* ch2ch - rules for the type 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 137 | (* use MF2 lemmas from Cont.ML *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 138 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 139 | |
| 2640 | 140 | qed_goal "ch2ch_fappR" thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 141 | "is_chain(Y) ==> is_chain(%i. f`(Y i))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 142 | (fn prems => | 
| 1461 | 143 | [ | 
| 144 | (cut_facts_tac prems 1), | |
| 145 | (etac (monofun_fapp2 RS ch2ch_MF2R) 1) | |
| 146 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 147 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 148 | |
| 1779 | 149 | bind_thm ("ch2ch_fappL", monofun_fapp1 RS ch2ch_MF2L);
 | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 150 | (* is_chain(?F) ==> is_chain (%i. ?F i`?x) *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 151 | |
| 
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 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 154 | (* the lub of a chain of continous functions is monotone *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 155 | (* use MF2 lemmas from Cont.ML *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 156 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 157 | |
| 2640 | 158 | qed_goal "lub_cfun_mono" thy | 
| 1461 | 159 | "is_chain(F) ==> monofun(% x.lub(range(% j.(F j)`x)))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 160 | (fn prems => | 
| 1461 | 161 | [ | 
| 162 | (cut_facts_tac prems 1), | |
| 163 | (rtac lub_MF2_mono 1), | |
| 164 | (rtac monofun_fapp1 1), | |
| 165 | (rtac (monofun_fapp2 RS allI) 1), | |
| 166 | (atac 1) | |
| 167 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 168 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 169 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 170 | (* a lemma about the exchange of lubs for type 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 171 | (* use MF2 lemmas from Cont.ML *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 172 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 173 | |
| 2640 | 174 | qed_goal "ex_lubcfun" thy | 
| 1461 | 175 | "[| is_chain(F); is_chain(Y) |] ==>\ | 
| 176 | \ lub(range(%j. lub(range(%i. F(j)`(Y i))))) =\ | |
| 177 | \ lub(range(%i. lub(range(%j. F(j)`(Y i)))))" | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 178 | (fn prems => | 
| 1461 | 179 | [ | 
| 180 | (cut_facts_tac prems 1), | |
| 181 | (rtac ex_lubMF2 1), | |
| 182 | (rtac monofun_fapp1 1), | |
| 183 | (rtac (monofun_fapp2 RS allI) 1), | |
| 184 | (atac 1), | |
| 185 | (atac 1) | |
| 186 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 187 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 188 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 189 | (* the lub of a chain of cont. functions is continuous *) | 
| 
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 | |
| 2640 | 192 | qed_goal "cont_lubcfun" thy | 
| 1461 | 193 | "is_chain(F) ==> cont(% x.lub(range(% j.F(j)`x)))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 194 | (fn prems => | 
| 1461 | 195 | [ | 
| 196 | (cut_facts_tac prems 1), | |
| 197 | (rtac monocontlub2cont 1), | |
| 198 | (etac lub_cfun_mono 1), | |
| 199 | (rtac contlubI 1), | |
| 200 | (strip_tac 1), | |
| 2033 | 201 | (stac (contlub_cfun_arg RS ext) 1), | 
| 1461 | 202 | (atac 1), | 
| 203 | (etac ex_lubcfun 1), | |
| 204 | (atac 1) | |
| 205 | ]); | |
| 243 
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 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 208 | (* type 'a -> 'b is chain complete *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 209 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 210 | |
| 2640 | 211 | qed_goal "lub_cfun" thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 212 | "is_chain(CCF) ==> range(CCF) <<| (LAM x.lub(range(% i.CCF(i)`x)))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 213 | (fn prems => | 
| 1461 | 214 | [ | 
| 215 | (cut_facts_tac prems 1), | |
| 216 | (rtac is_lubI 1), | |
| 217 | (rtac conjI 1), | |
| 218 | (rtac ub_rangeI 1), | |
| 219 | (rtac allI 1), | |
| 2033 | 220 | (stac less_cfun 1), | 
| 221 | (stac Abs_Cfun_inverse2 1), | |
| 1461 | 222 | (etac cont_lubcfun 1), | 
| 223 | (rtac (lub_fun RS is_lubE RS conjunct1 RS ub_rangeE RS spec) 1), | |
| 224 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | |
| 225 | (strip_tac 1), | |
| 2033 | 226 | (stac less_cfun 1), | 
| 227 | (stac Abs_Cfun_inverse2 1), | |
| 1461 | 228 | (etac cont_lubcfun 1), | 
| 229 | (rtac (lub_fun RS is_lubE RS conjunct2 RS spec RS mp) 1), | |
| 230 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | |
| 231 | (etac (monofun_fapp1 RS ub2ub_monofun) 1) | |
| 232 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 233 | |
| 1779 | 234 | bind_thm ("thelub_cfun", lub_cfun RS thelubI);
 | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 235 | (* | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 236 | is_chain(?CCF1) ==> lub (range ?CCF1) = (LAM x. lub (range (%i. ?CCF1 i`x))) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 237 | *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 238 | |
| 2640 | 239 | qed_goal "cpo_cfun" thy | 
| 2838 
2e908f29bc3d
changed continuous functions from pcpo to cpo (including instances)
 slotosch parents: 
2640diff
changeset | 240 |   "is_chain(CCF::nat=>('a->'b)) ==> ? x. range(CCF) <<| x"
 | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 241 | (fn prems => | 
| 1461 | 242 | [ | 
| 243 | (cut_facts_tac prems 1), | |
| 244 | (rtac exI 1), | |
| 245 | (etac lub_cfun 1) | |
| 246 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 247 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 248 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 249 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 250 | (* Extensionality in 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 251 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 252 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 253 | qed_goal "ext_cfun" Cfun1.thy "(!!x. f`x = g`x) ==> f = g" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 254 | (fn prems => | 
| 1461 | 255 | [ | 
| 256 |         (res_inst_tac [("t","f")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 257 |         (res_inst_tac [("t","g")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 258 |         (res_inst_tac [("f","fabs")] arg_cong 1),
 | |
| 259 | (rtac ext 1), | |
| 260 | (resolve_tac prems 1) | |
| 261 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 262 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 263 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 264 | (* Monotonicity of fabs *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 265 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 266 | |
| 2640 | 267 | qed_goal "semi_monofun_fabs" thy | 
| 1461 | 268 | "[|cont(f);cont(g);f<<g|]==>fabs(f)<<fabs(g)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 269 | (fn prems => | 
| 1461 | 270 | [ | 
| 271 | (rtac (less_cfun RS iffD2) 1), | |
| 2033 | 272 | (stac Abs_Cfun_inverse2 1), | 
| 1461 | 273 | (resolve_tac prems 1), | 
| 2033 | 274 | (stac Abs_Cfun_inverse2 1), | 
| 1461 | 275 | (resolve_tac prems 1), | 
| 276 | (resolve_tac prems 1) | |
| 277 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 278 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 279 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 280 | (* Extenionality wrt. << in 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 281 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 282 | |
| 2640 | 283 | qed_goal "less_cfun2" thy "(!!x. f`x << g`x) ==> f << g" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 284 | (fn prems => | 
| 1461 | 285 | [ | 
| 286 |         (res_inst_tac [("t","f")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 287 |         (res_inst_tac [("t","g")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 288 | (rtac semi_monofun_fabs 1), | |
| 289 | (rtac cont_fapp2 1), | |
| 290 | (rtac cont_fapp2 1), | |
| 291 | (rtac (less_fun RS iffD2) 1), | |
| 292 | (rtac allI 1), | |
| 293 | (resolve_tac prems 1) | |
| 294 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 295 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 296 |