462 |
462 |
463 text {* The so defined ML tactics are then ``exported'' to be used in |
463 text {* The so defined ML tactics are then ``exported'' to be used in |
464 Isabelle proofs. *} |
464 Isabelle proofs. *} |
465 |
465 |
466 method_setup oghoare = {* |
466 method_setup oghoare = {* |
467 Method.no_args |
467 Method.no_args (Method.SIMPLE_METHOD' oghoare_tac) *} |
468 (Method.SIMPLE_METHOD' HEADGOAL (oghoare_tac)) *} |
|
469 "verification condition generator for the oghoare logic" |
468 "verification condition generator for the oghoare logic" |
470 |
469 |
471 method_setup annhoare = {* |
470 method_setup annhoare = {* |
472 Method.no_args |
471 Method.no_args (Method.SIMPLE_METHOD' annhoare_tac) *} |
473 (Method.SIMPLE_METHOD' HEADGOAL (annhoare_tac)) *} |
|
474 "verification condition generator for the ann_hoare logic" |
472 "verification condition generator for the ann_hoare logic" |
475 |
473 |
476 method_setup interfree_aux = {* |
474 method_setup interfree_aux = {* |
477 Method.no_args |
475 Method.no_args (Method.SIMPLE_METHOD' interfree_aux_tac) *} |
478 (Method.SIMPLE_METHOD' HEADGOAL (interfree_aux_tac)) *} |
|
479 "verification condition generator for interference freedom tests" |
476 "verification condition generator for interference freedom tests" |
480 |
477 |
481 text {* Tactics useful for dealing with the generated verification conditions: *} |
478 text {* Tactics useful for dealing with the generated verification conditions: *} |
482 |
479 |
483 method_setup conjI_tac = {* |
480 method_setup conjI_tac = {* |
484 Method.no_args |
481 Method.no_args (Method.SIMPLE_METHOD' (conjI_Tac (K all_tac))) *} |
485 (Method.SIMPLE_METHOD' HEADGOAL (conjI_Tac (K all_tac))) *} |
|
486 "verification condition generator for interference freedom tests" |
482 "verification condition generator for interference freedom tests" |
487 |
483 |
488 ML {* |
484 ML {* |
489 fun disjE_Tac tac i st = st |> |
485 fun disjE_Tac tac i st = st |> |
490 ( (EVERY [etac disjE i, |
486 ( (EVERY [etac disjE i, |
491 disjE_Tac tac (i+1), |
487 disjE_Tac tac (i+1), |
492 tac i]) ORELSE (tac i) ) |
488 tac i]) ORELSE (tac i) ) |
493 *} |
489 *} |
494 |
490 |
495 method_setup disjE_tac = {* |
491 method_setup disjE_tac = {* |
496 Method.no_args |
492 Method.no_args (Method.SIMPLE_METHOD' (disjE_Tac (K all_tac))) *} |
497 (Method.SIMPLE_METHOD' HEADGOAL (disjE_Tac (K all_tac))) *} |
|
498 "verification condition generator for interference freedom tests" |
493 "verification condition generator for interference freedom tests" |
499 |
494 |
500 end |
495 end |