src/HOL/Auth/NS_Public_Bad.ML
changeset 2324 7c252931a72c
parent 2318 6d3f7c7f70b0
child 2374 4148aa5b00a2
equal deleted inserted replaced
2323:3ae9b0ccee21 2324:7c252931a72c
   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);