src/HOL/SET-Protocol/EventSET.thy
changeset 32960 69916a850301
parent 30549 d2d7874648bd
equal deleted inserted replaced
32959:23a8c5ac35f8 32960:69916a850301
     1 (*  Title:      HOL/Auth/SET/EventSET
     1 (*  Title:      HOL/SET-Protocol/EventSET.thy
     2     ID:         $Id$
     2     Author:     Giampaolo Bella
     3     Authors:     Giampaolo Bella, Fabio Massacci, Lawrence C Paulson
     3     Author:     Fabio Massacci
       
     4     Author:     Lawrence C Paulson
     4 *)
     5 *)
     5 
     6 
     6 header{*Theory of Events for SET*}
     7 header{*Theory of Events for SET*}
     7 
     8 
     8 theory EventSET imports MessageSET begin
     9 theory EventSET imports MessageSET begin
    13 
    14 
    14 
    15 
    15 text{*Message events*}
    16 text{*Message events*}
    16 datatype
    17 datatype
    17   event = Says  agent agent msg
    18   event = Says  agent agent msg
    18 	| Gets  agent	    msg
    19         | Gets  agent       msg
    19         | Notes agent       msg
    20         | Notes agent       msg
    20 
    21 
    21 
    22 
    22 text{*compromised agents: keys known, Notes visible*}
    23 text{*compromised agents: keys known, Notes visible*}
    23 consts bad :: "agent set"
    24 consts bad :: "agent set"
    42 knows_Nil:
    43 knows_Nil:
    43   "knows A []       = initState A"
    44   "knows A []       = initState A"
    44 knows_Cons:
    45 knows_Cons:
    45     "knows A (ev # evs) =
    46     "knows A (ev # evs) =
    46        (if A = Spy then
    47        (if A = Spy then
    47 	(case ev of
    48         (case ev of
    48 	   Says A' B X => insert X (knows Spy evs)
    49            Says A' B X => insert X (knows Spy evs)
    49 	 | Gets A' X => knows Spy evs
    50          | Gets A' X => knows Spy evs
    50 	 | Notes A' X  =>
    51          | Notes A' X  =>
    51 	     if A' \<in> bad then insert X (knows Spy evs) else knows Spy evs)
    52              if A' \<in> bad then insert X (knows Spy evs) else knows Spy evs)
    52 	else
    53         else
    53 	(case ev of
    54         (case ev of
    54 	   Says A' B X =>
    55            Says A' B X =>
    55 	     if A'=A then insert X (knows A evs) else knows A evs
    56              if A'=A then insert X (knows A evs) else knows A evs
    56 	 | Gets A' X    =>
    57          | Gets A' X    =>
    57 	     if A'=A then insert X (knows A evs) else knows A evs
    58              if A'=A then insert X (knows A evs) else knows A evs
    58 	 | Notes A' X    =>
    59          | Notes A' X    =>
    59 	     if A'=A then insert X (knows A evs) else knows A evs))"
    60              if A'=A then insert X (knows A evs) else knows A evs))"
    60 
    61 
    61 
    62 
    62 subsection{*Used Messages*}
    63 subsection{*Used Messages*}
    63 
    64 
    64 consts
    65 consts
    68 
    69 
    69 (* As above, message reception does extend used items *)
    70 (* As above, message reception does extend used items *)
    70 primrec
    71 primrec
    71   used_Nil:  "used []         = (UN B. parts (initState B))"
    72   used_Nil:  "used []         = (UN B. parts (initState B))"
    72   used_Cons: "used (ev # evs) =
    73   used_Cons: "used (ev # evs) =
    73 	         (case ev of
    74                  (case ev of
    74 		    Says A B X => parts {X} Un (used evs)
    75                     Says A B X => parts {X} Un (used evs)
    75          	  | Gets A X   => used evs
    76                   | Gets A X   => used evs
    76 		  | Notes A X  => parts {X} Un (used evs))"
    77                   | Notes A X  => parts {X} Un (used evs))"
    77 
    78 
    78 
    79 
    79 
    80 
    80 (* Inserted by default but later removed.  This declaration lets the file
    81 (* Inserted by default but later removed.  This declaration lets the file
    81 be re-loaded. Addsimps [knows_Cons, used_Nil, *)
    82 be re-loaded. Addsimps [knows_Cons, used_Nil, *)