author | wenzelm |
Fri, 16 Apr 1999 14:42:44 +0200 | |
changeset 6435 | 154b88d2b62e |
parent 4721 | c8a8482a8124 |
child 9245 | 428385c4bc50 |
permissions | -rw-r--r-- |
1461 | 1 |
(* Title: HOLCF/cprod3.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 |
Lemmas for Cprod3.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 Cprod3; |
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_cprod_pcpo" thy "UU = (UU,UU)" |
|
13 |
(fn prems => |
|
14 |
[ |
|
15 |
(simp_tac (HOL_ss addsimps [UU_def,UU_cprod_def]) 1) |
|
16 |
]); |
|
17 |
||
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
18 |
(* ------------------------------------------------------------------------ *) |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
19 |
(* continuity of (_,_) , fst, snd *) |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
20 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
21 |
|
892 | 22 |
qed_goal "Cprod3_lemma1" Cprod3.thy |
4721
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents:
4098
diff
changeset
|
23 |
"chain(Y::(nat=>'a::cpo)) ==>\ |
2840
7e03e61612b0
generalized theorems and class instances for Cprod.
slotosch
parents:
2640
diff
changeset
|
24 |
\ (lub(range(Y)),(x::'b::cpo)) =\ |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
25 |
\ (lub(range(%i. fst(Y i,x))),lub(range(%i. snd(Y i,x))))" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
26 |
(fn prems => |
1461 | 27 |
[ |
28 |
(cut_facts_tac prems 1), |
|
29 |
(res_inst_tac [("f1","Pair")] (arg_cong RS cong) 1), |
|
30 |
(rtac lub_equal 1), |
|
31 |
(atac 1), |
|
32 |
(rtac (monofun_fst RS ch2ch_monofun) 1), |
|
33 |
(rtac ch2ch_fun 1), |
|
34 |
(rtac (monofun_pair1 RS ch2ch_monofun) 1), |
|
35 |
(atac 1), |
|
36 |
(rtac allI 1), |
|
37 |
(Simp_tac 1), |
|
38 |
(rtac sym 1), |
|
39 |
(Simp_tac 1), |
|
40 |
(rtac (lub_const RS thelubI) 1) |
|
41 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
42 |
|
892 | 43 |
qed_goal "contlub_pair1" Cprod3.thy "contlub(Pair)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
44 |
(fn prems => |
1461 | 45 |
[ |
46 |
(rtac contlubI 1), |
|
47 |
(strip_tac 1), |
|
48 |
(rtac (expand_fun_eq RS iffD2) 1), |
|
49 |
(strip_tac 1), |
|
2033 | 50 |
(stac (lub_fun RS thelubI) 1), |
1461 | 51 |
(etac (monofun_pair1 RS ch2ch_monofun) 1), |
52 |
(rtac trans 1), |
|
53 |
(rtac (thelub_cprod RS sym) 2), |
|
54 |
(rtac ch2ch_fun 2), |
|
55 |
(etac (monofun_pair1 RS ch2ch_monofun) 2), |
|
56 |
(etac Cprod3_lemma1 1) |
|
57 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
58 |
|
892 | 59 |
qed_goal "Cprod3_lemma2" Cprod3.thy |
4721
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents:
4098
diff
changeset
|
60 |
"chain(Y::(nat=>'a::cpo)) ==>\ |
2840
7e03e61612b0
generalized theorems and class instances for Cprod.
slotosch
parents:
2640
diff
changeset
|
61 |
\ ((x::'b::cpo),lub(range Y)) =\ |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
62 |
\ (lub(range(%i. fst(x,Y i))),lub(range(%i. snd(x, Y i))))" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
63 |
(fn prems => |
1461 | 64 |
[ |
65 |
(cut_facts_tac prems 1), |
|
66 |
(res_inst_tac [("f1","Pair")] (arg_cong RS cong) 1), |
|
67 |
(rtac sym 1), |
|
68 |
(Simp_tac 1), |
|
69 |
(rtac (lub_const RS thelubI) 1), |
|
70 |
(rtac lub_equal 1), |
|
71 |
(atac 1), |
|
72 |
(rtac (monofun_snd RS ch2ch_monofun) 1), |
|
73 |
(rtac (monofun_pair2 RS ch2ch_monofun) 1), |
|
74 |
(atac 1), |
|
75 |
(rtac allI 1), |
|
76 |
(Simp_tac 1) |
|
77 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
78 |
|
892 | 79 |
qed_goal "contlub_pair2" Cprod3.thy "contlub(Pair(x))" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
80 |
(fn prems => |
1461 | 81 |
[ |
82 |
(rtac contlubI 1), |
|
83 |
(strip_tac 1), |
|
84 |
(rtac trans 1), |
|
85 |
(rtac (thelub_cprod RS sym) 2), |
|
86 |
(etac (monofun_pair2 RS ch2ch_monofun) 2), |
|
87 |
(etac Cprod3_lemma2 1) |
|
88 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
89 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
90 |
qed_goal "cont_pair1" Cprod3.thy "cont(Pair)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
91 |
(fn prems => |
1461 | 92 |
[ |
93 |
(rtac monocontlub2cont 1), |
|
94 |
(rtac monofun_pair1 1), |
|
95 |
(rtac contlub_pair1 1) |
|
96 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
97 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
98 |
qed_goal "cont_pair2" Cprod3.thy "cont(Pair(x))" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
99 |
(fn prems => |
1461 | 100 |
[ |
101 |
(rtac monocontlub2cont 1), |
|
102 |
(rtac monofun_pair2 1), |
|
103 |
(rtac contlub_pair2 1) |
|
104 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
105 |
|
892 | 106 |
qed_goal "contlub_fst" Cprod3.thy "contlub(fst)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
107 |
(fn prems => |
1461 | 108 |
[ |
109 |
(rtac contlubI 1), |
|
110 |
(strip_tac 1), |
|
2033 | 111 |
(stac (lub_cprod RS thelubI) 1), |
1461 | 112 |
(atac 1), |
113 |
(Simp_tac 1) |
|
114 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
115 |
|
892 | 116 |
qed_goal "contlub_snd" Cprod3.thy "contlub(snd)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
117 |
(fn prems => |
1461 | 118 |
[ |
119 |
(rtac contlubI 1), |
|
120 |
(strip_tac 1), |
|
2033 | 121 |
(stac (lub_cprod RS thelubI) 1), |
1461 | 122 |
(atac 1), |
123 |
(Simp_tac 1) |
|
124 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
125 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
126 |
qed_goal "cont_fst" Cprod3.thy "cont(fst)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
127 |
(fn prems => |
1461 | 128 |
[ |
129 |
(rtac monocontlub2cont 1), |
|
130 |
(rtac monofun_fst 1), |
|
131 |
(rtac contlub_fst 1) |
|
132 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
133 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
134 |
qed_goal "cont_snd" Cprod3.thy "cont(snd)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
135 |
(fn prems => |
1461 | 136 |
[ |
137 |
(rtac monocontlub2cont 1), |
|
138 |
(rtac monofun_snd 1), |
|
139 |
(rtac contlub_snd 1) |
|
140 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
141 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
142 |
(* |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
143 |
-------------------------------------------------------------------------- |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
144 |
more lemmas for Cprod3.thy |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
145 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
146 |
-------------------------------------------------------------------------- |
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 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
150 |
(* convert all lemmas to the continuous versions *) |
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_goalw "beta_cfun_cprod" Cprod3.thy [cpair_def] |
1461 | 154 |
"(LAM x y.(x,y))`a`b = (a,b)" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
155 |
(fn prems => |
1461 | 156 |
[ |
2033 | 157 |
(stac beta_cfun 1), |
4098 | 158 |
(simp_tac (simpset() addsimps [cont_pair1,cont_pair2,cont2cont_CF1L]) 1), |
2033 | 159 |
(stac beta_cfun 1), |
1461 | 160 |
(rtac cont_pair2 1), |
161 |
(rtac refl 1) |
|
162 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
163 |
|
892 | 164 |
qed_goalw "inject_cpair" Cprod3.thy [cpair_def] |
1461 | 165 |
" <a,b>=<aa,ba> ==> a=aa & b=ba" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
166 |
(fn prems => |
1461 | 167 |
[ |
168 |
(cut_facts_tac prems 1), |
|
169 |
(dtac (beta_cfun_cprod RS subst) 1), |
|
170 |
(dtac (beta_cfun_cprod RS subst) 1), |
|
171 |
(etac Pair_inject 1), |
|
172 |
(fast_tac HOL_cs 1) |
|
173 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
174 |
|
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
175 |
qed_goalw "inst_cprod_pcpo2" Cprod3.thy [cpair_def] "UU = <UU,UU>" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
176 |
(fn prems => |
1461 | 177 |
[ |
178 |
(rtac sym 1), |
|
179 |
(rtac trans 1), |
|
180 |
(rtac beta_cfun_cprod 1), |
|
181 |
(rtac sym 1), |
|
182 |
(rtac inst_cprod_pcpo 1) |
|
183 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
184 |
|
892 | 185 |
qed_goal "defined_cpair_rev" Cprod3.thy |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
186 |
"<a,b> = UU ==> a = UU & b = UU" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
187 |
(fn prems => |
1461 | 188 |
[ |
189 |
(cut_facts_tac prems 1), |
|
190 |
(dtac (inst_cprod_pcpo2 RS subst) 1), |
|
191 |
(etac inject_cpair 1) |
|
192 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
193 |
|
892 | 194 |
qed_goalw "Exh_Cprod2" Cprod3.thy [cpair_def] |
1461 | 195 |
"? a b. z=<a,b>" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
196 |
(fn prems => |
1461 | 197 |
[ |
198 |
(rtac PairE 1), |
|
199 |
(rtac exI 1), |
|
200 |
(rtac exI 1), |
|
201 |
(etac (beta_cfun_cprod RS ssubst) 1) |
|
202 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
203 |
|
892 | 204 |
qed_goalw "cprodE" Cprod3.thy [cpair_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
205 |
"[|!!x y. [|p=<x,y> |] ==> Q|] ==> Q" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
206 |
(fn prems => |
1461 | 207 |
[ |
208 |
(rtac PairE 1), |
|
209 |
(resolve_tac prems 1), |
|
210 |
(etac (beta_cfun_cprod RS ssubst) 1) |
|
211 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
212 |
|
892 | 213 |
qed_goalw "cfst2" Cprod3.thy [cfst_def,cpair_def] |
1461 | 214 |
"cfst`<x,y>=x" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
215 |
(fn prems => |
1461 | 216 |
[ |
217 |
(cut_facts_tac prems 1), |
|
2033 | 218 |
(stac beta_cfun_cprod 1), |
219 |
(stac beta_cfun 1), |
|
1461 | 220 |
(rtac cont_fst 1), |
221 |
(Simp_tac 1) |
|
222 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
223 |
|
892 | 224 |
qed_goalw "csnd2" Cprod3.thy [csnd_def,cpair_def] |
1461 | 225 |
"csnd`<x,y>=y" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
226 |
(fn prems => |
1461 | 227 |
[ |
228 |
(cut_facts_tac prems 1), |
|
2033 | 229 |
(stac beta_cfun_cprod 1), |
230 |
(stac beta_cfun 1), |
|
1461 | 231 |
(rtac cont_snd 1), |
232 |
(Simp_tac 1) |
|
233 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
234 |
|
2444 | 235 |
qed_goal "cfst_strict" Cprod3.thy "cfst`UU = UU" (fn _ => [ |
2640 | 236 |
(simp_tac (HOL_ss addsimps [inst_cprod_pcpo2,cfst2]) 1)]); |
2444 | 237 |
qed_goal "csnd_strict" Cprod3.thy "csnd`UU = UU" (fn _ => [ |
2640 | 238 |
(simp_tac (HOL_ss addsimps [inst_cprod_pcpo2,csnd2]) 1)]); |
2444 | 239 |
|
892 | 240 |
qed_goalw "surjective_pairing_Cprod2" Cprod3.thy |
1461 | 241 |
[cfst_def,csnd_def,cpair_def] "<cfst`p , csnd`p> = p" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
242 |
(fn prems => |
1461 | 243 |
[ |
2033 | 244 |
(stac beta_cfun_cprod 1), |
245 |
(stac beta_cfun 1), |
|
1461 | 246 |
(rtac cont_snd 1), |
2033 | 247 |
(stac beta_cfun 1), |
1461 | 248 |
(rtac cont_fst 1), |
249 |
(rtac (surjective_pairing RS sym) 1) |
|
250 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
251 |
|
892 | 252 |
qed_goalw "less_cprod5c" Cprod3.thy [cfst_def,csnd_def,cpair_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
253 |
"<xa,ya> << <x,y> ==> xa<<x & ya << y" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
254 |
(fn prems => |
1461 | 255 |
[ |
256 |
(cut_facts_tac prems 1), |
|
257 |
(rtac less_cprod4c 1), |
|
258 |
(dtac (beta_cfun_cprod RS subst) 1), |
|
259 |
(dtac (beta_cfun_cprod RS subst) 1), |
|
260 |
(atac 1) |
|
261 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
262 |
|
892 | 263 |
qed_goalw "lub_cprod2" Cprod3.thy [cfst_def,csnd_def,cpair_def] |
4721
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents:
4098
diff
changeset
|
264 |
"[|chain(S)|] ==> range(S) <<| \ |
3842 | 265 |
\ <(lub(range(%i. cfst`(S i)))) , lub(range(%i. csnd`(S i)))>" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
266 |
(fn prems => |
1461 | 267 |
[ |
268 |
(cut_facts_tac prems 1), |
|
2033 | 269 |
(stac beta_cfun_cprod 1), |
270 |
(stac (beta_cfun RS ext) 1), |
|
1461 | 271 |
(rtac cont_snd 1), |
2033 | 272 |
(stac (beta_cfun RS ext) 1), |
1461 | 273 |
(rtac cont_fst 1), |
274 |
(rtac lub_cprod 1), |
|
275 |
(atac 1) |
|
276 |
]); |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
277 |
|
1779 | 278 |
bind_thm ("thelub_cprod2", lub_cprod2 RS thelubI); |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
279 |
(* |
4721
c8a8482a8124
renamed is_chain to chain, is_tord to tord, replaced chain_finite by chfin
oheimb
parents:
4098
diff
changeset
|
280 |
chain ?S1 ==> |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
281 |
lub (range ?S1) = |
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
282 |
<lub (range (%i. cfst`(?S1 i))), lub (range (%i. csnd`(?S1 i)))>" |
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
283 |
*) |
892 | 284 |
qed_goalw "csplit2" Cprod3.thy [csplit_def] |
1461 | 285 |
"csplit`f`<x,y> = f`x`y" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
286 |
(fn prems => |
1461 | 287 |
[ |
2033 | 288 |
(stac beta_cfun 1), |
1461 | 289 |
(Simp_tac 1), |
4098 | 290 |
(simp_tac (simpset() addsimps [cfst2,csnd2]) 1) |
1461 | 291 |
]); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
292 |
|
892 | 293 |
qed_goalw "csplit3" Cprod3.thy [csplit_def] |
1168
74be52691d62
The curried version of HOLCF is now just called HOLCF. The old
regensbu
parents:
899
diff
changeset
|
294 |
"csplit`cpair`z=z" |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
295 |
(fn prems => |
1461 | 296 |
[ |
2033 | 297 |
(stac beta_cfun 1), |
2566 | 298 |
(Simp_tac 1), |
4098 | 299 |
(simp_tac (simpset() addsimps [surjective_pairing_Cprod2]) 1) |
1461 | 300 |
]); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
301 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
302 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
303 |
(* install simplifier for Cprod *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
304 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
305 |
|
1267 | 306 |
Addsimps [cfst2,csnd2,csplit2]; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
307 |
|
1274 | 308 |
val Cprod_rews = [cfst2,csnd2,csplit2]; |