| author | paulson | 
| Wed, 08 May 1996 17:54:07 +0200 | |
| changeset 1735 | 96244c247b07 | 
| parent 1461 | 6bcb44e4d6e5 | 
| child 1779 | 1155c06fa956 | 
| 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 | |
| 
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 | (* access to less_cfun in class po *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 13 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 14 | |
| 892 | 15 | qed_goal "less_cfun" Cfun2.thy "( f1 << f2 ) = (fapp(f1) << fapp(f2))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 16 | (fn prems => | 
| 1461 | 17 | [ | 
| 18 | (rtac (inst_cfun_po RS ssubst) 1), | |
| 19 | (fold_goals_tac [less_cfun_def]), | |
| 20 | (rtac refl 1) | |
| 21 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 22 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 23 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 24 | (* Type 'a ->'b is pointed *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 25 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 26 | |
| 892 | 27 | qed_goalw "minimal_cfun" Cfun2.thy [UU_cfun_def] "UU_cfun << f" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 28 | (fn prems => | 
| 1461 | 29 | [ | 
| 30 | (rtac (less_cfun RS ssubst) 1), | |
| 31 | (rtac (Abs_Cfun_inverse2 RS ssubst) 1), | |
| 32 | (rtac cont_const 1), | |
| 33 | (fold_goals_tac [UU_fun_def]), | |
| 34 | (rtac minimal_fun 1) | |
| 35 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 36 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 37 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 38 | (* fapp yields continuous functions in 'a => 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 39 | (* 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 | 40 | (* cont_fapp2 ==> monofun_fapp2 & contlub_fapp2 *) | 
| 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 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 43 | qed_goal "cont_fapp2" Cfun2.thy "cont(fapp(fo))" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 44 | (fn prems => | 
| 1461 | 45 | [ | 
| 46 |         (res_inst_tac [("P","cont")] CollectD 1),
 | |
| 47 | (fold_goals_tac [Cfun_def]), | |
| 48 | (rtac Rep_Cfun 1) | |
| 49 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 50 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 51 | val monofun_fapp2 = cont_fapp2 RS cont2mono; | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 52 | (* monofun(fapp(?fo1)) *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 53 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 54 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 55 | val contlub_fapp2 = cont_fapp2 RS cont2contlub; | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 56 | (* contlub(fapp(?fo1)) *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 57 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 58 | (* ------------------------------------------------------------------------ *) | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 59 | (* expanded thms cont_fapp2, contlub_fapp2 *) | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 60 | (* looks nice with mixfix syntac *) | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 61 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 62 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 63 | val cont_cfun_arg = (cont_fapp2 RS contE RS spec RS mp); | 
| 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 64 | (* 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 | 65 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 66 | val 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 | 67 | (* 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 | 68 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 69 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 70 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 71 | (* fapp is monotone in its 'first' argument *) | 
| 
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 | |
| 892 | 74 | qed_goalw "monofun_fapp1" Cfun2.thy [monofun] "monofun(fapp)" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 75 | (fn prems => | 
| 1461 | 76 | [ | 
| 77 | (strip_tac 1), | |
| 78 | (etac (less_cfun RS subst) 1) | |
| 79 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 80 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 81 | |
| 
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 | (* monotonicity of application fapp in mixfix syntax [_]_ *) | 
| 
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 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 86 | qed_goal "monofun_cfun_fun" Cfun2.thy "f1 << f2 ==> f1`x << f2`x" | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 87 | (fn prems => | 
| 1461 | 88 | [ | 
| 89 | (cut_facts_tac prems 1), | |
| 90 |         (res_inst_tac [("x","x")] spec 1),
 | |
| 91 | (rtac (less_fun RS subst) 1), | |
| 92 | (etac (monofun_fapp1 RS monofunE RS spec RS spec RS mp) 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 | val 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 | 97 | (* ?x2 << ?x1 ==> ?fo5`?x2 << ?fo5`?x1 *) | 
| 243 
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 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 100 | (* 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 | 101 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 102 | |
| 892 | 103 | qed_goal "monofun_cfun" Cfun2.thy | 
| 1461 | 104 | "[|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 | 105 | (fn prems => | 
| 1461 | 106 | [ | 
| 107 | (cut_facts_tac prems 1), | |
| 108 | (rtac trans_less 1), | |
| 109 | (etac monofun_cfun_arg 1), | |
| 110 | (etac monofun_cfun_fun 1) | |
| 111 | ]); | |
| 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 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 115 | (* ch2ch - rules for the type 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 116 | (* use MF2 lemmas from Cont.ML *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 117 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 118 | |
| 892 | 119 | qed_goal "ch2ch_fappR" Cfun2.thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 120 | "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 | 121 | (fn prems => | 
| 1461 | 122 | [ | 
| 123 | (cut_facts_tac prems 1), | |
| 124 | (etac (monofun_fapp2 RS ch2ch_MF2R) 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 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 128 | val 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 | 129 | (* 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 | 130 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 131 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 132 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 133 | (* 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 | 134 | (* use MF2 lemmas from Cont.ML *) | 
| 
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 | |
| 892 | 137 | qed_goal "lub_cfun_mono" Cfun2.thy | 
| 1461 | 138 | "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 | 139 | (fn prems => | 
| 1461 | 140 | [ | 
| 141 | (cut_facts_tac prems 1), | |
| 142 | (rtac lub_MF2_mono 1), | |
| 143 | (rtac monofun_fapp1 1), | |
| 144 | (rtac (monofun_fapp2 RS allI) 1), | |
| 145 | (atac 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 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 149 | (* 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 | 150 | (* use MF2 lemmas from Cont.ML *) | 
| 
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 | |
| 892 | 153 | qed_goal "ex_lubcfun" Cfun2.thy | 
| 1461 | 154 | "[| is_chain(F); is_chain(Y) |] ==>\ | 
| 155 | \ lub(range(%j. lub(range(%i. F(j)`(Y i))))) =\ | |
| 156 | \ 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 | 157 | (fn prems => | 
| 1461 | 158 | [ | 
| 159 | (cut_facts_tac prems 1), | |
| 160 | (rtac ex_lubMF2 1), | |
| 161 | (rtac monofun_fapp1 1), | |
| 162 | (rtac (monofun_fapp2 RS allI) 1), | |
| 163 | (atac 1), | |
| 164 | (atac 1) | |
| 165 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 166 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 167 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 168 | (* 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 | 169 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 170 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 171 | qed_goal "cont_lubcfun" Cfun2.thy | 
| 1461 | 172 | "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 | 173 | (fn prems => | 
| 1461 | 174 | [ | 
| 175 | (cut_facts_tac prems 1), | |
| 176 | (rtac monocontlub2cont 1), | |
| 177 | (etac lub_cfun_mono 1), | |
| 178 | (rtac contlubI 1), | |
| 179 | (strip_tac 1), | |
| 180 | (rtac (contlub_cfun_arg RS ext RS ssubst) 1), | |
| 181 | (atac 1), | |
| 182 | (etac ex_lubcfun 1), | |
| 183 | (atac 1) | |
| 184 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 185 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 186 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 187 | (* type 'a -> 'b is chain complete *) | 
| 
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 | |
| 892 | 190 | qed_goal "lub_cfun" Cfun2.thy | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 191 | "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 | 192 | (fn prems => | 
| 1461 | 193 | [ | 
| 194 | (cut_facts_tac prems 1), | |
| 195 | (rtac is_lubI 1), | |
| 196 | (rtac conjI 1), | |
| 197 | (rtac ub_rangeI 1), | |
| 198 | (rtac allI 1), | |
| 199 | (rtac (less_cfun RS ssubst) 1), | |
| 200 | (rtac (Abs_Cfun_inverse2 RS ssubst) 1), | |
| 201 | (etac cont_lubcfun 1), | |
| 202 | (rtac (lub_fun RS is_lubE RS conjunct1 RS ub_rangeE RS spec) 1), | |
| 203 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | |
| 204 | (strip_tac 1), | |
| 205 | (rtac (less_cfun RS ssubst) 1), | |
| 206 | (rtac (Abs_Cfun_inverse2 RS ssubst) 1), | |
| 207 | (etac cont_lubcfun 1), | |
| 208 | (rtac (lub_fun RS is_lubE RS conjunct2 RS spec RS mp) 1), | |
| 209 | (etac (monofun_fapp1 RS ch2ch_monofun) 1), | |
| 210 | (etac (monofun_fapp1 RS ub2ub_monofun) 1) | |
| 211 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 212 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 213 | val thelub_cfun = (lub_cfun RS thelubI); | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 214 | (* | 
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 215 | 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 | 216 | *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 217 | |
| 892 | 218 | qed_goal "cpo_cfun" Cfun2.thy | 
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 219 |   "is_chain(CCF::nat=>('a::pcpo->'b::pcpo)) ==> ? x. range(CCF) <<| x"
 | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 220 | (fn prems => | 
| 1461 | 221 | [ | 
| 222 | (cut_facts_tac prems 1), | |
| 223 | (rtac exI 1), | |
| 224 | (etac lub_cfun 1) | |
| 225 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 226 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 227 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 228 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 229 | (* Extensionality in 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 230 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 231 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 232 | 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 | 233 | (fn prems => | 
| 1461 | 234 | [ | 
| 235 |         (res_inst_tac [("t","f")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 236 |         (res_inst_tac [("t","g")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 237 |         (res_inst_tac [("f","fabs")] arg_cong 1),
 | |
| 238 | (rtac ext 1), | |
| 239 | (resolve_tac prems 1) | |
| 240 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 241 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 242 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 243 | (* Monotonicity of fabs *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 244 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 245 | |
| 892 | 246 | qed_goal "semi_monofun_fabs" Cfun2.thy | 
| 1461 | 247 | "[|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 | 248 | (fn prems => | 
| 1461 | 249 | [ | 
| 250 | (rtac (less_cfun RS iffD2) 1), | |
| 251 | (rtac (Abs_Cfun_inverse2 RS ssubst) 1), | |
| 252 | (resolve_tac prems 1), | |
| 253 | (rtac (Abs_Cfun_inverse2 RS ssubst) 1), | |
| 254 | (resolve_tac prems 1), | |
| 255 | (resolve_tac prems 1) | |
| 256 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 257 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 258 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 259 | (* Extenionality wrt. << in 'a -> 'b *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 260 | (* ------------------------------------------------------------------------ *) | 
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 261 | |
| 1168 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 regensbu parents: 
892diff
changeset | 262 | qed_goal "less_cfun2" 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 | 263 | (fn prems => | 
| 1461 | 264 | [ | 
| 265 |         (res_inst_tac [("t","f")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 266 |         (res_inst_tac [("t","g")] (Rep_Cfun_inverse RS subst) 1),
 | |
| 267 | (rtac semi_monofun_fabs 1), | |
| 268 | (rtac cont_fapp2 1), | |
| 269 | (rtac cont_fapp2 1), | |
| 270 | (rtac (less_fun RS iffD2) 1), | |
| 271 | (rtac allI 1), | |
| 272 | (resolve_tac prems 1) | |
| 273 | ]); | |
| 243 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 274 | |
| 
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
 nipkow parents: diff
changeset | 275 |