[STATEMENT]
theorem pr_card_authenticity [rule_format]:
 "(evs, S, A, U) \<in> protocol \<Longrightarrow>
    Says n run 5 (User m) (Card n) (Crypt (sesK K) (Passwd m)) \<in> set evs \<longrightarrow>
    Says n run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evs \<longrightarrow>
  n = m \<and>
  (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evs \<or>
   Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evs)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (evs, S, A, U) \<in> protocol \<Longrightarrow> Says n run 5 (User m) (Card n) (Crypt (sesK K) (Passwd m)) \<in> set evs \<longrightarrow> Says n run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evs \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evs \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evs)
[PROOF STEP]
proof (erule protocol.induct, simp_all, (rule_tac [1-2] impI)+, (erule_tac [2] conjE)+,
 (rule_tac [3] impI, rule_tac [3] conjI)+, rule_tac [4] disjI1, rule_tac [5] impI,
 (rule_tac [6] impI)+, simp_all)
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>evsC5 S A U s a b c f Xa g. \<lbrakk>(evsC5, S, A, U) \<in> protocol; Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5); NonceS (S (User m, n, run)) = Some s; IntMapK (S (User m, n, run)) = Some a; ExtMapK (S (User m, n, run)) = Some b; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Says n run 4 Xa (User m) (Crypt (sesK (c * f)) \<lbrace>pubAK (c * (s + a * b)), Auth_Data g b, pubAK g, Crypt (priSK CA) (Hash (pubAK g))\<rbrace>) \<in> set evsC5; sesK K = sesK (c * f); Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 4. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 5. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 6. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsC5 S A U m n run s a b c f g X'
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>evsC5 S A U s a b c f Xa g. \<lbrakk>(evsC5, S, A, U) \<in> protocol; Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5); NonceS (S (User m, n, run)) = Some s; IntMapK (S (User m, n, run)) = Some a; ExtMapK (S (User m, n, run)) = Some b; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Says n run 4 Xa (User m) (Crypt (sesK (c * f)) \<lbrace>pubAK (c * (s + a * b)), Auth_Data g b, pubAK g, Crypt (priSK CA) (Hash (pubAK g))\<rbrace>) \<in> set evsC5; sesK K = sesK (c * f); Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 4. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 5. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 6. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume
    A: "Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m))
      \<in> set evsC5 \<longrightarrow>
      n = m \<and>
      (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0))
         \<in> set evsC5 \<or>
       Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0))
         \<in> set evsC5)" and
    B: "(evsC5, S, A, U) \<in> protocol" and
    C: "NonceS (S (User m, n, run)) = Some s" and
    D: "IntMapK (S (User m, n, run)) = Some a" and
    E: "ExtMapK (S (User m, n, run)) = Some b" and
    F: "IntAgrK (S (User m, n, run)) = Some c" and
    G: "ExtAgrK (S (User m, n, run)) = Some f" and
    H: "Says n run 4 X' (User m) (Crypt (sesK (c * f))
      \<lbrace>pubAK (c * (s + a * b)), Auth_Data g b, pubAK g,
       Crypt (priSK CA) (Hash (pubAK g))\<rbrace>) \<in> set evsC5" and
    I: "Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5"
[PROOF STATE]
proof (state)
this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
(evsC5, S, A, U) \<in> protocol
NonceS (S (User m, n, run)) = Some s
IntMapK (S (User m, n, run)) = Some a
ExtMapK (S (User m, n, run)) = Some b
IntAgrK (S (User m, n, run)) = Some c
ExtAgrK (S (User m, n, run)) = Some f
Says n run 4 X' (User m) (Crypt (sesK (c * f)) \<lbrace>pubAK (c * (s + a * b)), Auth_Data g b, pubAK g, Crypt (priSK CA) (Hash (pubAK g))\<rbrace>) \<in> set evsC5
Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (6 subgoals):
 1. \<And>evsC5 S A U s a b c f Xa g. \<lbrakk>(evsC5, S, A, U) \<in> protocol; Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5); NonceS (S (User m, n, run)) = Some s; IntMapK (S (User m, n, run)) = Some a; ExtMapK (S (User m, n, run)) = Some b; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Says n run 4 Xa (User m) (Crypt (sesK (c * f)) \<lbrace>pubAK (c * (s + a * b)), Auth_Data g b, pubAK g, Crypt (priSK CA) (Hash (pubAK g))\<rbrace>) \<in> set evsC5; sesK K = sesK (c * f); Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 4. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 5. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 6. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
