equal
deleted
inserted
replaced
158 (*Fake*) |
158 (*Fake*) |
159 by (simp_tac (!simpset addsimps [all_conj_distrib,parts_insert_sees]) 1); |
159 by (simp_tac (!simpset addsimps [all_conj_distrib,parts_insert_sees]) 1); |
160 by (step_tac (!claset addSIs [impOfSubs (subset_insertI RS analz_mono)]) 1); |
160 by (step_tac (!claset addSIs [impOfSubs (subset_insertI RS analz_mono)]) 1); |
161 by (ex_strip_tac 1); |
161 by (ex_strip_tac 1); |
162 by (best_tac (!claset delrules [conjI] |
162 by (best_tac (!claset delrules [conjI] |
163 addDs [impOfSubs analz_subset_parts, |
163 addSDs [impOfSubs Fake_parts_insert] |
164 impOfSubs Fake_parts_insert] |
164 addDs [impOfSubs analz_subset_parts] |
165 addss (!simpset)) 1); |
165 addss (!simpset)) 1); |
166 val lemma = result(); |
166 val lemma = result(); |
167 |
167 |
168 goal thy |
168 goal thy |
169 "!!evs. [| Crypt(pubK B) {|Nonce NA, Agent A|} : parts(sees lost Spy evs); \ |
169 "!!evs. [| Crypt(pubK B) {|Nonce NA, Agent A|} : parts(sees lost Spy evs); \ |
224 Says_imp_sees_Spy' RS parts.Inj]) 2); |
224 Says_imp_sees_Spy' RS parts.Inj]) 2); |
225 (*Fake*) |
225 (*Fake*) |
226 by (REPEAT_FIRST (resolve_tac [impI, conjI])); |
226 by (REPEAT_FIRST (resolve_tac [impI, conjI])); |
227 by (fast_tac (!claset addss (!simpset)) 1); |
227 by (fast_tac (!claset addss (!simpset)) 1); |
228 by (forward_tac [Spy_not_see_NA] 1 THEN REPEAT (assume_tac 1)); |
228 by (forward_tac [Spy_not_see_NA] 1 THEN REPEAT (assume_tac 1)); |
229 by (best_tac (!claset addDs [impOfSubs analz_subset_parts, |
229 by (best_tac (!claset addSIs [disjI2] |
230 impOfSubs Fake_parts_insert] |
230 addSDs [impOfSubs Fake_parts_insert] |
|
231 addDs [impOfSubs analz_subset_parts] |
231 addss (!simpset)) 1); |
232 addss (!simpset)) 1); |
232 (*NS2*) |
233 (*NS2*) |
233 by (Step_tac 1); |
234 by (Step_tac 1); |
234 by (forward_tac [Spy_not_see_NA] 1 THEN REPEAT (assume_tac 1)); |
235 by (forward_tac [Spy_not_see_NA] 1 THEN REPEAT (assume_tac 1)); |
235 by (fast_tac (!claset addSDs [Says_imp_sees_Spy' RS parts.Inj] |
236 by (fast_tac (!claset addSDs [Says_imp_sees_Spy' RS parts.Inj] |
259 (asm_simp_tac |
260 (asm_simp_tac |
260 (!simpset addsimps ([analz_subset_parts RS contra_subsetD] @ pushes) |
261 (!simpset addsimps ([analz_subset_parts RS contra_subsetD] @ pushes) |
261 setloop split_tac [expand_if]))); |
262 setloop split_tac [expand_if]))); |
262 (*Fake*) |
263 (*Fake*) |
263 by (best_tac (!claset addSIs [disjI2] |
264 by (best_tac (!claset addSIs [disjI2] |
264 addIs [impOfSubs (subset_insertI RS analz_mono)] |
265 addSDs [impOfSubs Fake_parts_insert] |
265 addDs [impOfSubs analz_subset_parts, |
266 addIs [impOfSubs (subset_insertI RS analz_mono)] |
266 impOfSubs Fake_parts_insert] |
267 addDs [impOfSubs analz_subset_parts] |
267 addss (!simpset)) 2); |
268 addss (!simpset)) 2); |
268 (*Base*) |
269 (*Base*) |
269 by (fast_tac (!claset addss (!simpset)) 1); |
270 by (fast_tac (!claset addss (!simpset)) 1); |
270 qed_spec_mp "B_trusts_NS1"; |
271 qed_spec_mp "B_trusts_NS1"; |
271 |
272 |
276 (*Uniqueness for NS2: nonce NB identifies agent A and nonce NA |
277 (*Uniqueness for NS2: nonce NB identifies agent A and nonce NA |
277 [proof closely follows that for unique_NA] *) |
278 [proof closely follows that for unique_NA] *) |
278 goal thy |
279 goal thy |
279 "!!evs. evs : ns_public \ |
280 "!!evs. evs : ns_public \ |
280 \ ==> Nonce NB ~: analz (sees lost Spy evs) --> \ |
281 \ ==> Nonce NB ~: analz (sees lost Spy evs) --> \ |
281 \ (EX A' NA'. ALL A NA. \ |
282 \ (EX A' NA'. ALL A NA. \ |
282 \ Crypt (pubK A) {|Nonce NA, Nonce NB|} : parts (sees lost Spy evs) --> \ |
283 \ Crypt (pubK A) {|Nonce NA, Nonce NB|} : parts (sees lost Spy evs) --> \ |
283 \ A=A' & NA=NA')"; |
284 \ A=A' & NA=NA')"; |
284 by (etac ns_public.induct 1); |
285 by (etac ns_public.induct 1); |
285 by (ALLGOALS |
286 by (ALLGOALS |
286 (asm_simp_tac |
287 (asm_simp_tac |
294 (*Fake*) |
295 (*Fake*) |
295 by (simp_tac (!simpset addsimps [all_conj_distrib,parts_insert_sees]) 1); |
296 by (simp_tac (!simpset addsimps [all_conj_distrib,parts_insert_sees]) 1); |
296 by (step_tac (!claset addSIs [impOfSubs (subset_insertI RS analz_mono)]) 1); |
297 by (step_tac (!claset addSIs [impOfSubs (subset_insertI RS analz_mono)]) 1); |
297 by (ex_strip_tac 1); |
298 by (ex_strip_tac 1); |
298 by (best_tac (!claset delrules [conjI] |
299 by (best_tac (!claset delrules [conjI] |
299 addDs [impOfSubs analz_subset_parts, |
300 addSDs [impOfSubs Fake_parts_insert] |
300 impOfSubs Fake_parts_insert] |
301 addDs [impOfSubs analz_subset_parts] |
301 addss (!simpset)) 1); |
302 addss (!simpset)) 1); |
302 val lemma = result(); |
303 val lemma = result(); |
303 |
304 |
304 goal thy |
305 goal thy |
305 "!!evs. [| Crypt(pubK A) {|Nonce NA, Nonce NB|} : parts(sees lost Spy evs); \ |
306 "!!evs. [| Crypt(pubK A) {|Nonce NA, Nonce NB|} : parts(sees lost Spy evs); \ |
306 \ Crypt(pubK A'){|Nonce NA', Nonce NB|} : parts(sees lost Spy evs); \ |
307 \ Crypt(pubK A'){|Nonce NA', Nonce NB|} : parts(sees lost Spy evs); \ |
374 by (REPEAT_FIRST (resolve_tac [impI, conjI])); |
375 by (REPEAT_FIRST (resolve_tac [impI, conjI])); |
375 by (fast_tac (!claset addss (!simpset)) 1); |
376 by (fast_tac (!claset addss (!simpset)) 1); |
376 br (ccontr RS disjI2) 1; |
377 br (ccontr RS disjI2) 1; |
377 by (forward_tac [Spy_not_see_NB] 1 THEN REPEAT (assume_tac 1)); |
378 by (forward_tac [Spy_not_see_NB] 1 THEN REPEAT (assume_tac 1)); |
378 by (Fast_tac 1); |
379 by (Fast_tac 1); |
379 (*37 seconds??*) |
|
380 by (best_tac (!claset addSDs [impOfSubs Fake_parts_insert] |
380 by (best_tac (!claset addSDs [impOfSubs Fake_parts_insert] |
381 addDs [impOfSubs analz_subset_parts] |
381 addDs [impOfSubs analz_subset_parts] |
382 addss (!simpset)) 1); |
382 addss (!simpset)) 1); |
383 (*NS3*) |
383 (*NS3*) |
384 by (Step_tac 1); |
384 by (Step_tac 1); |