src/HOL/Auth/Event_lemmas.ML
author paulson
Thu, 22 Feb 2001 11:31:31 +0100
changeset 11176 dec03152d163
parent 11150 67387142225e
child 11189 1ea763a5d186
permissions -rw-r--r--
a PROPER tidy-up
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11106
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     1
(*  Title:      HOL/Auth/Event
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     2
    ID:         $Id$
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     4
    Copyright   1996  University of Cambridge
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     5
*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     6
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     7
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     8
val knows_Cons     = thm "knows_Cons";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
     9
val used_Nil       = thm "used_Nil";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    10
val used_Cons      = thm "used_Cons";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    11
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    12
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    13
(*Inserted by default but later removed.  This declaration lets the file
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    14
  be re-loaded.*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    15
Addsimps [knows_Cons, used_Nil, used_Cons];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    16
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    17
(**** Function "knows" ****)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    18
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    19
(** Simplifying   parts (insert X (knows Spy evs))
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    20
      = parts {X} Un parts (knows Spy evs) -- since general case loops*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    21
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    22
bind_thm ("parts_insert_knows_Spy",
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    23
	  parts_insert |> 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    24
	  read_instantiate_sg (sign_of thy) [("H", "knows Spy evs")]);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    25
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    26
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    27
val expand_event_case = thm "event.split";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    28
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    29
Goal "knows Spy (Says A B X # evs) = insert X (knows Spy evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    30
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    31
qed "knows_Spy_Says";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    32
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    33
(*The point of letting the Spy see "bad" agents' notes is to prevent
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    34
  redundant case-splits on whether A=Spy and whether A:bad*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    35
Goal "knows Spy (Notes A X # evs) = \
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    36
\         (if A:bad then insert X (knows Spy evs) else knows Spy evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    37
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    38
qed "knows_Spy_Notes";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    39
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    40
Goal "knows Spy (Gets A X # evs) = knows Spy evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    41
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    42
qed "knows_Spy_Gets";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    43
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    44
Goal "knows Spy evs <= knows Spy (Says A B X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    45
by (simp_tac (simpset() addsimps [subset_insertI]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    46
qed "knows_Spy_subset_knows_Spy_Says";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    47
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    48
Goal "knows Spy evs <= knows Spy (Notes A X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    49
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    50
by (Fast_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    51
qed "knows_Spy_subset_knows_Spy_Notes";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    52
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    53
Goal "knows Spy evs <= knows Spy (Gets A X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    54
by (simp_tac (simpset() addsimps [subset_insertI]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    55
qed "knows_Spy_subset_knows_Spy_Gets";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    56
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    57
(*Spy sees what is sent on the traffic*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    58
Goal "Says A B X : set evs --> X : knows Spy evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    59
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    60
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    61
qed_spec_mp "Says_imp_knows_Spy";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    62
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    63
Goal "Notes A X : set evs --> A: bad --> X : knows Spy evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    64
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    65
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    66
qed_spec_mp "Notes_imp_knows_Spy";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    67
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    68
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    69
(*Use with addSEs to derive contradictions from old Says events containing
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    70
  items known to be fresh*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    71
bind_thms ("knows_Spy_partsEs", 
11150
67387142225e Streamlining for the bug fix in Blast.
paulson
parents: 11106
diff changeset
    72
           map make_elim [Says_imp_knows_Spy RS parts.Inj, parts.Body]);
11106
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    73
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    74
Addsimps [knows_Spy_Says, knows_Spy_Notes, knows_Spy_Gets];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    75
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    76
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    77
(*Begin lemmas about agents' knowledge*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    78
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    79
Goal "knows A (Says A B X # evs) = insert X (knows A evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    80
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    81
qed "knows_Says";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    82
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    83
Goal "knows A (Notes A X # evs) = insert X (knows A evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    84
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    85
qed "knows_Notes";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    86
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    87
Goal "A ~= Spy --> knows A (Gets A X # evs) = insert X (knows A evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    88
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    89
qed "knows_Gets";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    90
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    91
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    92
Goal "knows A evs <= knows A (Says A B X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    93
by (simp_tac (simpset() addsimps [subset_insertI]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    94
qed "knows_subset_knows_Says";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    95
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    96
Goal "knows A evs <= knows A (Notes A X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    97
by (simp_tac (simpset() addsimps [subset_insertI]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    98
qed "knows_subset_knows_Notes";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
    99
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   100
Goal "knows A evs <= knows A (Gets A X # evs)";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   101
by (simp_tac (simpset() addsimps [subset_insertI]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   102
qed "knows_subset_knows_Gets";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   103
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   104
(*Agents know what they say*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   105
Goal "Says A B X : set evs --> X : knows A evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   106
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   107
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   108
by (Blast_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   109
qed_spec_mp "Says_imp_knows";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   110
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   111
(*Agents know what they note*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   112
Goal "Notes A X : set evs --> X : knows A evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   113
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   114
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   115
by (Blast_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   116
qed_spec_mp "Notes_imp_knows";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   117
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   118
(*Agents know what they receive*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   119
Goal "A ~= Spy --> Gets A X : set evs --> X : knows A evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   120
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   121
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   122
qed_spec_mp "Gets_imp_knows_agents";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   123
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   124
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   125
(*What agents DIFFERENT FROM Spy know 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   126
  was either said, or noted, or got, or known initially*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   127
Goal "[| X : knows A evs; A ~= Spy |] ==> EX B. \
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   128
\ Says A B X : set evs | Gets A X : set evs | Notes A X : set evs | X : initState A";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   129
by (etac rev_mp 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   130
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   131
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   132
by (Blast_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   133
qed_spec_mp "knows_imp_Says_Gets_Notes_initState";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   134
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   135
(*What the Spy knows -- for the time being --
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   136
  was either said or noted, or known initially*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   137
Goal "[| X : knows Spy evs |] ==> EX A B. \
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   138
\ Says A B X : set evs | Notes A X : set evs | X : initState Spy";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   139
by (etac rev_mp 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   140
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   141
by (ALLGOALS (asm_simp_tac (simpset() addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   142
by (Blast_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   143
qed_spec_mp "knows_Spy_imp_Says_Notes_initState";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   144
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   145
(*END lemmas about agents' knowledge*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   146
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   147
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   148
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   149
(**** NOTE REMOVAL--laws above are cleaner, as they don't involve "case" ****)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   150
Delsimps [knows_Cons];   
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   151
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   152
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   153
(*** Fresh nonces ***)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   154
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   155
Goal "parts (knows Spy evs) <= used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   156
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   157
by (ALLGOALS (asm_simp_tac
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   158
	      (simpset() addsimps [parts_insert_knows_Spy]
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   159
	                addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   160
by (ALLGOALS Blast_tac);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   161
qed "parts_knows_Spy_subset_used";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   162
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   163
bind_thm ("usedI", impOfSubs parts_knows_Spy_subset_used);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   164
AddIs [usedI];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   165
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   166
Goal "parts (initState B) <= used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   167
by (induct_tac "evs" 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   168
by (ALLGOALS (asm_simp_tac
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   169
	      (simpset() addsimps [parts_insert_knows_Spy]
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   170
	                addsplits [expand_event_case])));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   171
by (ALLGOALS Blast_tac);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   172
bind_thm ("initState_into_used", impOfSubs (result()));
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   173
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   174
Goal "used (Says A B X # evs) = parts{X} Un used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   175
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   176
qed "used_Says";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   177
Addsimps [used_Says];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   178
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   179
Goal "used (Notes A X # evs) = parts{X} Un used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   180
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   181
qed "used_Notes";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   182
Addsimps [used_Notes];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   183
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   184
Goal "used (Gets A X # evs) = used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   185
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   186
qed "used_Gets";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   187
Addsimps [used_Gets];
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   188
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   189
Goal "used [] <= used evs";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   190
by (Simp_tac 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   191
by (blast_tac (claset() addIs [initState_into_used]) 1);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   192
qed "used_nil_subset";
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   193
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   194
(**** NOTE REMOVAL--laws above are cleaner, as they don't involve "case" ****)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   195
Delsimps [used_Nil, used_Cons];   
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   196
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   197
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   198
(*For proving theorems of the form X ~: analz (knows Spy evs) --> P
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   199
  New events added by induction to "evs" are discarded.  Provided 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   200
  this information isn't needed, the proof will be much shorter, since
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   201
  it will omit complicated reasoning about analz.*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   202
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   203
bind_thms ("analz_mono_contra",
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   204
       [knows_Spy_subset_knows_Spy_Says RS analz_mono RS contra_subsetD,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   205
        knows_Spy_subset_knows_Spy_Notes RS analz_mono RS contra_subsetD,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   206
	knows_Spy_subset_knows_Spy_Gets RS analz_mono RS contra_subsetD]);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   207
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   208
val analz_mono_contra_tac = 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   209
  let val analz_impI = inst "P" "?Y ~: analz (knows Spy ?evs)" impI
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   210
  in
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   211
    rtac analz_impI THEN' 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   212
    REPEAT1 o 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   213
      (dresolve_tac 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   214
       [knows_Spy_subset_knows_Spy_Says RS analz_mono RS contra_subsetD,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   215
        knows_Spy_subset_knows_Spy_Notes RS analz_mono RS contra_subsetD,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   216
	knows_Spy_subset_knows_Spy_Gets RS analz_mono RS contra_subsetD])
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   217
    THEN'
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   218
    mp_tac
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   219
  end;
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   220
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   221
fun Reception_tac i =
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   222
    blast_tac (claset() addDs [Says_imp_knows_Spy RS parts.Inj, 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   223
                               impOfSubs (parts_insert RS equalityD1), 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   224
			       parts_trans,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   225
                               Says_imp_knows_Spy RS analz.Inj,
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   226
                               impOfSubs analz_mono, analz_cut] 
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   227
                        addIs [less_SucI]) i;
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   228
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   229
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   230
(*Compatibility for the old "spies" function*)
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   231
bind_thms ("spies_partsEs", knows_Spy_partsEs);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   232
bind_thm ("Says_imp_spies", Says_imp_knows_Spy);
83d03e966c68 partial conversion to Isar script style in HOL/Auth removes some .ML files
paulson
parents:
diff changeset
   233
bind_thm ("parts_insert_spies", parts_insert_knows_Spy);