show "n = m \<and>
    (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or>
     Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
proof (cases "m = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. m = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
m = 0

goal (2 subgoals):
 1. m = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
m = 0

goal (1 subgoal):
 1. Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5
[PROOF STEP]
using I
[PROOF STATE]
proof (prove)
using this:
m = 0
Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (1 subgoal):
 1. Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (2 subgoals):
 1. m = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with B
[PROOF STATE]
proof (chain)
picking this:
(evsC5, S, A, U) \<in> protocol
Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5
[PROOF STEP]
have "Says n run 5 Spy (Card n) (Crypt (sesK (c * f)) (Passwd n))
      \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
(evsC5, S, A, U) \<in> protocol
Says n run 5 X Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (1 subgoal):
 1. Says n run 5 Spy (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5
[PROOF STEP]
by (rule pr_confirm_says)
[PROOF STATE]
proof (state)
this:
Says n run 5 Spy (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5

goal (2 subgoals):
 1. m = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with B
[PROOF STATE]
proof (chain)
picking this:
(evsC5, S, A, U) \<in> protocol
Says n run 5 Spy (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5
[PROOF STEP]
have J: "Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n))
      \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
(evsC5, S, A, U) \<in> protocol
Says n run 5 Spy (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5

goal (1 subgoal):
 1. Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5
[PROOF STEP]
by (rule pr_user_authenticity)
[PROOF STATE]
proof (state)
this:
Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5

goal (2 subgoals):
 1. m = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
proof (cases n)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
case 0
[PROOF STATE]
proof (state)
this:
n = 0

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m))
        \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
n = 0

goal (1 subgoal):
 1. Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
using J and True
[PROOF STATE]
proof (prove)
using this:
n = 0
Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5
m = 0

goal (1 subgoal):
 1. Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
 2. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
case Suc
[PROOF STATE]
proof (state)
this:
n = Suc nat_

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "User n \<noteq> Spy"
[PROOF STATE]
proof (prove)
using this:
n = Suc nat_

goal (1 subgoal):
 1. User n \<noteq> Spy
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
User n \<noteq> Spy

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with B
[PROOF STATE]
proof (chain)
picking this:
(evsC5, S, A, U) \<in> protocol
User n \<noteq> Spy
[PROOF STEP]
have "Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)"
[PROOF STATE]
proof (prove)
using this:
(evsC5, S, A, U) \<in> protocol
User n \<noteq> Spy

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)
[PROOF STEP]
using J
[PROOF STATE]
proof (prove)
using this:
(evsC5, S, A, U) \<in> protocol
User n \<noteq> Spy
Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)
[PROOF STEP]
by (rule pr_key_secrecy)
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Key (sesK (c * f)) \<notin> A"
[PROOF STATE]
proof (prove)
using this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> A
[PROOF STEP]
using B
[PROOF STATE]
proof (prove)
using this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsC5)
(evsC5, S, A, U) \<in> protocol

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> A
[PROOF STEP]
by (simp add: pr_key_analz)
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "n = m \<and> n = n \<and> run = run"
[PROOF STATE]
proof (prove)
using this:
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. n = m \<and> n = n \<and> run = run
[PROOF STEP]
by (rule pr_unique_run_8 [OF B J F G])
[PROOF STATE]
proof (state)
this:
n = m \<and> n = n \<and> run = run

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m))
        \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
n = m \<and> n = n \<and> run = run

goal (1 subgoal):
 1. Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
using J
[PROOF STATE]
proof (prove)
using this:
n = m \<and> n = n \<and> run = run
Says n run 5 (User n) (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5

goal (1 subgoal):
 1. Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (1 subgoal):
 1. \<And>nat. n = Suc nat \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
m \<noteq> 0

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
have "Crypt (sesK (c * f)) (Number 0) \<in> spies evsC5"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> spies evsC5
[PROOF STEP]
using I
[PROOF STATE]
proof (prove)
using this:
Says n run 5 X (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> spies evsC5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> spies evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Number 0) \<in> A \<union> spies evsC5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> spies evsC5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> A \<union> spies evsC5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> A \<union> spies evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> A \<union> spies evsC5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
have "User m \<noteq> Spy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. User m \<noteq> Spy
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
m \<noteq> 0

goal (1 subgoal):
 1. User m \<noteq> Spy
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
User m \<noteq> Spy

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
hence J: "Key (sesK (c * f)) \<notin> A"
[PROOF STATE]
proof (prove)
using this:
User m \<noteq> Spy

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> A
[PROOF STEP]
by (rule pr_key_secrecy_aux [OF B _ C D E F G H])
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)
Key (sesK (c * f)) \<notin> A
[PROOF STEP]
have "\<exists>n run X.
      Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5 \<and>
      Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsC5)
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. \<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5
[PROOF STEP]
by (rule pr_confirm_parts [OF B])
[PROOF STATE]
proof (state)
this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5
[PROOF STEP]
obtain n' and run' and X where
     "Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsC5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5

