412 |
412 |
413 (*Case analysis: either the message is secure, or it is not! |
413 (*Case analysis: either the message is secure, or it is not! |
414 Effective, but can cause subgoals to blow up! |
414 Effective, but can cause subgoals to blow up! |
415 Use with expand_if; apparently split_tac does not cope with patterns |
415 Use with expand_if; apparently split_tac does not cope with patterns |
416 such as "analz (insert (Crypt X K) H)" *) |
416 such as "analz (insert (Crypt X K) H)" *) |
417 goal thy "analz (insert (Crypt X K) H) = \ |
417 goal thy "analz (insert (Crypt X K) H) = \ |
418 \ (if (Key (invKey K) : analz H) then \ |
418 \ (if (Key (invKey K) : analz H) \ |
419 \ insert (Crypt X K) (analz (insert X H)) \ |
419 \ then insert (Crypt X K) (analz (insert X H)) \ |
420 \ else insert (Crypt X K) (analz H))"; |
420 \ else insert (Crypt X K) (analz H))"; |
421 by (case_tac "Key (invKey K) : analz H " 1); |
421 by (case_tac "Key (invKey K) : analz H " 1); |
422 by (ALLGOALS (asm_simp_tac (!simpset addsimps [analz_insert_Crypt, |
422 by (ALLGOALS (asm_simp_tac (!simpset addsimps [analz_insert_Crypt, |
423 analz_insert_Decrypt]))); |
423 analz_insert_Decrypt]))); |
424 qed "analz_Crypt_if"; |
424 qed "analz_Crypt_if"; |