src/HOL/Auth/Event.ML
changeset 5076 fbc9d95b62ba
parent 4686 74a12e86b20b
child 5114 c729d4c299c1
equal deleted inserted replaced
5075:9a3d48fa28ca 5076:fbc9d95b62ba
    20 bind_thm ("parts_insert_spies",
    20 bind_thm ("parts_insert_spies",
    21 	  parts_insert |> 
    21 	  parts_insert |> 
    22 	  read_instantiate_sg (sign_of thy) [("H", "spies evs")]);
    22 	  read_instantiate_sg (sign_of thy) [("H", "spies evs")]);
    23 
    23 
    24 
    24 
    25 goal thy
    25 Goal
    26     "P(event_case sf nf ev) = \
    26     "P(event_case sf nf ev) = \
    27 \      ((ALL A B X. ev = Says A B X --> P(sf A B X)) & \
    27 \      ((ALL A B X. ev = Says A B X --> P(sf A B X)) & \
    28 \       (ALL A X. ev = Notes A X --> P(nf A X)))";
    28 \       (ALL A X. ev = Notes A X --> P(nf A X)))";
    29 by (induct_tac "ev" 1);
    29 by (induct_tac "ev" 1);
    30 by Auto_tac;
    30 by Auto_tac;
    31 qed "expand_event_case";
    31 qed "expand_event_case";
    32 
    32 
    33 goal thy "spies (Says A B X # evs) = insert X (spies evs)";
    33 Goal "spies (Says A B X # evs) = insert X (spies evs)";
    34 by (Simp_tac 1);
    34 by (Simp_tac 1);
    35 qed "spies_Says";
    35 qed "spies_Says";
    36 
    36 
    37 (*The point of letting the Spy see "bad" agents' notes is to prevent
    37 (*The point of letting the Spy see "bad" agents' notes is to prevent
    38   redundant case-splits on whether A=Spy and whether A:bad*)
    38   redundant case-splits on whether A=Spy and whether A:bad*)
    39 goal thy "spies (Notes A X # evs) = \
    39 Goal "spies (Notes A X # evs) = \
    40 \         (if A:bad then insert X (spies evs) else spies evs)";
    40 \         (if A:bad then insert X (spies evs) else spies evs)";
    41 by (Simp_tac 1);
    41 by (Simp_tac 1);
    42 qed "spies_Notes";
    42 qed "spies_Notes";
    43 
    43 
    44 goal thy "spies evs <= spies (Says A B X # evs)";
    44 Goal "spies evs <= spies (Says A B X # evs)";
    45 by (simp_tac (simpset() addsimps [subset_insertI]) 1);
    45 by (simp_tac (simpset() addsimps [subset_insertI]) 1);
    46 qed "spies_subset_spies_Says";
    46 qed "spies_subset_spies_Says";
    47 
    47 
    48 goal thy "spies evs <= spies (Notes A X # evs)";
    48 Goal "spies evs <= spies (Notes A X # evs)";
    49 by (Simp_tac 1);
    49 by (Simp_tac 1);
    50 by (Fast_tac 1);
    50 by (Fast_tac 1);
    51 qed "spies_subset_spies_Notes";
    51 qed "spies_subset_spies_Notes";
    52 
    52 
    53 (*Spy sees all traffic*)
    53 (*Spy sees all traffic*)
    54 goal thy "Says A B X : set evs --> X : spies evs";
    54 Goal "Says A B X : set evs --> X : spies evs";
    55 by (induct_tac "evs" 1);
    55 by (induct_tac "evs" 1);
    56 by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
    56 by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
    57 qed_spec_mp "Says_imp_spies";
    57 qed_spec_mp "Says_imp_spies";
    58 
    58 
    59 (*Spy sees Notes of bad agents*)
    59 (*Spy sees Notes of bad agents*)
    60 goal thy "Notes A X : set evs --> A: bad --> X : spies evs";
    60 Goal "Notes A X : set evs --> A: bad --> X : spies evs";
    61 by (induct_tac "evs" 1);
    61 by (induct_tac "evs" 1);
    62 by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
    62 by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
    63 qed_spec_mp "Notes_imp_spies";
    63 qed_spec_mp "Notes_imp_spies";
    64 
    64 
    65 (*Use with addSEs to derive contradictions from old Says events containing
    65 (*Use with addSEs to derive contradictions from old Says events containing
    72 Delsimps [spies_Cons];   
    72 Delsimps [spies_Cons];   
    73 
    73 
    74 
    74 
    75 (*** Fresh nonces ***)
    75 (*** Fresh nonces ***)
    76 
    76 
    77 goal thy "parts (spies evs) <= used evs";
    77 Goal "parts (spies evs) <= used evs";
    78 by (induct_tac "evs" 1);
    78 by (induct_tac "evs" 1);
    79 by (ALLGOALS (asm_simp_tac
    79 by (ALLGOALS (asm_simp_tac
    80 	      (simpset() addsimps [parts_insert_spies]
    80 	      (simpset() addsimps [parts_insert_spies]
    81 	                addsplits [expand_event_case])));
    81 	                addsplits [expand_event_case])));
    82 by (ALLGOALS Blast_tac);
    82 by (ALLGOALS Blast_tac);
    83 qed "parts_spies_subset_used";
    83 qed "parts_spies_subset_used";
    84 
    84 
    85 bind_thm ("usedI", impOfSubs parts_spies_subset_used);
    85 bind_thm ("usedI", impOfSubs parts_spies_subset_used);
    86 AddIs [usedI];
    86 AddIs [usedI];
    87 
    87 
    88 goal thy "parts (initState B) <= used evs";
    88 Goal "parts (initState B) <= used evs";
    89 by (induct_tac "evs" 1);
    89 by (induct_tac "evs" 1);
    90 by (ALLGOALS (asm_simp_tac
    90 by (ALLGOALS (asm_simp_tac
    91 	      (simpset() addsimps [parts_insert_spies]
    91 	      (simpset() addsimps [parts_insert_spies]
    92 	                addsplits [expand_event_case])));
    92 	                addsplits [expand_event_case])));
    93 by (ALLGOALS Blast_tac);
    93 by (ALLGOALS Blast_tac);
    94 bind_thm ("initState_into_used", impOfSubs (result()));
    94 bind_thm ("initState_into_used", impOfSubs (result()));
    95 
    95 
    96 goal thy "used (Says A B X # evs) = parts{X} Un used evs";
    96 Goal "used (Says A B X # evs) = parts{X} Un used evs";
    97 by (Simp_tac 1);
    97 by (Simp_tac 1);
    98 qed "used_Says";
    98 qed "used_Says";
    99 Addsimps [used_Says];
    99 Addsimps [used_Says];
   100 
   100 
   101 goal thy "used (Notes A X # evs) = parts{X} Un used evs";
   101 Goal "used (Notes A X # evs) = parts{X} Un used evs";
   102 by (Simp_tac 1);
   102 by (Simp_tac 1);
   103 qed "used_Notes";
   103 qed "used_Notes";
   104 Addsimps [used_Notes];
   104 Addsimps [used_Notes];
   105 
   105 
   106 goal thy "used [] <= used evs";
   106 Goal "used [] <= used evs";
   107 by (Simp_tac 1);
   107 by (Simp_tac 1);
   108 by (blast_tac (claset() addIs [initState_into_used]) 1);
   108 by (blast_tac (claset() addIs [initState_into_used]) 1);
   109 qed "used_nil_subset";
   109 qed "used_nil_subset";
   110 
   110 
   111 (**** NOTE REMOVAL--laws above are cleaner, as they don't involve "case" ****)
   111 (**** NOTE REMOVAL--laws above are cleaner, as they don't involve "case" ****)
   112 Delsimps [used_Nil, used_Cons];   
   112 Delsimps [used_Nil, used_Cons];   
   113 
   113 
   114 
   114 
   115 (*currently unused*)
   115 (*currently unused*)
   116 goal thy "used evs <= used (evs@evs')";
   116 Goal "used evs <= used (evs@evs')";
   117 by (induct_tac "evs" 1);
   117 by (induct_tac "evs" 1);
   118 by (simp_tac (simpset() addsimps [used_nil_subset]) 1);
   118 by (simp_tac (simpset() addsimps [used_nil_subset]) 1);
   119 by (induct_tac "a" 1);
   119 by (induct_tac "a" 1);
   120 by (ALLGOALS Asm_simp_tac);
   120 by (ALLGOALS Asm_simp_tac);
   121 by (ALLGOALS Blast_tac);
   121 by (ALLGOALS Blast_tac);