goal (1 subgoal):
 1. (\<And>n' run' X. Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with B
[PROOF STATE]
proof (chain)
picking this:
(evsC5, S, A, U) \<in> protocol
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5
[PROOF STEP]
have
     "Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
(evsC5, S, A, U) \<in> protocol
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5

goal (1 subgoal):
 1. Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5
[PROOF STEP]
by (rule pr_user_authenticity)
[PROOF STATE]
proof (state)
this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
from this
[PROOF STATE]
proof (chain)
picking this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5
[PROOF STEP]
have "n' = m \<and> n' = n \<and> run' = run"
[PROOF STATE]
proof (prove)
using this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5

goal (1 subgoal):
 1. n' = m \<and> n' = n \<and> run' = run
[PROOF STEP]
by (rule pr_unique_run_8 [OF B _ F G J])
[PROOF STATE]
proof (state)
this:
n' = m \<and> n' = n \<and> run' = run

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5
n' = m \<and> n' = n \<and> run' = run
[PROOF STEP]
have
     "Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5"
[PROOF STATE]
proof (prove)
using this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsC5
n' = m \<and> n' = n \<and> run' = run

goal (1 subgoal):
 1. Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (1 subgoal):
 1. m \<noteq> 0 \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsC5

goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsC5)

goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsFC5 S A U run d e
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume
   "Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow>
    Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5"
[PROOF STATE]
proof (state)
this:
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5

goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5

goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume
   "(evsFC5, S, A, U) \<in> protocol" and
   "Says 0 run 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5"
[PROOF STATE]
proof (state)
this:
(evsFC5, S, A, U) \<in> protocol
Says 0 run 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5

goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5"
[PROOF STATE]
proof (prove)
using this:
(evsFC5, S, A, U) \<in> protocol
Says 0 run 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5

goal (1 subgoal):
 1. Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5
[PROOF STEP]
by (rule pr_confirm_says)
[PROOF STATE]
proof (state)
this:
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5

goal (5 subgoals):
 1. \<And>evsFC5 S A U na runa d e. \<lbrakk>(evsFC5, S, A, U) \<in> protocol; Says 0 runa 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; IntAgrK (S (Card 0, 0, runa)) = Some d; ExtAgrK (S (Card 0, 0, runa)) = Some e; Crypt (sesK (d * e)) (Passwd 0) \<in> synth (analz (A \<union> spies evsFC5)); Says 0 runa 5 X Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5; run = runa; na = 0; n = 0; sesK K = sesK (d * e); m = 0\<rbrakk> \<Longrightarrow> Says 0 runa 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 3. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 4. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 5. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5
[PROOF STEP]
show
   "Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5"
[PROOF STATE]
proof (prove)
using this:
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5 \<longrightarrow> Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
Says 0 run 5 Spy (Card 0) (Crypt (sesK (d * e)) (Passwd 0)) \<in> set evsFC5

goal (1 subgoal):
 1. Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Says 0 run 5 (Card 0) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsFC5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsR5 S A U n run d e X
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "(evsR5, S, A, U) \<in> protocol"
[PROOF STATE]
proof (state)
this:
(evsR5, S, A, U) \<in> protocol

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(evsR5, S, A, U) \<in> protocol

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n))
    \<in> set evsR5"
[PROOF STATE]
proof (state)
this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m))
    \<in> set evsR5"
[PROOF STATE]
proof (state)
this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)

goal (4 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> n = m
 2. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 3. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 4. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(evsR5, S, A, U) \<in> protocol
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
show "n = m"
[PROOF STATE]
proof (prove)
using this:
(evsR5, S, A, U) \<in> protocol
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)

goal (1 subgoal):
 1. n = m
