| author | wenzelm | 
| Wed, 27 Nov 1996 16:41:27 +0100 | |
| changeset 2255 | f9126d306a02 | 
| 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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
changeset
 | 
132  | 
qed_goal "cont2mono_LAM" Cfun3.thy  | 
| 
 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 
regensbu 
parents: 
961 
diff
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: 
961 
diff
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: 
961 
diff
changeset
 | 
154  | 
qed_goal "cont2cont_LAM" Cfun3.thy  | 
| 
 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 
regensbu 
parents: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
changeset
 | 
188  | 
[| !!x. cont (?c1.0 x);  | 
| 
 
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
 
regensbu 
parents: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
961 
diff
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: 
892 
diff
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: 
961 
diff
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));  |