src/HOL/SET-Protocol/EventSET.thy
changeset 27225 b316dde851f5
parent 27159 9506c7e73cfa
child 30510 4120fc59dd85
equal deleted inserted replaced
27224:ac158759125c 27225:b316dde851f5
   175 
   175 
   176 lemmas analz_mono_contra =
   176 lemmas analz_mono_contra =
   177        knows_Spy_subset_knows_Spy_Says [THEN analz_mono, THEN contra_subsetD]
   177        knows_Spy_subset_knows_Spy_Says [THEN analz_mono, THEN contra_subsetD]
   178        knows_Spy_subset_knows_Spy_Notes [THEN analz_mono, THEN contra_subsetD]
   178        knows_Spy_subset_knows_Spy_Notes [THEN analz_mono, THEN contra_subsetD]
   179        knows_Spy_subset_knows_Spy_Gets [THEN analz_mono, THEN contra_subsetD]
   179        knows_Spy_subset_knows_Spy_Gets [THEN analz_mono, THEN contra_subsetD]
       
   180 
       
   181 lemmas analz_impI = impI [where P = "Y \<notin> analz (knows Spy evs)", standard]
       
   182 
   180 ML
   183 ML
   181 {*
   184 {*
   182 val analz_mono_contra_tac = 
   185 val analz_mono_contra_tac = 
   183   let val analz_impI = OldGoals.inst "P" "?Y \<notin> analz (knows Spy ?evs)" impI
   186   rtac @{thm analz_impI} THEN' 
   184   in rtac analz_impI THEN' 
   187   REPEAT1 o (dresolve_tac @{thms analz_mono_contra})
   185      REPEAT1 o (dresolve_tac @{thms analz_mono_contra}) THEN'
   188   THEN' mp_tac
   186      mp_tac
       
   187   end
       
   188 *}
   189 *}
   189 
   190 
   190 method_setup analz_mono_contra = {*
   191 method_setup analz_mono_contra = {*
   191     Method.no_args (Method.SIMPLE_METHOD (REPEAT_FIRST analz_mono_contra_tac)) *}
   192     Method.no_args (Method.SIMPLE_METHOD (REPEAT_FIRST analz_mono_contra_tac)) *}
   192     "for proving theorems of the form X \<notin> analz (knows Spy evs) --> P"
   193     "for proving theorems of the form X \<notin> analz (knows Spy evs) --> P"