[PROOF STEP]
by (rule pr_unique_passwd_parts)
[PROOF STATE]
proof (state)
this:
n = m

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsR5 S A U n run d e X
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "(evsR5, S, A, U) \<in> protocol"
[PROOF STATE]
proof (state)
this:
(evsR5, S, A, U) \<in> protocol

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(evsR5, S, A, U) \<in> protocol

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m))
    \<in> set evsR5"
[PROOF STATE]
proof (state)
this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd m) \<in> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd m) \<in> A \<union> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n))
    \<in> set evsR5"
[PROOF STATE]
proof (state)
this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Says n run 5 X (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd n) \<in> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (d * e)) (Passwd n) \<in> A \<union> spies evsR5

goal (1 subgoal):
 1. Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)

goal (3 subgoals):
 1. \<And>evsR5 S A U d e. \<lbrakk>(evsR5, S, A, U) \<in> protocol; Says n run 5 (Card n) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (d * e)) (Number 0)) \<in> set evsR5); IntAgrK (S (Card n, n, run)) = Some d; ExtAgrK (S (Card n, n, run)) = Some e; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd n)) \<in> set evsR5; Says n run 5 (User m) (Card n) (Crypt (sesK (d * e)) (Passwd m)) \<in> set evsR5; X = Card n \<and> sesK K = sesK (d * e)\<rbrakk> \<Longrightarrow> m = n
 2. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 3. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(evsR5, S, A, U) \<in> protocol
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)
[PROOF STEP]
show "m = n"
[PROOF STATE]
proof (prove)
using this:
(evsR5, S, A, U) \<in> protocol
Crypt (sesK (d * e)) (Passwd m) \<in> parts (A \<union> spies evsR5)
Crypt (sesK (d * e)) (Passwd n) \<in> parts (A \<union> spies evsR5)

goal (1 subgoal):
 1. m = n
[PROOF STEP]
by (rule pr_unique_passwd_parts)
[PROOF STATE]
proof (state)
this:
m = n

goal (2 subgoals):
 1. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 2. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 2. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsR5 n' run' d e X
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 2. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume "n = m \<and>
    (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or>
     Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5)"
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5)

goal (2 subgoals):
 1. \<And>evsR5 S A U na runa d e Xa. \<lbrakk>(evsR5, S, A, U) \<in> protocol; n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5); IntAgrK (S (Card na, na, runa)) = Some d; ExtAgrK (S (Card na, na, runa)) = Some e; Says na runa 5 Xa (Card na) (Crypt (sesK (d * e)) (Passwd na)) \<in> set evsR5; Says m run 5 (User m) (Card m) (Crypt (sesK K) (Passwd m)) \<in> set evsR5; Says m run 5 X (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5\<rbrakk> \<Longrightarrow> m = na \<and> run = runa \<and> m = na \<and> User m = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = na \<and> run = runa \<and> m = na \<and> Spy = Xa \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
 2. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
thus
   "m = n' \<and> run = run' \<and> m = n' \<and> User m = X \<and> sesK K = sesK (d * e) \<or>
    Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or>
    m = n' \<and> run = run' \<and> m = n' \<and> Spy = X \<and> sesK K = sesK (d * e) \<or>
    Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5"
[PROOF STATE]
proof (prove)
using this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5)

goal (1 subgoal):
 1. m = n' \<and> run = run' \<and> m = n' \<and> User m = X \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = n' \<and> run = run' \<and> m = n' \<and> Spy = X \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
m = n' \<and> run = run' \<and> m = n' \<and> User m = X \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) (User m) (Crypt (sesK K) (Number 0)) \<in> set evsR5 \<or> m = n' \<and> run = run' \<and> m = n' \<and> Spy = X \<and> sesK K = sesK (d * e) \<or> Says m run 5 (Card m) Spy (Crypt (sesK K) (Number 0)) \<in> set evsR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
fix evsFR5 S A U m n run c f
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
assume
    A: "(evsFR5, S, A, U) \<in> protocol" and
    B: "0 < m" and
    C: "IntAgrK (S (User m, n, run)) = Some c" and
    D: "ExtAgrK (S (User m, n, run)) = Some f" and
    E: "Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5))" and
    F: "Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5"
[PROOF STATE]
proof (state)
this:
(evsFR5, S, A, U) \<in> protocol
0 < m
IntAgrK (S (User m, n, run)) = Some c
ExtAgrK (S (User m, n, run)) = Some f
Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5))
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
have "User m \<noteq> Spy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. User m \<noteq> Spy
[PROOF STEP]
using B
[PROOF STATE]
proof (prove)
using this:
0 < m

