src/HOL/Auth/Guard/OtwayRees.thy
author obua
Sun, 09 May 2004 23:04:36 +0200
changeset 14722 8e739a6eaf11
parent 13508 890d736b93a5
child 16417 9bc16273c2d4
permissions -rw-r--r--
replaced apply-style proof for instance Multiset :: plus_ac0 by recommended Isar proof style
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13508
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     1
(******************************************************************************
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     2
date: march 2002
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     3
author: Frederic Blanqui
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     4
email: blanqui@lri.fr
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     5
webpage: http://www.lri.fr/~blanqui/
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     6
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     7
University of Cambridge, Computer Laboratory
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     8
William Gates Building, JJ Thomson Avenue
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
     9
Cambridge CB3 0FD, United Kingdom
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    10
******************************************************************************)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    11
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    12
header{*Otway-Rees Protocol*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    13
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    14
theory OtwayRees = Guard_Shared:
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    15
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    16
subsection{*messages used in the protocol*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    17
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    18
syntax nil :: "msg"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    19
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    20
translations "nil" == "Number 0"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    21
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    22
syntax or1 :: "agent => agent => nat => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    23
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    24
translations "or1 A B NA"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    25
=> "Says A B {|Nonce NA, Agent A, Agent B,
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    26
               Ciph A {|Nonce NA, Agent A, Agent B|}|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    27
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    28
syntax or1' :: "agent => agent => agent => nat => msg => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    29
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    30
translations "or1' A' A B NA X"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    31
=> "Says A' B {|Nonce NA, Agent A, Agent B, X|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    32
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    33
syntax or2 :: "agent => agent => nat => nat => msg => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    34
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    35
translations "or2 A B NA NB X"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    36
=> "Says B Server {|Nonce NA, Agent A, Agent B, X,
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    37
                    Ciph B {|Nonce NA, Nonce NB, Agent A, Agent B|}|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    38
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    39
syntax or2' :: "agent => agent => agent => nat => nat => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    40
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    41
translations "or2' B' A B NA NB"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    42
=> "Says B' Server {|Nonce NA, Agent A, Agent B,
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    43
                     Ciph A {|Nonce NA, Agent A, Agent B|},
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    44
                     Ciph B {|Nonce NA, Nonce NB, Agent A, Agent B|}|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    45
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    46
syntax or3 :: "agent => agent => nat => nat => key => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    47
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    48
translations "or3 A B NA NB K"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    49
=> "Says Server B {|Nonce NA, Ciph A {|Nonce NA, Key K|},
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    50
                    Ciph B {|Nonce NB, Key K|}|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    51
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    52
syntax or3':: "agent => msg => agent => agent => nat => nat => key => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    53
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    54
translations "or3' S Y A B NA NB K"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    55
=> "Says S B {|Nonce NA, Y, Ciph B {|Nonce NB, Key K|}|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    56
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    57
syntax or4 :: "agent => agent => nat => msg => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    58
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    59
translations "or4 A B NA X" => "Says B A {|Nonce NA, X, nil|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    60
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    61
syntax or4' :: "agent => agent => nat => msg => event"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    62
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    63
translations "or4' B' A NA K" =>
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    64
"Says B' A {|Nonce NA, Ciph A {|Nonce NA, Key K|}, nil|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    65
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    66
subsection{*definition of the protocol*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    67
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    68
consts or :: "event list set"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    69
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    70
inductive or
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    71
intros
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    72
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    73
Nil: "[]:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    74
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    75
Fake: "[| evs:or; X:synth (analz (spies evs)) |] ==> Says Spy B X # evs:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    76
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    77
OR1: "[| evs1:or; Nonce NA ~:used evs1 |] ==> or1 A B NA # evs1:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    78
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    79
OR2: "[| evs2:or; or1' A' A B NA X:set evs2; Nonce NB ~:used evs2 |]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    80
==> or2 A B NA NB X # evs2:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    81
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    82
OR3: "[| evs3:or; or2' B' A B NA NB:set evs3; Key K ~:used evs3 |]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    83
==> or3 A B NA NB K # evs3:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    84
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    85
OR4: "[| evs4:or; or2 A B NA NB X:set evs4; or3' S Y A B NA NB K:set evs4 |]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    86
==> or4 A B NA X # evs4:or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    87
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    88
subsection{*declarations for tactics*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    89
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    90
declare knows_Spy_partsEs [elim]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    91
declare Fake_parts_insert [THEN subsetD, dest]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    92
declare initState.simps [simp del]
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    93
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    94
subsection{*general properties of or*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    95
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    96
lemma or_has_no_Gets: "evs:or ==> ALL A X. Gets A X ~:set evs"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    97
by (erule or.induct, auto)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    98
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
    99
lemma or_is_Gets_correct [iff]: "Gets_correct or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   100
by (auto simp: Gets_correct_def dest: or_has_no_Gets)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   101
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   102
lemma or_is_one_step [iff]: "one_step or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   103
by (unfold one_step_def, clarify, ind_cases "ev#evs:or", auto)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   104
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   105
lemma or_has_only_Says' [rule_format]: "evs:or ==>
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   106
ev:set evs --> (EX A B X. ev=Says A B X)"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   107
by (erule or.induct, auto)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   108
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   109
lemma or_has_only_Says [iff]: "has_only_Says or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   110
by (auto simp: has_only_Says_def dest: or_has_only_Says')
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   111
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   112
subsection{*or is regular*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   113
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   114
lemma or1'_parts_spies [dest]: "or1' A' A B NA X:set evs
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   115
==> X:parts (spies evs)"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   116
by blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   117
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   118
lemma or2_parts_spies [dest]: "or2 A B NA NB X:set evs
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   119
==> X:parts (spies evs)"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   120
by blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   121
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   122
lemma or3_parts_spies [dest]: "Says S B {|NA, Y, Ciph B {|NB, K|}|}:set evs
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   123
==> K:parts (spies evs)"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   124
by blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   125
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   126
lemma or_is_regular [iff]: "regular or"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   127
apply (simp only: regular_def, clarify)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   128
apply (erule or.induct, simp_all add: initState.simps knows.simps)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   129
by (auto dest: parts_sub)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   130
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   131
subsection{*guardedness of KAB*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   132
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   133
lemma Guard_KAB [rule_format]: "[| evs:or; A ~:bad; B ~:bad |] ==>
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   134
or3 A B NA NB K:set evs --> GuardK K {shrK A,shrK B} (spies evs)" 
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   135
apply (erule or.induct)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   136
(* Nil *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   137
apply simp_all
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   138
(* Fake *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   139
apply (clarify, erule in_synth_GuardK, erule GuardK_analz, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   140
(* OR1 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   141
apply blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   142
(* OR2 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   143
apply safe
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   144
apply (blast dest: Says_imp_spies, blast)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   145
(* OR3 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   146
apply blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   147
apply (drule_tac A=Server in Key_neq, simp+, rule No_Key, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   148
apply (drule_tac A=Server in Key_neq, simp+, rule No_Key, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   149
(* OR4 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   150
by (blast dest: Says_imp_spies in_GuardK_kparts)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   151
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   152
subsection{*guardedness of NB*}
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   153
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   154
lemma Guard_NB [rule_format]: "[| evs:or; B ~:bad |] ==>
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   155
or2 A B NA NB X:set evs --> Guard NB {shrK B} (spies evs)" 
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   156
apply (erule or.induct)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   157
(* Nil *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   158
apply simp_all
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   159
(* Fake *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   160
apply safe
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   161
apply (erule in_synth_Guard, erule Guard_analz, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   162
(* OR1 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   163
apply (drule_tac n=NB in Nonce_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   164
apply (drule_tac n=NB in Nonce_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   165
(* OR2 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   166
apply blast
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   167
apply (drule_tac n=NA in Nonce_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   168
apply (blast intro!: No_Nonce dest: used_parts)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   169
apply (drule_tac n=NA in Nonce_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   170
apply (blast intro!: No_Nonce dest: used_parts)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   171
apply (blast dest: Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   172
apply (blast dest: Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   173
apply (case_tac "Ba=B", clarsimp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   174
apply (drule_tac n=NB and A=B in Nonce_neq, simp+)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   175
apply (drule Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   176
apply (drule_tac n'=NAa in in_Guard_kparts_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   177
(* OR3 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   178
apply (drule Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   179
apply (frule_tac n'=NAa in in_Guard_kparts_neq, simp+, rule No_Nonce, simp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   180
apply (case_tac "Aa=B", clarsimp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   181
apply (case_tac "NAa=NB", clarsimp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   182
apply (drule Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   183
apply (drule_tac Y="{|Nonce NB, Agent Aa, Agent Ba|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   184
                 and K="shrK Aa" in in_Guard_kparts_Crypt, simp+)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   185
apply (simp add: No_Nonce) 
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   186
apply (case_tac "Ba=B", clarsimp)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   187
apply (case_tac "NBa=NB", clarify)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   188
apply (drule Says_imp_spies)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   189
apply (drule_tac Y="{|Nonce NAa, Nonce NB, Agent Aa, Agent Ba|}"
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   190
                 and K="shrK Ba" in in_Guard_kparts_Crypt, simp+)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   191
apply (simp add: No_Nonce) 
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   192
(* OR4 *)
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   193
by (blast dest: Says_imp_spies)+
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   194
890d736b93a5 Frederic Blanqui's new "guard" examples
paulson
parents:
diff changeset
   195
end