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