goal (1 subgoal):
 1. User m \<noteq> Spy
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
User m \<noteq> Spy

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
(evsFR5, S, A, U) \<in> protocol
User m \<noteq> Spy
[PROOF STEP]
have G: "Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
using this:
(evsFR5, S, A, U) \<in> protocol
User m \<noteq> Spy

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)
[PROOF STEP]
using F
[PROOF STATE]
proof (prove)
using this:
(evsFR5, S, A, U) \<in> protocol
User m \<noteq> Spy
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)
[PROOF STEP]
by (rule pr_key_secrecy)
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
have "Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or>
    Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and>
    Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or> Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and> Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)
[PROOF STEP]
using E
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5))

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or> Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and> Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)
[PROOF STEP]
by (rule synth_crypt)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or> Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and> Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)
Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or> Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and> Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)
[PROOF STEP]
have "Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
using this:
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)
Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5) \<or> Number 0 \<in> synth (analz (A \<union> spies evsFR5)) \<and> Key (sesK (c * f)) \<in> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)
[PROOF STEP]
by (rule subsetD [OF analz_parts_subset])
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
have H: "Key (sesK (c * f)) \<notin> A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> A
[PROOF STEP]
using A and G
[PROOF STATE]
proof (prove)
using this:
(evsFR5, S, A, U) \<in> protocol
Key (sesK (c * f)) \<notin> analz (A \<union> spies evsFR5)

goal (1 subgoal):
 1. Key (sesK (c * f)) \<notin> A
[PROOF STEP]
by (simp add: pr_key_analz)
[PROOF STATE]
proof (state)
this:
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)
Key (sesK (c * f)) \<notin> A
[PROOF STEP]
have "\<exists>n run X.
    Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsFR5 \<and>
    Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Number 0) \<in> parts (A \<union> spies evsFR5)
Key (sesK (c * f)) \<notin> A

goal (1 subgoal):
 1. \<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsFR5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5
[PROOF STEP]
by (rule pr_confirm_parts [OF A])
[PROOF STATE]
proof (state)
this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsFR5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsFR5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5
[PROOF STEP]
obtain n' and run' and X where I:
   "Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5 \<and>
    Says n' run' 5 (Card n') X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
\<exists>n run X. Says n run 5 X (Card n) (Crypt (sesK (c * f)) (Passwd n)) \<in> set evsFR5 \<and> Says n run 5 (Card n) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. (\<And>n' run' X. Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5 \<and> Says n' run' 5 (Card n') X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5 \<and> Says n' run' 5 (Card n') X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence
   "Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5 \<and> Says n' run' 5 (Card n') X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
(evsFR5, S, A, U) \<in> protocol
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5
[PROOF STEP]
have J:
   "Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n'))
      \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
(evsFR5, S, A, U) \<in> protocol
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5

goal (1 subgoal):
 1. Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5
[PROOF STEP]
by (rule pr_user_authenticity)
[PROOF STATE]
proof (state)
this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Passwd n') \<in> spies evsFR5"
[PROOF STATE]
proof (prove)
using this:
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd n') \<in> spies evsFR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd n') \<in> spies evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Passwd n') \<in> A \<union> spies evsFR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Passwd n') \<in> spies evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd n') \<in> A \<union> spies evsFR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd n') \<in> A \<union> spies evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Passwd n') \<in> A \<union> spies evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
have "Crypt (sesK (c * f)) (Passwd m) \<in> spies evsFR5"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd m) \<in> spies evsFR5
[PROOF STEP]
using F
[PROOF STATE]
proof (prove)
using this:
Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd m) \<in> spies evsFR5
[PROOF STEP]
by (rule set_spies)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd m) \<in> spies evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Passwd m) \<in> A \<union> spies evsFR5"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Passwd m) \<in> spies evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd m) \<in> A \<union> spies evsFR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd m) \<in> A \<union> spies evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "Crypt (sesK (c * f)) (Passwd m) \<in> parts (A \<union> spies evsFR5)"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Passwd m) \<in> A \<union> spies evsFR5

goal (1 subgoal):
 1. Crypt (sesK (c * f)) (Passwd m) \<in> parts (A \<union> spies evsFR5)
