src/Doc/Tutorial/Protocol/Event.thy
changeset 55142 378ae9e46175
parent 49322 fbb320d02420
child 58860 fee7cfa69c50
equal deleted inserted replaced
55141:863b4f9f6bd7 55142:378ae9e46175
    91 subsection{*Function @{term knows}*}
    91 subsection{*Function @{term knows}*}
    92 
    92 
    93 (*Simplifying   
    93 (*Simplifying   
    94  parts(insert X (knows Spy evs)) = parts{X} \<union> parts(knows Spy evs).
    94  parts(insert X (knows Spy evs)) = parts{X} \<union> parts(knows Spy evs).
    95   This version won't loop with the simplifier.*)
    95   This version won't loop with the simplifier.*)
    96 lemmas parts_insert_knows_A = parts_insert [of _ "knows A evs", standard]
    96 lemmas parts_insert_knows_A = parts_insert [of _ "knows A evs"] for A evs
    97 
    97 
    98 lemma knows_Spy_Says [simp]:
    98 lemma knows_Spy_Says [simp]:
    99      "knows Spy (Says A B X # evs) = insert X (knows Spy evs)"
    99      "knows Spy (Says A B X # evs) = insert X (knows Spy evs)"
   100 by simp
   100 by simp
   101 
   101 
   254 lemmas analz_mono_contra =
   254 lemmas analz_mono_contra =
   255        knows_Spy_subset_knows_Spy_Says [THEN analz_mono, THEN contra_subsetD]
   255        knows_Spy_subset_knows_Spy_Says [THEN analz_mono, THEN contra_subsetD]
   256        knows_Spy_subset_knows_Spy_Notes [THEN analz_mono, THEN contra_subsetD]
   256        knows_Spy_subset_knows_Spy_Notes [THEN analz_mono, THEN contra_subsetD]
   257        knows_Spy_subset_knows_Spy_Gets [THEN analz_mono, THEN contra_subsetD]
   257        knows_Spy_subset_knows_Spy_Gets [THEN analz_mono, THEN contra_subsetD]
   258 
   258 
   259 lemmas analz_impI = impI [where P = "Y \<notin> analz (knows Spy evs)", standard]
   259 lemmas analz_impI = impI [where P = "Y \<notin> analz (knows Spy evs)"] for Y evs
   260 
   260 
   261 ML
   261 ML
   262 {*
   262 {*
   263 val analz_mono_contra_tac = 
   263 val analz_mono_contra_tac = 
   264   rtac @{thm analz_impI} THEN' 
   264   rtac @{thm analz_impI} THEN' 
   288     Scan.succeed (K (SIMPLE_METHOD (REPEAT_FIRST analz_mono_contra_tac))) *}
   288     Scan.succeed (K (SIMPLE_METHOD (REPEAT_FIRST analz_mono_contra_tac))) *}
   289     "for proving theorems of the form X \<notin> analz (knows Spy evs) --> P"
   289     "for proving theorems of the form X \<notin> analz (knows Spy evs) --> P"
   290 
   290 
   291 subsubsection{*Useful for case analysis on whether a hash is a spoof or not*}
   291 subsubsection{*Useful for case analysis on whether a hash is a spoof or not*}
   292 
   292 
   293 lemmas syan_impI = impI [where P = "Y \<notin> synth (analz (knows Spy evs))", standard]
   293 lemmas syan_impI = impI [where P = "Y \<notin> synth (analz (knows Spy evs))"] for Y evs
   294 
   294 
   295 ML
   295 ML
   296 {*
   296 {*
   297 val knows_Cons = @{thm knows_Cons};
   297 val knows_Cons = @{thm knows_Cons};
   298 val used_Nil = @{thm used_Nil};
   298 val used_Nil = @{thm used_Nil};