equal
deleted
inserted
replaced
395 Int_Un_distrib]) 1); |
395 Int_Un_distrib]) 1); |
396 by (blast_tac (claset() addIs [completion, leadsTo_weaken]) 1); |
396 by (blast_tac (claset() addIs [completion, leadsTo_weaken]) 1); |
397 qed "Completion"; |
397 qed "Completion"; |
398 |
398 |
399 |
399 |
400 Goal "[| finite I |] \ |
400 Goal "finite I \ |
401 \ ==> (ALL i:I. F : (A i) LeadsTo (A' i Un C)) --> \ |
401 \ ==> (ALL i:I. F : (A i) LeadsTo (A' i Un C)) --> \ |
402 \ (ALL i:I. F : (A' i) Co (A' i Un C)) --> \ |
402 \ (ALL i:I. F : (A' i) Co (A' i Un C)) --> \ |
403 \ F : (INT i:I. A i) LeadsTo ((INT i:I. A' i) Un C)"; |
403 \ F : (INT i:I. A i) LeadsTo ((INT i:I. A' i) Un C)"; |
404 by (etac finite_induct 1); |
404 by (etac finite_induct 1); |
405 by (ALLGOALS Asm_simp_tac); |
405 by (ALLGOALS Asm_simp_tac); |
406 by (Clarify_tac 1); |
406 by (Clarify_tac 1); |
407 by (dtac ball_Constrains_INT 1); |
407 by (dtac ball_Constrains_INT 1); |
408 by (asm_full_simp_tac (simpset() addsimps [Completion]) 1); |
408 by (asm_full_simp_tac (simpset() addsimps [Completion]) 1); |
409 qed "Finite_completion"; |
409 qed_spec_mp "Finite_completion"; |
410 |
410 |
411 |
411 |
412 (*proves "ensures/leadsTo" properties when the program is specified*) |
412 (*proves "ensures/leadsTo" properties when the program is specified*) |
413 fun ensures_tac sact = |
413 fun ensures_tac sact = |
414 SELECT_GOAL |
414 SELECT_GOAL |