336 Goalw [LOCALTO_def, stable_def, constrains_def] |
336 Goalw [LOCALTO_def, stable_def, constrains_def] |
337 "G : v localTo[C] F ==> G : (f o v) localTo[C] F"; |
337 "G : v localTo[C] F ==> G : (f o v) localTo[C] F"; |
338 by (Force_tac 1); |
338 by (Force_tac 1); |
339 qed "localTo_imp_o_localTo"; |
339 qed "localTo_imp_o_localTo"; |
340 |
340 |
|
341 Goal "G : v LocalTo F ==> G : (f o v) LocalTo F"; |
|
342 by (asm_full_simp_tac |
|
343 (simpset() addsimps [LocalTo_def, localTo_imp_o_localTo]) 1); |
|
344 qed "LocalTo_imp_o_LocalTo"; |
|
345 |
341 (*NOT USED*) |
346 (*NOT USED*) |
342 Goalw [LOCALTO_def, stable_def, constrains_def] |
347 Goalw [LOCALTO_def, stable_def, constrains_def] |
343 "(%s. x) localTo[C] F = UNIV"; |
348 "(%s. x) localTo[C] F = UNIV"; |
344 by (Blast_tac 1); |
349 by (Blast_tac 1); |
345 qed "triv_localTo_eq_UNIV"; |
350 qed "triv_localTo_eq_UNIV"; |
364 Goal "(F Join G : v LocalTo F) = (G : v LocalTo F)"; |
369 Goal "(F Join G : v LocalTo F) = (G : v LocalTo F)"; |
365 by (simp_tac (simpset() addsimps [self_Join_localTo, LocalTo_def, |
370 by (simp_tac (simpset() addsimps [self_Join_localTo, LocalTo_def, |
366 Join_left_absorb]) 1); |
371 Join_left_absorb]) 1); |
367 qed "self_Join_LocalTo"; |
372 qed "self_Join_LocalTo"; |
368 |
373 |
|
374 Goalw [LOCALTO_def] |
|
375 "[| G : v localTo[C] F; F<=F' |] ==> G : v localTo[C] F'"; |
|
376 by (Force_tac 1); |
|
377 qed "localTo_imp_o_localTo"; |
|
378 |
369 |
379 |
370 |
380 |
371 (*** Higher-level rules involving localTo and Join ***) |
381 (*** Higher-level rules involving localTo and Join ***) |
372 |
382 |
373 Goal "[| F : {s. P (v s)} co {s. P' (v s)}; G : v localTo[C] F |] \ |
383 Goal "[| F : {s. P (v s)} co B; G : v localTo[C] F |] \ |
374 \ ==> G : C Int {s. P (v s)} co {s. P' (v s)}"; |
384 \ ==> G : C Int {s. P (v s)} co B"; |
375 by (ftac constrains_imp_subset 1); |
385 by (ftac constrains_imp_subset 1); |
376 by (auto_tac (claset(), |
386 by (auto_tac (claset(), |
377 simpset() addsimps [LOCALTO_def, stable_def, constrains_def, |
387 simpset() addsimps [LOCALTO_def, stable_def, constrains_def, |
378 Diff_def])); |
388 Diff_def])); |
379 by (case_tac "Restrict C act: Restrict C `` Acts F" 1); |
389 by (case_tac "Restrict C act: Restrict C `` Acts F" 1); |
390 "[| G : v localTo[C] F; G : w localTo[C] F |] \ |
400 "[| G : v localTo[C] F; G : w localTo[C] F |] \ |
391 \ ==> G : (%s. (v s, w s)) localTo[C] F"; |
401 \ ==> G : (%s. (v s, w s)) localTo[C] F"; |
392 by (Blast_tac 1); |
402 by (Blast_tac 1); |
393 qed "localTo_pairfun"; |
403 qed "localTo_pairfun"; |
394 |
404 |
395 Goal "[| F : {s. P (v s) (w s)} co {s. P' (v s) (w s)}; \ |
405 Goal "[| F : {s. P (v s) (w s)} co B; \ |
396 \ G : v localTo[C] F; \ |
406 \ G : v localTo[C] F; \ |
397 \ G : w localTo[C] F |] \ |
407 \ G : w localTo[C] F |] \ |
398 \ ==> G : C Int {s. P (v s) (w s)} co {s. P' (v s) (w s)}"; |
408 \ ==> G : C Int {s. P (v s) (w s)} co B"; |
399 by (res_inst_tac [("A", "C Int {s. (%(x,y). P x y) (v s, w s)}"), |
409 by (res_inst_tac [("A", "C Int {s. (%(x,y). P x y) (v s, w s)}")] |
400 ("A'", "{s. (%(x,y). P' x y) (v s, w s)}")] |
|
401 constrains_weaken 1); |
410 constrains_weaken 1); |
402 by (rtac (localTo_pairfun RSN (2, constrains_localTo_constrains)) 1); |
411 by (rtac (localTo_pairfun RSN (2, constrains_localTo_constrains)) 1); |
403 by Auto_tac; |
412 by Auto_tac; |
404 qed "constrains_localTo_constrains2"; |
413 qed "constrains_localTo_constrains2"; |
405 |
414 |