12 (* some lemmas restated for class pcpo *) |
12 (* some lemmas restated for class pcpo *) |
13 (* ------------------------------------------------------------------------ *) |
13 (* ------------------------------------------------------------------------ *) |
14 |
14 |
15 qed_goal "less_lift3b" Lift3.thy "~ Iup(x) << UU" |
15 qed_goal "less_lift3b" Lift3.thy "~ Iup(x) << UU" |
16 (fn prems => |
16 (fn prems => |
17 [ |
17 [ |
18 (rtac (inst_lift_pcpo RS ssubst) 1), |
18 (rtac (inst_lift_pcpo RS ssubst) 1), |
19 (rtac less_lift2b 1) |
19 (rtac less_lift2b 1) |
20 ]); |
20 ]); |
21 |
21 |
22 qed_goal "defined_Iup2" Lift3.thy "Iup(x) ~= UU" |
22 qed_goal "defined_Iup2" Lift3.thy "Iup(x) ~= UU" |
23 (fn prems => |
23 (fn prems => |
24 [ |
24 [ |
25 (rtac (inst_lift_pcpo RS ssubst) 1), |
25 (rtac (inst_lift_pcpo RS ssubst) 1), |
26 (rtac defined_Iup 1) |
26 (rtac defined_Iup 1) |
27 ]); |
27 ]); |
28 |
28 |
29 (* ------------------------------------------------------------------------ *) |
29 (* ------------------------------------------------------------------------ *) |
30 (* continuity for Iup *) |
30 (* continuity for Iup *) |
31 (* ------------------------------------------------------------------------ *) |
31 (* ------------------------------------------------------------------------ *) |
32 |
32 |
33 qed_goal "contlub_Iup" Lift3.thy "contlub(Iup)" |
33 qed_goal "contlub_Iup" Lift3.thy "contlub(Iup)" |
34 (fn prems => |
34 (fn prems => |
35 [ |
35 [ |
36 (rtac contlubI 1), |
36 (rtac contlubI 1), |
37 (strip_tac 1), |
37 (strip_tac 1), |
38 (rtac trans 1), |
38 (rtac trans 1), |
39 (rtac (thelub_lift1a RS sym) 2), |
39 (rtac (thelub_lift1a RS sym) 2), |
40 (fast_tac HOL_cs 3), |
40 (fast_tac HOL_cs 3), |
41 (etac (monofun_Iup RS ch2ch_monofun) 2), |
41 (etac (monofun_Iup RS ch2ch_monofun) 2), |
42 (res_inst_tac [("f","Iup")] arg_cong 1), |
42 (res_inst_tac [("f","Iup")] arg_cong 1), |
43 (rtac lub_equal 1), |
43 (rtac lub_equal 1), |
44 (atac 1), |
44 (atac 1), |
45 (rtac (monofun_Ilift2 RS ch2ch_monofun) 1), |
45 (rtac (monofun_Ilift2 RS ch2ch_monofun) 1), |
46 (etac (monofun_Iup RS ch2ch_monofun) 1), |
46 (etac (monofun_Iup RS ch2ch_monofun) 1), |
47 (asm_simp_tac Lift0_ss 1) |
47 (asm_simp_tac Lift0_ss 1) |
48 ]); |
48 ]); |
49 |
49 |
50 qed_goal "cont_Iup" Lift3.thy "cont(Iup)" |
50 qed_goal "cont_Iup" Lift3.thy "cont(Iup)" |
51 (fn prems => |
51 (fn prems => |
52 [ |
52 [ |
53 (rtac monocontlub2cont 1), |
53 (rtac monocontlub2cont 1), |
54 (rtac monofun_Iup 1), |
54 (rtac monofun_Iup 1), |
55 (rtac contlub_Iup 1) |
55 (rtac contlub_Iup 1) |
56 ]); |
56 ]); |
57 |
57 |
58 |
58 |
59 (* ------------------------------------------------------------------------ *) |
59 (* ------------------------------------------------------------------------ *) |
60 (* continuity for Ilift *) |
60 (* continuity for Ilift *) |
61 (* ------------------------------------------------------------------------ *) |
61 (* ------------------------------------------------------------------------ *) |
62 |
62 |
63 qed_goal "contlub_Ilift1" Lift3.thy "contlub(Ilift)" |
63 qed_goal "contlub_Ilift1" Lift3.thy "contlub(Ilift)" |
64 (fn prems => |
64 (fn prems => |
65 [ |
65 [ |
66 (rtac contlubI 1), |
66 (rtac contlubI 1), |
67 (strip_tac 1), |
67 (strip_tac 1), |
68 (rtac trans 1), |
68 (rtac trans 1), |
69 (rtac (thelub_fun RS sym) 2), |
69 (rtac (thelub_fun RS sym) 2), |
70 (etac (monofun_Ilift1 RS ch2ch_monofun) 2), |
70 (etac (monofun_Ilift1 RS ch2ch_monofun) 2), |
71 (rtac ext 1), |
71 (rtac ext 1), |
72 (res_inst_tac [("p","x")] liftE 1), |
72 (res_inst_tac [("p","x")] liftE 1), |
73 (asm_simp_tac Lift0_ss 1), |
73 (asm_simp_tac Lift0_ss 1), |
74 (rtac (lub_const RS thelubI RS sym) 1), |
74 (rtac (lub_const RS thelubI RS sym) 1), |
75 (asm_simp_tac Lift0_ss 1), |
75 (asm_simp_tac Lift0_ss 1), |
76 (etac contlub_cfun_fun 1) |
76 (etac contlub_cfun_fun 1) |
77 ]); |
77 ]); |
78 |
78 |
79 |
79 |
80 qed_goal "contlub_Ilift2" Lift3.thy "contlub(Ilift(f))" |
80 qed_goal "contlub_Ilift2" Lift3.thy "contlub(Ilift(f))" |
81 (fn prems => |
81 (fn prems => |
82 [ |
82 [ |
83 (rtac contlubI 1), |
83 (rtac contlubI 1), |
84 (strip_tac 1), |
84 (strip_tac 1), |
85 (rtac disjE 1), |
85 (rtac disjE 1), |
86 (rtac (thelub_lift1a RS ssubst) 2), |
86 (rtac (thelub_lift1a RS ssubst) 2), |
87 (atac 2), |
87 (atac 2), |
88 (atac 2), |
88 (atac 2), |
89 (asm_simp_tac Lift0_ss 2), |
89 (asm_simp_tac Lift0_ss 2), |
90 (rtac (thelub_lift1b RS ssubst) 3), |
90 (rtac (thelub_lift1b RS ssubst) 3), |
91 (atac 3), |
91 (atac 3), |
92 (atac 3), |
92 (atac 3), |
93 (fast_tac HOL_cs 1), |
93 (fast_tac HOL_cs 1), |
94 (asm_simp_tac Lift0_ss 2), |
94 (asm_simp_tac Lift0_ss 2), |
95 (rtac (chain_UU_I_inverse RS sym) 2), |
95 (rtac (chain_UU_I_inverse RS sym) 2), |
96 (rtac allI 2), |
96 (rtac allI 2), |
97 (res_inst_tac [("p","Y(i)")] liftE 2), |
97 (res_inst_tac [("p","Y(i)")] liftE 2), |
98 (asm_simp_tac Lift0_ss 2), |
98 (asm_simp_tac Lift0_ss 2), |
99 (rtac notE 2), |
99 (rtac notE 2), |
100 (dtac spec 2), |
100 (dtac spec 2), |
101 (etac spec 2), |
101 (etac spec 2), |
102 (atac 2), |
102 (atac 2), |
103 (rtac (contlub_cfun_arg RS ssubst) 1), |
103 (rtac (contlub_cfun_arg RS ssubst) 1), |
104 (etac (monofun_Ilift2 RS ch2ch_monofun) 1), |
104 (etac (monofun_Ilift2 RS ch2ch_monofun) 1), |
105 (rtac lub_equal2 1), |
105 (rtac lub_equal2 1), |
106 (rtac (monofun_fapp2 RS ch2ch_monofun) 2), |
106 (rtac (monofun_fapp2 RS ch2ch_monofun) 2), |
107 (etac (monofun_Ilift2 RS ch2ch_monofun) 2), |
107 (etac (monofun_Ilift2 RS ch2ch_monofun) 2), |
108 (etac (monofun_Ilift2 RS ch2ch_monofun) 2), |
108 (etac (monofun_Ilift2 RS ch2ch_monofun) 2), |
109 (rtac (chain_mono2 RS exE) 1), |
109 (rtac (chain_mono2 RS exE) 1), |
110 (atac 2), |
110 (atac 2), |
111 (etac exE 1), |
111 (etac exE 1), |
112 (etac exE 1), |
112 (etac exE 1), |
113 (rtac exI 1), |
113 (rtac exI 1), |
114 (res_inst_tac [("s","Iup(x)"),("t","Y(i)")] ssubst 1), |
114 (res_inst_tac [("s","Iup(x)"),("t","Y(i)")] ssubst 1), |
115 (atac 1), |
115 (atac 1), |
116 (rtac defined_Iup2 1), |
116 (rtac defined_Iup2 1), |
117 (rtac exI 1), |
117 (rtac exI 1), |
118 (strip_tac 1), |
118 (strip_tac 1), |
119 (res_inst_tac [("p","Y(i)")] liftE 1), |
119 (res_inst_tac [("p","Y(i)")] liftE 1), |
120 (asm_simp_tac Lift0_ss 2), |
120 (asm_simp_tac Lift0_ss 2), |
121 (res_inst_tac [("P","Y(i) = UU")] notE 1), |
121 (res_inst_tac [("P","Y(i) = UU")] notE 1), |
122 (fast_tac HOL_cs 1), |
122 (fast_tac HOL_cs 1), |
123 (rtac (inst_lift_pcpo RS ssubst) 1), |
123 (rtac (inst_lift_pcpo RS ssubst) 1), |
124 (atac 1) |
124 (atac 1) |
125 ]); |
125 ]); |
126 |
126 |
127 qed_goal "cont_Ilift1" Lift3.thy "cont(Ilift)" |
127 qed_goal "cont_Ilift1" Lift3.thy "cont(Ilift)" |
128 (fn prems => |
128 (fn prems => |
129 [ |
129 [ |
130 (rtac monocontlub2cont 1), |
130 (rtac monocontlub2cont 1), |
131 (rtac monofun_Ilift1 1), |
131 (rtac monofun_Ilift1 1), |
132 (rtac contlub_Ilift1 1) |
132 (rtac contlub_Ilift1 1) |
133 ]); |
133 ]); |
134 |
134 |
135 qed_goal "cont_Ilift2" Lift3.thy "cont(Ilift(f))" |
135 qed_goal "cont_Ilift2" Lift3.thy "cont(Ilift(f))" |
136 (fn prems => |
136 (fn prems => |
137 [ |
137 [ |
138 (rtac monocontlub2cont 1), |
138 (rtac monocontlub2cont 1), |
139 (rtac monofun_Ilift2 1), |
139 (rtac monofun_Ilift2 1), |
140 (rtac contlub_Ilift2 1) |
140 (rtac contlub_Ilift2 1) |
141 ]); |
141 ]); |
142 |
142 |
143 |
143 |
144 (* ------------------------------------------------------------------------ *) |
144 (* ------------------------------------------------------------------------ *) |
145 (* continuous versions of lemmas for ('a)u *) |
145 (* continuous versions of lemmas for ('a)u *) |
146 (* ------------------------------------------------------------------------ *) |
146 (* ------------------------------------------------------------------------ *) |
147 |
147 |
148 qed_goalw "Exh_Lift1" Lift3.thy [up_def] "z = UU | (? x. z = up`x)" |
148 qed_goalw "Exh_Lift1" Lift3.thy [up_def] "z = UU | (? x. z = up`x)" |
149 (fn prems => |
149 (fn prems => |
150 [ |
150 [ |
151 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
151 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
152 (rtac (inst_lift_pcpo RS ssubst) 1), |
152 (rtac (inst_lift_pcpo RS ssubst) 1), |
153 (rtac Exh_Lift 1) |
153 (rtac Exh_Lift 1) |
154 ]); |
154 ]); |
155 |
155 |
156 qed_goalw "inject_up" Lift3.thy [up_def] "up`x=up`y ==> x=y" |
156 qed_goalw "inject_up" Lift3.thy [up_def] "up`x=up`y ==> x=y" |
157 (fn prems => |
157 (fn prems => |
158 [ |
158 [ |
159 (cut_facts_tac prems 1), |
159 (cut_facts_tac prems 1), |
160 (rtac inject_Iup 1), |
160 (rtac inject_Iup 1), |
161 (etac box_equals 1), |
161 (etac box_equals 1), |
162 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
162 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
163 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
163 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
164 ]); |
164 ]); |
165 |
165 |
166 qed_goalw "defined_up" Lift3.thy [up_def] " up`x ~= UU" |
166 qed_goalw "defined_up" Lift3.thy [up_def] " up`x ~= UU" |
167 (fn prems => |
167 (fn prems => |
168 [ |
168 [ |
169 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
169 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
170 (rtac defined_Iup2 1) |
170 (rtac defined_Iup2 1) |
171 ]); |
171 ]); |
172 |
172 |
173 qed_goalw "liftE1" Lift3.thy [up_def] |
173 qed_goalw "liftE1" Lift3.thy [up_def] |
174 "[| p=UU ==> Q; !!x. p=up`x==>Q|] ==>Q" |
174 "[| p=UU ==> Q; !!x. p=up`x==>Q|] ==>Q" |
175 (fn prems => |
175 (fn prems => |
176 [ |
176 [ |
177 (rtac liftE 1), |
177 (rtac liftE 1), |
178 (resolve_tac prems 1), |
178 (resolve_tac prems 1), |
179 (etac (inst_lift_pcpo RS ssubst) 1), |
179 (etac (inst_lift_pcpo RS ssubst) 1), |
180 (resolve_tac (tl prems) 1), |
180 (resolve_tac (tl prems) 1), |
181 (asm_simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
181 (asm_simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
182 ]); |
182 ]); |
183 |
183 |
184 |
184 |
185 qed_goalw "lift1" Lift3.thy [up_def,lift_def] "lift`f`UU=UU" |
185 qed_goalw "lift1" Lift3.thy [up_def,lift_def] "lift`f`UU=UU" |
186 (fn prems => |
186 (fn prems => |
187 [ |
187 [ |
188 (rtac (inst_lift_pcpo RS ssubst) 1), |
188 (rtac (inst_lift_pcpo RS ssubst) 1), |
189 (rtac (beta_cfun RS ssubst) 1), |
189 (rtac (beta_cfun RS ssubst) 1), |
190 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
190 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
191 cont_Ilift2,cont2cont_CF1L]) 1)), |
191 cont_Ilift2,cont2cont_CF1L]) 1)), |
192 (rtac (beta_cfun RS ssubst) 1), |
192 (rtac (beta_cfun RS ssubst) 1), |
193 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
193 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
194 cont_Ilift2,cont2cont_CF1L]) 1)), |
194 cont_Ilift2,cont2cont_CF1L]) 1)), |
195 (simp_tac (Lift0_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1) |
195 (simp_tac (Lift0_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1) |
196 ]); |
196 ]); |
197 |
197 |
198 qed_goalw "lift2" Lift3.thy [up_def,lift_def] "lift`f`(up`x)=f`x" |
198 qed_goalw "lift2" Lift3.thy [up_def,lift_def] "lift`f`(up`x)=f`x" |
199 (fn prems => |
199 (fn prems => |
200 [ |
200 [ |
201 (rtac (beta_cfun RS ssubst) 1), |
201 (rtac (beta_cfun RS ssubst) 1), |
202 (rtac cont_Iup 1), |
202 (rtac cont_Iup 1), |
203 (rtac (beta_cfun RS ssubst) 1), |
203 (rtac (beta_cfun RS ssubst) 1), |
204 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
204 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
205 cont_Ilift2,cont2cont_CF1L]) 1)), |
205 cont_Ilift2,cont2cont_CF1L]) 1)), |
206 (rtac (beta_cfun RS ssubst) 1), |
206 (rtac (beta_cfun RS ssubst) 1), |
207 (rtac cont_Ilift2 1), |
207 (rtac cont_Ilift2 1), |
208 (simp_tac (Lift0_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1) |
208 (simp_tac (Lift0_ss addsimps [cont_Iup,cont_Ilift1,cont_Ilift2]) 1) |
209 ]); |
209 ]); |
210 |
210 |
211 qed_goalw "less_lift4b" Lift3.thy [up_def,lift_def] "~ up`x << UU" |
211 qed_goalw "less_lift4b" Lift3.thy [up_def,lift_def] "~ up`x << UU" |
212 (fn prems => |
212 (fn prems => |
213 [ |
213 [ |
214 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
214 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
215 (rtac less_lift3b 1) |
215 (rtac less_lift3b 1) |
216 ]); |
216 ]); |
217 |
217 |
218 qed_goalw "less_lift4c" Lift3.thy [up_def,lift_def] |
218 qed_goalw "less_lift4c" Lift3.thy [up_def,lift_def] |
219 "(up`x << up`y) = (x<<y)" |
219 "(up`x << up`y) = (x<<y)" |
220 (fn prems => |
220 (fn prems => |
221 [ |
221 [ |
222 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
222 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1), |
223 (rtac less_lift2c 1) |
223 (rtac less_lift2c 1) |
224 ]); |
224 ]); |
225 |
225 |
226 qed_goalw "thelub_lift2a" Lift3.thy [up_def,lift_def] |
226 qed_goalw "thelub_lift2a" Lift3.thy [up_def,lift_def] |
227 "[| is_chain(Y); ? i x. Y(i) = up`x |] ==>\ |
227 "[| is_chain(Y); ? i x. Y(i) = up`x |] ==>\ |
228 \ lub(range(Y)) = up`(lub(range(%i. lift`(LAM x. x)`(Y i))))" |
228 \ lub(range(Y)) = up`(lub(range(%i. lift`(LAM x. x)`(Y i))))" |
229 (fn prems => |
229 (fn prems => |
230 [ |
230 [ |
231 (cut_facts_tac prems 1), |
231 (cut_facts_tac prems 1), |
232 (rtac (beta_cfun RS ssubst) 1), |
232 (rtac (beta_cfun RS ssubst) 1), |
233 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
233 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
234 cont_Ilift2,cont2cont_CF1L]) 1)), |
234 cont_Ilift2,cont2cont_CF1L]) 1)), |
235 (rtac (beta_cfun RS ssubst) 1), |
235 (rtac (beta_cfun RS ssubst) 1), |
236 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
236 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
237 cont_Ilift2,cont2cont_CF1L]) 1)), |
237 cont_Ilift2,cont2cont_CF1L]) 1)), |
238 |
238 |
239 (rtac (beta_cfun RS ext RS ssubst) 1), |
239 (rtac (beta_cfun RS ext RS ssubst) 1), |
240 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
240 (REPEAT (resolve_tac (cont_lemmas @ [cont_Iup,cont_Ilift1, |
241 cont_Ilift2,cont2cont_CF1L]) 1)), |
241 cont_Ilift2,cont2cont_CF1L]) 1)), |
242 (rtac thelub_lift1a 1), |
242 (rtac thelub_lift1a 1), |
243 (atac 1), |
243 (atac 1), |
244 (etac exE 1), |
244 (etac exE 1), |
245 (etac exE 1), |
245 (etac exE 1), |
246 (rtac exI 1), |
246 (rtac exI 1), |
247 (rtac exI 1), |
247 (rtac exI 1), |
248 (etac box_equals 1), |
248 (etac box_equals 1), |
249 (rtac refl 1), |
249 (rtac refl 1), |
250 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
250 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
251 ]); |
251 ]); |
252 |
252 |
253 |
253 |
254 |
254 |
255 qed_goalw "thelub_lift2b" Lift3.thy [up_def,lift_def] |
255 qed_goalw "thelub_lift2b" Lift3.thy [up_def,lift_def] |
256 "[| is_chain(Y); ! i x. Y(i) ~= up`x |] ==> lub(range(Y)) = UU" |
256 "[| is_chain(Y); ! i x. Y(i) ~= up`x |] ==> lub(range(Y)) = UU" |
257 (fn prems => |
257 (fn prems => |
258 [ |
258 [ |
259 (cut_facts_tac prems 1), |
259 (cut_facts_tac prems 1), |
260 (rtac (inst_lift_pcpo RS ssubst) 1), |
260 (rtac (inst_lift_pcpo RS ssubst) 1), |
261 (rtac thelub_lift1b 1), |
261 (rtac thelub_lift1b 1), |
262 (atac 1), |
262 (atac 1), |
263 (strip_tac 1), |
263 (strip_tac 1), |
264 (dtac spec 1), |
264 (dtac spec 1), |
265 (dtac spec 1), |
265 (dtac spec 1), |
266 (rtac swap 1), |
266 (rtac swap 1), |
267 (atac 1), |
267 (atac 1), |
268 (dtac notnotD 1), |
268 (dtac notnotD 1), |
269 (etac box_equals 1), |
269 (etac box_equals 1), |
270 (rtac refl 1), |
270 (rtac refl 1), |
271 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
271 (simp_tac (Lift0_ss addsimps [cont_Iup]) 1) |
272 ]); |
272 ]); |
273 |
273 |
274 |
274 |
275 qed_goal "lift_lemma2" Lift3.thy " (? x.z = up`x) = (z~=UU)" |
275 qed_goal "lift_lemma2" Lift3.thy " (? x.z = up`x) = (z~=UU)" |
276 (fn prems => |
276 (fn prems => |
277 [ |
277 [ |
278 (rtac iffI 1), |
278 (rtac iffI 1), |
279 (etac exE 1), |
279 (etac exE 1), |
280 (hyp_subst_tac 1), |
280 (hyp_subst_tac 1), |
281 (rtac defined_up 1), |
281 (rtac defined_up 1), |
282 (res_inst_tac [("p","z")] liftE1 1), |
282 (res_inst_tac [("p","z")] liftE1 1), |
283 (etac notE 1), |
283 (etac notE 1), |
284 (atac 1), |
284 (atac 1), |
285 (etac exI 1) |
285 (etac exI 1) |
286 ]); |
286 ]); |
287 |
287 |
288 |
288 |
289 qed_goal "thelub_lift2a_rev" Lift3.thy |
289 qed_goal "thelub_lift2a_rev" Lift3.thy |
290 "[| is_chain(Y); lub(range(Y)) = up`x |] ==> ? i x. Y(i) = up`x" |
290 "[| is_chain(Y); lub(range(Y)) = up`x |] ==> ? i x. Y(i) = up`x" |
291 (fn prems => |
291 (fn prems => |
292 [ |
292 [ |
293 (cut_facts_tac prems 1), |
293 (cut_facts_tac prems 1), |
294 (rtac exE 1), |
294 (rtac exE 1), |
295 (rtac chain_UU_I_inverse2 1), |
295 (rtac chain_UU_I_inverse2 1), |
296 (rtac (lift_lemma2 RS iffD1) 1), |
296 (rtac (lift_lemma2 RS iffD1) 1), |
297 (etac exI 1), |
297 (etac exI 1), |
298 (rtac exI 1), |
298 (rtac exI 1), |
299 (rtac (lift_lemma2 RS iffD2) 1), |
299 (rtac (lift_lemma2 RS iffD2) 1), |
300 (atac 1) |
300 (atac 1) |
301 ]); |
301 ]); |
302 |
302 |
303 qed_goal "thelub_lift2b_rev" Lift3.thy |
303 qed_goal "thelub_lift2b_rev" Lift3.thy |
304 "[| is_chain(Y); lub(range(Y)) = UU |] ==> ! i x. Y(i) ~= up`x" |
304 "[| is_chain(Y); lub(range(Y)) = UU |] ==> ! i x. Y(i) ~= up`x" |
305 (fn prems => |
305 (fn prems => |
306 [ |
306 [ |
307 (cut_facts_tac prems 1), |
307 (cut_facts_tac prems 1), |
308 (rtac allI 1), |
308 (rtac allI 1), |
309 (rtac (notex2all RS iffD1) 1), |
309 (rtac (notex2all RS iffD1) 1), |
310 (rtac contrapos 1), |
310 (rtac contrapos 1), |
311 (etac (lift_lemma2 RS iffD1) 2), |
311 (etac (lift_lemma2 RS iffD1) 2), |
312 (rtac notnotI 1), |
312 (rtac notnotI 1), |
313 (rtac (chain_UU_I RS spec) 1), |
313 (rtac (chain_UU_I RS spec) 1), |
314 (atac 1), |
314 (atac 1), |
315 (atac 1) |
315 (atac 1) |
316 ]); |
316 ]); |
317 |
317 |
318 |
318 |
319 qed_goal "thelub_lift3" Lift3.thy |
319 qed_goal "thelub_lift3" Lift3.thy |
320 "is_chain(Y) ==> lub(range(Y)) = UU |\ |
320 "is_chain(Y) ==> lub(range(Y)) = UU |\ |
321 \ lub(range(Y)) = up`(lub(range(%i. lift`(LAM x.x)`(Y i))))" |
321 \ lub(range(Y)) = up`(lub(range(%i. lift`(LAM x.x)`(Y i))))" |
322 (fn prems => |
322 (fn prems => |
323 [ |
323 [ |
324 (cut_facts_tac prems 1), |
324 (cut_facts_tac prems 1), |
325 (rtac disjE 1), |
325 (rtac disjE 1), |
326 (rtac disjI1 2), |
326 (rtac disjI1 2), |
327 (rtac thelub_lift2b 2), |
327 (rtac thelub_lift2b 2), |
328 (atac 2), |
328 (atac 2), |
329 (atac 2), |
329 (atac 2), |
330 (rtac disjI2 2), |
330 (rtac disjI2 2), |
331 (rtac thelub_lift2a 2), |
331 (rtac thelub_lift2a 2), |
332 (atac 2), |
332 (atac 2), |
333 (atac 2), |
333 (atac 2), |
334 (fast_tac HOL_cs 1) |
334 (fast_tac HOL_cs 1) |
335 ]); |
335 ]); |
336 |
336 |
337 qed_goal "lift3" Lift3.thy "lift`up`x=x" |
337 qed_goal "lift3" Lift3.thy "lift`up`x=x" |
338 (fn prems => |
338 (fn prems => |
339 [ |
339 [ |
340 (res_inst_tac [("p","x")] liftE1 1), |
340 (res_inst_tac [("p","x")] liftE1 1), |
341 (asm_simp_tac ((simpset_of "Cfun3") addsimps [lift1,lift2]) 1), |
341 (asm_simp_tac ((simpset_of "Cfun3") addsimps [lift1,lift2]) 1), |
342 (asm_simp_tac ((simpset_of "Cfun3") addsimps [lift1,lift2]) 1) |
342 (asm_simp_tac ((simpset_of "Cfun3") addsimps [lift1,lift2]) 1) |
343 ]); |
343 ]); |
344 |
344 |
345 (* ------------------------------------------------------------------------ *) |
345 (* ------------------------------------------------------------------------ *) |
346 (* install simplifier for ('a)u *) |
346 (* install simplifier for ('a)u *) |
347 (* ------------------------------------------------------------------------ *) |
347 (* ------------------------------------------------------------------------ *) |
348 |
348 |