252 by (REPEAT_FIRST (eresolve_tac mov_metrics)); |
252 by (REPEAT_FIRST (eresolve_tac mov_metrics)); |
253 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls))); |
253 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls))); |
254 by (Blast_tac 1); |
254 by (Blast_tac 1); |
255 qed "E_thm16a"; |
255 qed "E_thm16a"; |
256 |
256 |
|
257 (*Must sometimes delete them because they introduce multiplication*) |
|
258 val metric_ss = simpset() delsimprocs [Int_CC.sum_conv, Int_CC.rel_conv] |
|
259 addsimps metric_simps; |
|
260 |
|
261 |
257 (*lem_lift_5_1 has ~goingup instead of goingdown*) |
262 (*lem_lift_5_1 has ~goingup instead of goingdown*) |
258 Goal "#0<N ==> \ |
263 Goal "#0<N ==> \ |
259 \ Lift : (closed Int Req n Int {s. metric n s = N} Int goingdown) LeadsTo \ |
264 \ Lift : (closed Int Req n Int {s. metric n s = N} Int goingdown) LeadsTo \ |
260 \ (moving Int Req n Int {s. metric n s < N})"; |
265 \ (moving Int Req n Int {s. metric n s < N})"; |
261 by (cut_facts_tac [bounded] 1); |
266 by (cut_facts_tac [bounded] 1); |
262 by (ensures_tac "req_down" 1); |
267 by (ensures_tac "req_down" 1); |
263 by Auto_tac; |
268 by Auto_tac; |
264 by (REPEAT_FIRST (eresolve_tac mov_metrics)); |
269 by (REPEAT_FIRST (eresolve_tac mov_metrics)); |
265 by (ALLGOALS (asm_simp_tac (simpset() addsimps metric_simps @ zcompare_rls))); |
270 by (ALLGOALS (asm_simp_tac (metric_ss addsimps zcompare_rls))); |
266 by (Blast_tac 1); |
271 by (Blast_tac 1); |
267 qed "E_thm16b"; |
272 qed "E_thm16b"; |
268 |
|
269 |
273 |
270 |
274 |
271 (*lem_lift_5_0 proves an intersection involving ~goingup and goingup, |
275 (*lem_lift_5_0 proves an intersection involving ~goingup and goingup, |
272 i.e. the trivial disjunction, leading to an asymmetrical proof.*) |
276 i.e. the trivial disjunction, leading to an asymmetrical proof.*) |
273 Goal "#0<N ==> Req n Int {s. metric n s = N} <= goingup Un goingdown"; |
277 Goal "#0<N ==> Req n Int {s. metric n s = N} <= goingup Un goingdown"; |
274 by (asm_simp_tac (simpset() addsimps metric_simps) 1); |
278 by (asm_simp_tac metric_ss 1); |
275 by (force_tac (claset() delrules [impCE] addEs [impCE], |
279 by (force_tac (claset() delrules [impCE] addEs [impCE], |
276 simpset() addsimps conj_comms) 1); |
280 simpset() addsimps conj_comms) 1); |
277 qed "E_thm16c"; |
281 qed "E_thm16c"; |
278 |
282 |
279 |
283 |
292 |
296 |
293 (*lemma used to prove lem_lift_3_1*) |
297 (*lemma used to prove lem_lift_3_1*) |
294 Goal "[| metric n s = #0; Min <= floor s; floor s <= Max |] ==> floor s = n"; |
298 Goal "[| metric n s = #0; Min <= floor s; floor s <= Max |] ==> floor s = n"; |
295 by (etac rev_mp 1); |
299 by (etac rev_mp 1); |
296 (*force simplification of "metric..." while in conclusion part*) |
300 (*force simplification of "metric..." while in conclusion part*) |
297 by (asm_simp_tac (simpset() addsimps metric_simps) 1); |
301 by (asm_simp_tac metric_ss 1); |
298 qed "metric_eq_0D"; |
302 qed "metric_eq_0D"; |
299 |
303 |
300 AddDs [metric_eq_0D]; |
304 AddDs [metric_eq_0D]; |
301 |
305 |
302 |
306 |
307 by (ensures_tac "request_act" 1); |
311 by (ensures_tac "request_act" 1); |
308 by Auto_tac; |
312 by Auto_tac; |
309 qed "E_thm11"; |
313 qed "E_thm11"; |
310 |
314 |
311 val metric_tac = REPEAT (FIRSTGOAL (eresolve_tac mov_metrics)) |
315 val metric_tac = REPEAT (FIRSTGOAL (eresolve_tac mov_metrics)) |
312 THEN auto_tac (claset(), simpset() addsimps metric_simps); |
316 THEN auto_tac (claset(), metric_ss); |
313 |
317 |
314 (*lem_lift_3_5*) |
318 (*lem_lift_3_5*) |
315 Goal |
319 Goal |
316 "Lift : (moving Int Req n Int {s. metric n s = N} Int {s. floor s : req s}) \ |
320 "Lift : (moving Int Req n Int {s. metric n s = N} Int {s. floor s : req s}) \ |
317 \ LeadsTo (stopped Int Req n Int {s. metric n s = N} Int {s. floor s : req s})"; |
321 \ LeadsTo (stopped Int Req n Int {s. metric n s = N} Int {s. floor s : req s})"; |