tidied using inductive_simps
authorpaulson
Wed Sep 08 13:25:32 2010 +0100 (2010-09-08)
changeset 3921662332b382dba
parent 39213 297cd703f1f0
child 39217 1d5e81f5f083
tidied using inductive_simps
src/HOL/Auth/Guard/Analz.thy
src/HOL/Auth/Guard/Guard_Yahalom.thy
src/HOL/Auth/Guard/P1.thy
src/HOL/Auth/Message.thy
src/HOL/Auth/Shared.thy
     1.1 --- a/src/HOL/Auth/Guard/Analz.thy	Wed Sep 08 10:45:55 2010 +0200
     1.2 +++ b/src/HOL/Auth/Guard/Analz.thy	Wed Sep 08 13:25:32 2010 +0100
     1.3 @@ -233,8 +233,7 @@
     1.4  lemma analz_kparts_analz: "X:analz (kparts H) ==> X:analz H"
     1.5  by (erule analz.induct, auto dest: kparts_analz)
     1.6  
     1.7 -lemma analz_kparts_insert: "X:analz (kparts (insert Z H)) ==>
     1.8 -X:analz (kparts {Z} Un kparts H)"
     1.9 +lemma analz_kparts_insert: "X:analz (kparts (insert Z H)) ==> X:analz (kparts {Z} Un kparts H)"
    1.10  by (rule analz_sub, auto)
    1.11  
    1.12  lemma Nonce_kparts_synth [rule_format]: "Y:synth (analz G)
    1.13 @@ -247,26 +246,21 @@
    1.14  apply (drule in_sub, drule_tac X=Y in parts_sub, simp)
    1.15  by (auto dest: Nonce_kparts_synth)
    1.16  
    1.17 -lemma Crypt_insert_synth: "[| Crypt K Y:parts (insert X G); X:synth (analz G);
    1.18 -Nonce n:kparts {Y}; Nonce n ~:analz G |] ==> Crypt K Y:parts G"
    1.19 -apply (drule parts_insert_substD [where P="%S. Crypt K Y : S"], clarify)
    1.20 -apply (drule in_sub, drule_tac X="Crypt K Y" in parts_sub, simp, clarsimp)
    1.21 -apply (ind_cases "Crypt K Y:synth (analz G)")
    1.22 -by (auto dest: Nonce_kparts_synth)
    1.23 +lemma Crypt_insert_synth:
    1.24 +  "[| Crypt K Y:parts (insert X G); X:synth (analz G); Nonce n:kparts {Y}; Nonce n ~:analz G |] 
    1.25 +   ==> Crypt K Y:parts G"
    1.26 +by (metis Fake_parts_insert_in_Un Nonce_kparts_synth UnE analz_conj_parts synth_simps(5))
    1.27 +
    1.28  
    1.29  subsection{*analz is pparts + analz of kparts*}
    1.30  
    1.31  lemma analz_pparts_kparts: "X:analz H ==> X:pparts H | X:analz (kparts H)"
    1.32 -apply (erule analz.induct)
    1.33 -apply (rule_tac X=X in is_MPairE, blast, blast)
    1.34 -apply (erule disjE, rule_tac X=X in is_MPairE, blast, blast, blast)
    1.35 -by (erule disjE, rule_tac X=Y in is_MPairE, blast+)
    1.36 +by (erule analz.induct, auto) 
    1.37  
    1.38  lemma analz_pparts_kparts_eq: "analz H = pparts H Un analz (kparts H)"
    1.39  by (rule eq, auto dest: analz_pparts_kparts pparts_analz analz_kparts_analz)
    1.40  
    1.41  lemmas analz_pparts_kparts_substI = analz_pparts_kparts_eq [THEN ssubst]
    1.42 -lemmas analz_pparts_kparts_substD
    1.43 -= analz_pparts_kparts_eq [THEN sym, THEN ssubst]
    1.44 +lemmas analz_pparts_kparts_substD = analz_pparts_kparts_eq [THEN sym, THEN ssubst]
    1.45  
    1.46  end
     2.1 --- a/src/HOL/Auth/Guard/Guard_Yahalom.thy	Wed Sep 08 10:45:55 2010 +0200
     2.2 +++ b/src/HOL/Auth/Guard/Guard_Yahalom.thy	Wed Sep 08 13:25:32 2010 +0100
     2.3 @@ -11,7 +11,7 @@
     2.4  
     2.5  header{*Yahalom Protocol*}
     2.6  
     2.7 -theory Guard_Yahalom imports Guard_Shared begin
     2.8 +theory Guard_Yahalom imports "../Shared" Guard_Shared begin
     2.9  
    2.10  subsection{*messages used in the protocol*}
    2.11  
     3.1 --- a/src/HOL/Auth/Guard/P1.thy	Wed Sep 08 10:45:55 2010 +0200
     3.2 +++ b/src/HOL/Auth/Guard/P1.thy	Wed Sep 08 13:25:32 2010 +0100
     3.3 @@ -15,7 +15,7 @@
     3.4  
     3.5  header{*Protocol P1*}
     3.6  
     3.7 -theory P1 imports Guard_Public List_Msg begin
     3.8 +theory P1 imports "../Public" Guard_Public List_Msg begin
     3.9  
    3.10  subsection{*Protocol Definition*}
    3.11  
     4.1 --- a/src/HOL/Auth/Message.thy	Wed Sep 08 10:45:55 2010 +0200
     4.2 +++ b/src/HOL/Auth/Message.thy	Wed Sep 08 13:25:32 2010 +0100
     4.3 @@ -582,12 +582,13 @@
     4.4  
     4.5  text{*NO @{text Agent_synth}, as any Agent name can be synthesized.  
     4.6    The same holds for @{term Number}*}
     4.7 -inductive_cases Nonce_synth [elim!]: "Nonce n \<in> synth H"
     4.8 -inductive_cases Key_synth   [elim!]: "Key K \<in> synth H"
     4.9 -inductive_cases Hash_synth  [elim!]: "Hash X \<in> synth H"
    4.10 -inductive_cases MPair_synth [elim!]: "{|X,Y|} \<in> synth H"
    4.11 -inductive_cases Crypt_synth [elim!]: "Crypt K X \<in> synth H"
    4.12  
    4.13 +inductive_simps synth_simps [iff]:
    4.14 + "Nonce n \<in> synth H"
    4.15 + "Key K \<in> synth H"
    4.16 + "Hash X \<in> synth H"
    4.17 + "{|X,Y|} \<in> synth H"
    4.18 + "Crypt K X \<in> synth H"
    4.19  
    4.20  lemma synth_increasing: "H \<subseteq> synth(H)"
    4.21  by blast
    4.22 @@ -605,7 +606,7 @@
    4.23  subsubsection{*Idempotence and transitivity *}
    4.24  
    4.25  lemma synth_synthD [dest!]: "X\<in> synth (synth H) ==> X\<in> synth H"
    4.26 -by (erule synth.induct, blast+)
    4.27 +by (erule synth.induct, auto)
    4.28  
    4.29  lemma synth_idem: "synth (synth H) = synth H"
    4.30  by blast
    4.31 @@ -782,7 +783,7 @@
    4.32       "X \<notin> synth (analz H)  
    4.33      ==> (Hash[X] Y \<in> synth (analz H)) =  
    4.34          (Hash {|X, Y|} \<in> analz H & Y \<in> synth (analz H))"
    4.35 -by (simp add: HPair_def)
    4.36 +by (auto simp add: HPair_def)
    4.37  
    4.38  
    4.39  text{*We do NOT want Crypt... messages broken up in protocols!!*}
     5.1 --- a/src/HOL/Auth/Shared.thy	Wed Sep 08 10:45:55 2010 +0200
     5.2 +++ b/src/HOL/Auth/Shared.thy	Wed Sep 08 13:25:32 2010 +0100
     5.3 @@ -12,7 +12,7 @@
     5.4  begin
     5.5  
     5.6  consts
     5.7 -  shrK    :: "agent => key"  (*symmetric keys*);
     5.8 +  shrK    :: "agent => key"  (*symmetric keys*)
     5.9  
    5.10  specification (shrK)
    5.11    inj_shrK: "inj shrK"
    5.12 @@ -59,7 +59,7 @@
    5.13  (*Specialized to shared-key model: no @{term invKey}*)
    5.14  lemma keysFor_parts_insert:
    5.15       "[| K \<in> keysFor (parts (insert X G));  X \<in> synth (analz H) |]
    5.16 -      ==> K \<in> keysFor (parts (G \<union> H)) | Key K \<in> parts H";
    5.17 +      ==> K \<in> keysFor (parts (G \<union> H)) | Key K \<in> parts H"
    5.18  by (force dest: Event.keysFor_parts_insert)  
    5.19  
    5.20  lemma Crypt_imp_keysFor: "Crypt K X \<in> H ==> K \<in> keysFor H"