[PROOF STEP]
by (rule parts.Inj)
[PROOF STATE]
proof (state)
this:
Crypt (sesK (c * f)) (Passwd m) \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)
Crypt (sesK (c * f)) (Passwd m) \<in> parts (A \<union> spies evsFR5)
[PROOF STEP]
have "n' = m"
[PROOF STATE]
proof (prove)
using this:
Crypt (sesK (c * f)) (Passwd n') \<in> parts (A \<union> spies evsFR5)
Crypt (sesK (c * f)) (Passwd m) \<in> parts (A \<union> spies evsFR5)

goal (1 subgoal):
 1. n' = m
[PROOF STEP]
by (rule pr_unique_passwd_parts [OF A])
[PROOF STATE]
proof (state)
this:
n' = m

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
n' = m

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
from this
[PROOF STATE]
proof (chain)
picking this:
n' = m
[PROOF STEP]
have
   "Says m run' 5 (User m) (Card m) (Crypt (sesK (c * f)) (Passwd m))
      \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
n' = m

goal (1 subgoal):
 1. Says m run' 5 (User m) (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5
[PROOF STEP]
using J
[PROOF STATE]
proof (prove)
using this:
n' = m
Says n' run' 5 (User n') (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5

goal (1 subgoal):
 1. Says m run' 5 (User m) (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Says m run' 5 (User m) (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence "m = m \<and> m = n \<and> run' = run"
[PROOF STATE]
proof (prove)
using this:
Says m run' 5 (User m) (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. m = m \<and> m = n \<and> run' = run
[PROOF STEP]
by (rule pr_unique_run_8 [OF A _ C D H])
[PROOF STATE]
proof (state)
this:
m = m \<and> m = n \<and> run' = run

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
hence K: "n = m \<and> run' = run"
[PROOF STATE]
proof (prove)
using this:
m = m \<and> m = n \<and> run' = run

goal (1 subgoal):
 1. n = m \<and> run' = run
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
n = m \<and> run' = run

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
n' = m
n = m \<and> run' = run
[PROOF STEP]
have L:
   "Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and>
    Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
n' = m
n = m \<and> run' = run

goal (1 subgoal):
 1. Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5
[PROOF STEP]
using I
[PROOF STATE]
proof (prove)
using this:
n' = m
n = m \<and> run' = run
Says n' run' 5 X (Card n') (Crypt (sesK (c * f)) (Passwd n')) \<in> set evsFR5 \<and> Says n' run' 5 (Card n') X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
from this
[PROOF STATE]
proof (chain)
picking this:
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5
[PROOF STEP]
have
   "Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5"
[PROOF STATE]
proof (prove)
using this:
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5 \<and> Says m run 5 (Card m) X (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5

goal (1 subgoal):
 1. Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
with A
[PROOF STATE]
proof (chain)
picking this:
(evsFR5, S, A, U) \<in> protocol
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5
[PROOF STEP]
have "X = User m \<or> X = Spy"
[PROOF STATE]
proof (prove)
using this:
(evsFR5, S, A, U) \<in> protocol
Says m run 5 X (Card m) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5

goal (1 subgoal):
 1. X = User m \<or> X = Spy
[PROOF STEP]
by (rule pr_passwd_says)
[PROOF STATE]
proof (state)
this:
X = User m \<or> X = Spy

goal (1 subgoal):
 1. \<And>evsFR5 S A U c f. \<lbrakk>(evsFR5, S, A, U) \<in> protocol; Says n run 5 Spy (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5); 0 < m; IntAgrK (S (User m, n, run)) = Some c; ExtAgrK (S (User m, n, run)) = Some f; Crypt (sesK (c * f)) (Number 0) \<in> synth (analz (A \<union> spies evsFR5)); Says n run 5 (User m) (Card n) (Crypt (sesK (c * f)) (Passwd m)) \<in> set evsFR5; X = Spy \<and> sesK K = sesK (c * f)\<rbrakk> \<Longrightarrow> n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
thus "n = m \<and>
   (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or>
    Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)"
[PROOF STATE]
proof (prove)
using this:
X = User m \<or> X = Spy

goal (1 subgoal):
 1. n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)
[PROOF STEP]
by (rule disjE, insert L, simp_all add: K)
[PROOF STATE]
proof (state)
this:
n = m \<and> (Says m run 5 (Card m) (User m) (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5 \<or> Says m run 5 (Card m) Spy (Crypt (sesK (c * f)) (Number 0)) \<in> set evsFR5)

goal:
No subgoals!
[PROOF STEP]
qed