equal
deleted
inserted
replaced
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}; |