[STATEMENT]
lemma Throw_lemma: "\<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; (x1,s1)\<Colon>\<preceq>(G, L);
    x1 = None \<longrightarrow> G,s1\<turnstile>a'\<Colon>\<preceq> Class tn\<rbrakk> \<Longrightarrow> (throw a' x1, s1)\<Colon>\<preceq>(G, L)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; (x1, s1)\<Colon>\<preceq>(G, L); x1 = None \<longrightarrow> G,s1\<turnstile>a'\<Colon>\<preceq>Class tn\<rbrakk> \<Longrightarrow> (throw a' x1, s1)\<Colon>\<preceq>(G, L)
[PROOF STEP]
apply (auto split: split_abrupt_if simp add: throw_def2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; Norm s1\<Colon>\<preceq>(G, L); a' \<noteq> Null; G,s1\<turnstile>a'\<Colon>\<preceq>Class tn; x1 = None\<rbrakk> \<Longrightarrow> (Some (Xcpt (Loc (the_Addr a'))), s1)\<Colon>\<preceq>(G, L)
[PROOF STEP]
apply (erule conforms_xconf)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; a' \<noteq> Null; G,s1\<turnstile>a'\<Colon>\<preceq>Class tn; x1 = None\<rbrakk> \<Longrightarrow> \<forall>a. Some (Xcpt (Loc (the_Addr a'))) = Some (Xcpt (Loc a)) \<longrightarrow> G,s1\<turnstile>Addr a\<Colon>\<preceq>Class (SXcpt Throwable)
 2. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; a' \<noteq> Null; G,s1\<turnstile>a'\<Colon>\<preceq>Class tn; x1 = None\<rbrakk> \<Longrightarrow> Some (Xcpt (Loc (the_Addr a'))) = Some (Jump Ret) \<longrightarrow> locals s1 Result \<noteq> None
[PROOF STEP]
apply (frule conf_RefTD)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; a' \<noteq> Null; G,s1\<turnstile>a'\<Colon>\<preceq>Class tn; x1 = None; a' = Null \<or> (\<exists>a obj T'. a' = Addr a \<and> heap s1 a = Some obj \<and> obj_ty obj = T' \<and> G\<turnstile>T'\<preceq>Class tn)\<rbrakk> \<Longrightarrow> \<forall>a. Some (Xcpt (Loc (the_Addr a'))) = Some (Xcpt (Loc a)) \<longrightarrow> G,s1\<turnstile>Addr a\<Colon>\<preceq>Class (SXcpt Throwable)
 2. \<lbrakk>G\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; wf_prog G; a' \<noteq> Null; G,s1\<turnstile>a'\<Colon>\<preceq>Class tn; x1 = None\<rbrakk> \<Longrightarrow> Some (Xcpt (Loc (the_Addr a'))) = Some (Jump Ret) \<longrightarrow> locals s1 Result \<noteq> None
[PROOF STEP]
apply (auto elim: widen.subcls [THEN conf_widen])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma find_path1_autoref[autoref_rules]:
  fixes node_rel :: "('ai \<times> 'a) set"
  assumes eq: "GEN_OP node_eq_impl (=) (node_rel\<rightarrow>node_rel\<rightarrow>bool_rel)"
  assumes hash: "SIDE_GEN_ALGO (is_bounded_hashcode node_rel node_eq_impl node_hash_impl)"
  assumes hash_dsz: "SIDE_GEN_ALGO (is_valid_def_hm_size TYPE('ai) node_def_hash_size)"

  shows "(find_path1_impl node_eq_impl node_hash_impl node_def_hash_size,find_path1)
    \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow>node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow>
      \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>Relators.option_rel\<rangle>nres_rel"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note EQI = GEN_OP_D[OF eq]
[PROOF STATE]
proof (state)
this:
(node_eq_impl, (=)) \<in> node_rel \<rightarrow> node_rel \<rightarrow> bool_rel

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note HASHI = SIDE_GEN_ALGO_D[OF hash]
[PROOF STATE]
proof (state)
this:
is_bounded_hashcode node_rel node_eq_impl node_hash_impl

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note DSZI = SIDE_GEN_ALGO_D[OF hash_dsz]
[PROOF STATE]
proof (state)
this:
is_valid_def_hm_size TYPE('ai) node_def_hash_size

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note R = find_path1_impl.refine[param_fo, THEN nres_relD, OF EQI HASHI DSZI]
[PROOF STATE]
proof (state)
this:
\<lbrakk>(?x3, ?x'3) \<in> \<langle>node_rel\<rangle>slg_rel; (?x2, ?x'2) \<in> node_rel; (?x1, ?x'1) \<in> node_rel \<rightarrow> bool_rel\<rbrakk> \<Longrightarrow> find_path1_impl node_eq_impl node_hash_impl node_def_hash_size ?x3 ?x2 ?x1 \<le> \<Down> (\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel) (find_path1_gen ?x'3 ?x'2 ?x'1)

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note R
[PROOF STATE]
proof (state)
this:
\<lbrakk>(?x3, ?x'3) \<in> \<langle>node_rel\<rangle>slg_rel; (?x2, ?x'2) \<in> node_rel; (?x1, ?x'1) \<in> node_rel \<rightarrow> bool_rel\<rbrakk> \<Longrightarrow> find_path1_impl node_eq_impl node_hash_impl node_def_hash_size ?x3 ?x2 ?x1 \<le> \<Down> (\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel) (find_path1_gen ?x'3 ?x'2 ?x'1)

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<lbrakk>(?x3, ?x'3) \<in> \<langle>node_rel\<rangle>slg_rel; (?x2, ?x'2) \<in> node_rel; (?x1, ?x'1) \<in> node_rel \<rightarrow> bool_rel\<rbrakk> \<Longrightarrow> find_path1_impl node_eq_impl node_hash_impl node_def_hash_size ?x3 ?x2 ?x1 \<le> \<Down> (\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel) (find_path1_gen ?x'3 ?x'2 ?x'1)

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
note find_path1_gen_correct
[PROOF STATE]
proof (state)
this:
find_path1_gen ?E ?u0.0 ?P \<le> find_path1 ?E ?u0.0 ?P

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>(?x5, ?E1) \<in> \<langle>node_rel\<rangle>slg_rel; (?x4, ?u0.1) \<in> node_rel; (?x3, ?P1) \<in> node_rel \<rightarrow> bool_rel\<rbrakk> \<Longrightarrow> find_path1_impl node_eq_impl node_hash_impl node_def_hash_size ?x5 ?x4 ?x3 \<le> \<Down> (\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel) (find_path1 ?E1 ?u0.1 ?P1)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>(?x5, ?E1) \<in> \<langle>node_rel\<rangle>slg_rel; (?x4, ?u0.1) \<in> node_rel; (?x3, ?P1) \<in> node_rel \<rightarrow> bool_rel\<rbrakk> \<Longrightarrow> find_path1_impl node_eq_impl node_hash_impl node_def_hash_size ?x5 ?x4 ?x3 \<le> \<Down> (\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel) (find_path1 ?E1 ?u0.1 ?P1)

goal (1 subgoal):
 1. (find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel
[PROOF STEP]
by (blast intro: nres_relI)
[PROOF STATE]
proof (state)
this:
(find_path1_impl node_eq_impl node_hash_impl node_def_hash_size, find_path1) \<in> \<langle>node_rel\<rangle>slg_rel \<rightarrow> node_rel \<rightarrow> (node_rel \<rightarrow> bool_rel) \<rightarrow> \<langle>\<langle>\<langle>node_rel\<rangle>list_rel \<times>\<^sub>r node_rel\<rangle>option_rel\<rangle>nres_rel

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma "x \<cdot> n 1 = n 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<cdot> n (1::'a) = n (1::'a)
[PROOF STEP]
(*nitpick*)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<cdot> n (1::'a) = n (1::'a)
[PROOF STEP]
oops


[STATEMENT]
lemma A_trusts_secure_authenticator:
    "\<lbrakk> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (spies evs);
       Key K \<notin> analz (spies evs); evs \<in> kerbIV \<rbrakk>
\<Longrightarrow> \<exists> B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs \<or>
           Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs); Key K \<notin> analz (knows Spy evs); evs \<in> kerbIV\<rbrakk> \<Longrightarrow> \<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs
[PROOF STEP]
apply (erule rev_mp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>Key K \<notin> analz (knows Spy evs); evs \<in> kerbIV\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs)
[PROOF STEP]
apply (erule rev_mp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. evs \<in> kerbIV \<Longrightarrow> Key K \<notin> analz (knows Spy evs) \<longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs)
[PROOF STEP]
apply (erule kerbIV.induct, analz_mono_contra)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. Key K \<notin> analz (knows Spy []) \<longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy []) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set [] \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set [])
 2. \<And>evsf X B. \<lbrakk>evsf \<in> kerbIV; X \<in> synth (analz (knows Spy evsf)); Key K \<notin> analz (knows Spy evsf); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsf) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsf \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsf)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Spy B X # evsf)) \<longrightarrow> (\<exists>Ba Xa. Says A Tgs \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Spy B X # evsf) \<or> Says A Ba \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Spy B X # evsf))
 3. \<And>evs1 Aa. \<lbrakk>evs1 \<in> kerbIV; Key K \<notin> analz (knows Spy evs1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1))
 4. \<And>evs2 authK A' Aa T1. \<lbrakk>evs2 \<in> kerbIV; Key authK \<notin> used evs2; authK \<in> symKeys; Says A' Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs2; Key K \<notin> analz (knows Spy evs2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2))
 5. \<And>evs3 Aa T1 Kas' authK Ta authTicket B. \<lbrakk>evs3 \<in> kerbIV; Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs3; Says Kas' Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evs3; valid Ta wrt T1; Key K \<notin> analz (knows Spy evs3); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs3) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs3 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs3)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3))
 6. \<And>evs4 servK B authK A' Aa Ta T2. \<lbrakk>evs4 \<in> kerbIV; Key servK \<notin> used evs4; servK \<in> symKeys; B \<noteq> Tgs; authK \<in> symKeys; Says A' Tgs \<lbrace>Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number Ta\<rbrace>, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs4; \<not> expiredAK Ta evs4; \<not> expiredA T2 evs4; servKlife + CT evs4 \<le> authKlife + Ta; Key K \<notin> analz (knows Spy evs4); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs4) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs4 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs4)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4))
 7. \<And>evs5 authK servK Aa authTicket T2 B Tgs' Ts servTicket. \<lbrakk>evs5 \<in> kerbIV; authK \<in> symKeys; servK \<in> symKeys; Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs5; Says Tgs' Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evs5; valid Ts wrt T2; Key K \<notin> analz (knows Spy evs5); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs5) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs5 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs5)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5))
 8. \<And>evs6 A' B Aa servK Ts T3. \<lbrakk>evs6 \<in> kerbIV; Says A' B \<lbrace>Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number Ts\<rbrace>, Crypt servK \<lbrace>Agent Aa, Number T3\<rbrace>\<rbrace> \<in> set evs6; \<not> expiredSK Ts evs6; \<not> expiredA T3 evs6; Key K \<notin> analz (knows Spy evs6); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs6) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs6 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs6)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says B Aa (Crypt servK (Number T3)) # evs6)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6))
 9. \<And>evsO1 Aa authK Ta authTicket. \<lbrakk>evsO1 \<in> kerbIV; Aa \<noteq> Spy; Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evsO1; expiredAK Ta evsO1; Key K \<notin> analz (knows Spy evsO1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1))
 10. \<And>evsO2 Aa authK servK B Ts servTicket. \<lbrakk>evsO2 \<in> kerbIV; Aa \<noteq> Spy; Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evsO2; expiredSK Ts evsO2; Key K \<notin> analz (knows Spy evsO2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2))
[PROOF STEP]
apply (frule_tac [5] Says_ticket_parts)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. Key K \<notin> analz (knows Spy []) \<longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy []) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set [] \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set [])
 2. \<And>evsf X B. \<lbrakk>evsf \<in> kerbIV; X \<in> synth (analz (knows Spy evsf)); Key K \<notin> analz (knows Spy evsf); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsf) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsf \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsf)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Spy B X # evsf)) \<longrightarrow> (\<exists>Ba Xa. Says A Tgs \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Spy B X # evsf) \<or> Says A Ba \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Spy B X # evsf))
 3. \<And>evs1 Aa. \<lbrakk>evs1 \<in> kerbIV; Key K \<notin> analz (knows Spy evs1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1))
 4. \<And>evs2 authK A' Aa T1. \<lbrakk>evs2 \<in> kerbIV; Key authK \<notin> used evs2; authK \<in> symKeys; Says A' Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs2; Key K \<notin> analz (knows Spy evs2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2))
 5. \<And>evs3 Aa T1 Kas' authK Ta authTicket B. \<lbrakk>evs3 \<in> kerbIV; Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs3; Says Kas' Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evs3; valid Ta wrt T1; Key K \<notin> analz (knows Spy evs3); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs3) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs3 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs3); authTicket \<in> parts (knows Spy evs3)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3))
 6. \<And>evs4 servK B authK A' Aa Ta T2. \<lbrakk>evs4 \<in> kerbIV; Key servK \<notin> used evs4; servK \<in> symKeys; B \<noteq> Tgs; authK \<in> symKeys; Says A' Tgs \<lbrace>Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number Ta\<rbrace>, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs4; \<not> expiredAK Ta evs4; \<not> expiredA T2 evs4; servKlife + CT evs4 \<le> authKlife + Ta; Key K \<notin> analz (knows Spy evs4); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs4) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs4 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs4)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4))
 7. \<And>evs5 authK servK Aa authTicket T2 B Tgs' Ts servTicket. \<lbrakk>evs5 \<in> kerbIV; authK \<in> symKeys; servK \<in> symKeys; Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs5; Says Tgs' Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evs5; valid Ts wrt T2; Key K \<notin> analz (knows Spy evs5); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs5) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs5 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs5)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5))
 8. \<And>evs6 A' B Aa servK Ts T3. \<lbrakk>evs6 \<in> kerbIV; Says A' B \<lbrace>Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number Ts\<rbrace>, Crypt servK \<lbrace>Agent Aa, Number T3\<rbrace>\<rbrace> \<in> set evs6; \<not> expiredSK Ts evs6; \<not> expiredA T3 evs6; Key K \<notin> analz (knows Spy evs6); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs6) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs6 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs6)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says B Aa (Crypt servK (Number T3)) # evs6)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6))
 9. \<And>evsO1 Aa authK Ta authTicket. \<lbrakk>evsO1 \<in> kerbIV; Aa \<noteq> Spy; Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evsO1; expiredAK Ta evsO1; Key K \<notin> analz (knows Spy evsO1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1))
 10. \<And>evsO2 Aa authK servK B Ts servTicket. \<lbrakk>evsO2 \<in> kerbIV; Aa \<noteq> Spy; Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evsO2; expiredSK Ts evsO2; Key K \<notin> analz (knows Spy evsO2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2))
[PROOF STEP]
apply (frule_tac [7] Says_ticket_parts)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. Key K \<notin> analz (knows Spy []) \<longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy []) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set [] \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set [])
 2. \<And>evsf X B. \<lbrakk>evsf \<in> kerbIV; X \<in> synth (analz (knows Spy evsf)); Key K \<notin> analz (knows Spy evsf); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsf) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsf \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsf)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Spy B X # evsf)) \<longrightarrow> (\<exists>Ba Xa. Says A Tgs \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Spy B X # evsf) \<or> Says A Ba \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Spy B X # evsf))
 3. \<And>evs1 Aa. \<lbrakk>evs1 \<in> kerbIV; Key K \<notin> analz (knows Spy evs1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number (CT evs1)\<rbrace> # evs1))
 4. \<And>evs2 authK A' Aa T1. \<lbrakk>evs2 \<in> kerbIV; Key authK \<notin> used evs2; authK \<in> symKeys; Says A' Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs2; Key K \<notin> analz (knows Spy evs2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number (CT evs2), Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number (CT evs2)\<rbrace>\<rbrace>) # evs2))
 5. \<And>evs3 Aa T1 Kas' authK Ta authTicket B. \<lbrakk>evs3 \<in> kerbIV; Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs3; Says Kas' Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evs3; valid Ta wrt T1; Key K \<notin> analz (knows Spy evs3); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs3) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs3 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs3); authTicket \<in> parts (knows Spy evs3)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent B\<rbrace> # evs3))
 6. \<And>evs4 servK B authK A' Aa Ta T2. \<lbrakk>evs4 \<in> kerbIV; Key servK \<notin> used evs4; servK \<in> symKeys; B \<noteq> Tgs; authK \<in> symKeys; Says A' Tgs \<lbrace>Crypt (shrK Tgs) \<lbrace>Agent Aa, Agent Tgs, Key authK, Number Ta\<rbrace>, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs4; \<not> expiredAK Ta evs4; \<not> expiredA T2 evs4; servKlife + CT evs4 \<le> authKlife + Ta; Key K \<notin> analz (knows Spy evs4); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs4) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs4 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs4)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number (CT evs4), Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number (CT evs4)\<rbrace>\<rbrace>) # evs4))
 7. \<And>evs5 authK servK Aa authTicket T2 B Tgs' Ts servTicket. \<lbrakk>evs5 \<in> kerbIV; authK \<in> symKeys; servK \<in> symKeys; Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs5; Says Tgs' Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evs5; valid Ts wrt T2; Key K \<notin> analz (knows Spy evs5); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs5) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs5 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs5); servTicket \<in> parts (knows Spy evs5)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa B \<lbrace>servTicket, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> # evs5))
 8. \<And>evs6 A' B Aa servK Ts T3. \<lbrakk>evs6 \<in> kerbIV; Says A' B \<lbrace>Crypt (shrK B) \<lbrace>Agent Aa, Agent B, Key servK, Number Ts\<rbrace>, Crypt servK \<lbrace>Agent Aa, Number T3\<rbrace>\<rbrace> \<in> set evs6; \<not> expiredSK Ts evs6; \<not> expiredA T3 evs6; Key K \<notin> analz (knows Spy evs6); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs6) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs6 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs6)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says B Aa (Crypt servK (Number T3)) # evs6)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says B Aa (Crypt servK (Number T3)) # evs6))
 9. \<And>evsO1 Aa authK Ta authTicket. \<lbrakk>evsO1 \<in> kerbIV; Aa \<noteq> Spy; Says Kas Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evsO1; expiredAK Ta evsO1; Key K \<notin> analz (knows Spy evsO1); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO1) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO1 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO1)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1)) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1) \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent Tgs, Number Ta, Key authK\<rbrace> # evsO1))
 10. \<And>evsO2 Aa authK servK B Ts servTicket. \<lbrakk>evsO2 \<in> kerbIV; Aa \<noteq> Spy; Says Tgs Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evsO2; expiredSK Ts evsO2; Key K \<notin> analz (knows Spy evsO2); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsO2) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsO2 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsO2)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2)) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2) \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set (Says Aa Spy \<lbrace>Agent Aa, Agent B, Number Ts, Key servK\<rbrace> # evsO2))
[PROOF STEP]
apply (simp_all add: all_conj_distrib)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>evsf X B. \<lbrakk>evsf \<in> kerbIV; X \<in> synth (analz (knows Spy evsf)); Key K \<notin> analz (knows Spy evsf); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evsf) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evsf \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsf)\<rbrakk> \<Longrightarrow> Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (insert X (knows Spy evsf)) \<longrightarrow> (\<exists>Ba Xa. A = Spy \<and> Tgs = B \<and> \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> = X \<or> Says A Tgs \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set evsf \<or> A = Spy \<and> Ba = B \<and> \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> = X \<or> Says A Ba \<lbrace>Xa, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evsf)
 2. \<And>evs3 Aa T1 Kas' authK Ta authTicket B. \<lbrakk>evs3 \<in> kerbIV; Says Aa Kas \<lbrace>Agent Aa, Agent Tgs, Number T1\<rbrace> \<in> set evs3; Says Kas' Aa (Crypt (shrK Aa) \<lbrace>Key authK, Agent Tgs, Number Ta, authTicket\<rbrace>) \<in> set evs3; valid Ta wrt T1; Key K \<notin> analz (knows Spy evs3); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs3) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs3 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs3); authTicket \<in> parts (knows Spy evs3)\<rbrakk> \<Longrightarrow> (K = authK \<and> A = Aa \<and> T = CT evs3 \<longrightarrow> (\<exists>Ba X. X = authTicket \<and> Ba = B \<or> Says Aa Tgs \<lbrace>X, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>, Agent Ba\<rbrace> \<in> set evs3 \<or> Says Aa Ba \<lbrace>X, Crypt authK \<lbrace>Agent Aa, Number (CT evs3)\<rbrace>\<rbrace> \<in> set evs3)) \<and> (Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs3) \<longrightarrow> (\<exists>Ba X. A = Aa \<and> X = authTicket \<and> K = authK \<and> A = Aa \<and> T = CT evs3 \<and> Ba = B \<or> Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set evs3 \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs3))
 3. \<And>evs5 authK servK Aa authTicket T2 B Tgs' Ts servTicket. \<lbrakk>evs5 \<in> kerbIV; authK \<in> symKeys; servK \<in> symKeys; Says Aa Tgs \<lbrace>authTicket, Crypt authK \<lbrace>Agent Aa, Number T2\<rbrace>, Agent B\<rbrace> \<in> set evs5; Says Tgs' Aa (Crypt authK \<lbrace>Key servK, Agent B, Number Ts, servTicket\<rbrace>) \<in> set evs5; valid Ts wrt T2; Key K \<notin> analz (knows Spy evs5); Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs5) \<longrightarrow> (\<exists>B X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent B\<rbrace> \<in> set evs5 \<or> Says A B \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs5); servTicket \<in> parts (knows Spy evs5)\<rbrakk> \<Longrightarrow> (K = servK \<and> A = Aa \<and> T = CT evs5 \<longrightarrow> (\<exists>Ba X. Says Aa Tgs \<lbrace>X, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>, Agent Ba\<rbrace> \<in> set evs5 \<or> Ba = B \<and> X = servTicket \<or> Says Aa Ba \<lbrace>X, Crypt servK \<lbrace>Agent Aa, Number (CT evs5)\<rbrace>\<rbrace> \<in> set evs5)) \<and> (Crypt K \<lbrace>Agent A, Number T\<rbrace> \<in> parts (knows Spy evs5) \<longrightarrow> (\<exists>Ba X. Says A Tgs \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>, Agent Ba\<rbrace> \<in> set evs5 \<or> A = Aa \<and> Ba = B \<and> X = servTicket \<and> K = servK \<and> A = Aa \<and> T = CT evs5 \<or> Says A Ba \<lbrace>X, Crypt K \<lbrace>Agent A, Number T\<rbrace>\<rbrace> \<in> set evs5))
[PROOF STEP]
apply blast+
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma fsegerberg [simp]: "d y + |x\<^sup>\<star>\<rangle> A x y = |x\<^sup>\<star>\<rangle> y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y =  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
proof (rule order.antisym)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
 2.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
have "d y + |x\<rangle> (d y + |x\<^sup>\<star>\<rangle> A x y) = d y + |x\<rangle> y + |x\<rangle> |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y )"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<rangle> y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)
[PROOF STEP]
by (simp add: A_fdia add_assoc local.ds.fdia_add1)
[PROOF STATE]
proof (state)
this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<rangle> y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (2 subgoals):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
 2.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<rangle> y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (2 subgoals):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
 2.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
have "... = d y + |x\<rangle> y \<cdot> ad y + |x\<rangle> |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y )"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d y +  |x\<rangle> y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y) = d y +  |x\<rangle> y \<cdot> ad y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)
[PROOF STEP]
by (metis local.am2 local.d_6 local.dka.fd_def local.fdia_def)
[PROOF STATE]
proof (state)
this:
d y +  |x\<rangle> y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y) = d y +  |x\<rangle> y \<cdot> ad y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (2 subgoals):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
 2.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<rangle> y \<cdot> ad y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)
[PROOF STEP]
have "d y + |x\<rangle> (d y + |x\<^sup>\<star>\<rangle> A x y) = d y + |x\<^sup>\<star>\<rangle> A x y"
[PROOF STATE]
proof (prove)
using this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<rangle> y \<cdot> ad y +  |x\<rangle>  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (1 subgoal):
 1. d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
by (metis A_dom A_fdia add_assoc local.dka.fdia_star_unfold_var)
[PROOF STATE]
proof (state)
this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<^sup>\<star>\<rangle> A x y

goal (2 subgoals):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
 2.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
thus "|x\<^sup>\<star>\<rangle> y \<le> d y + |x\<^sup>\<star>\<rangle> A x y"
[PROOF STATE]
proof (prove)
using this:
d y +  |x\<rangle> (d y +  |x\<^sup>\<star>\<rangle> A x y) = d y +  |x\<^sup>\<star>\<rangle> A x y

goal (1 subgoal):
 1.  |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y
[PROOF STEP]
by (metis local.a_d_add_closure local.ads_d_def local.dka.fdia_star_induct_eq local.fdia_def)
[PROOF STATE]
proof (state)
this:
 |x\<^sup>\<star>\<rangle> y \<le> d y +  |x\<^sup>\<star>\<rangle> A x y

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
have "d y + |x\<^sup>\<star>\<rangle> A x y = d y + |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y )"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y = d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)
[PROOF STEP]
by (simp add: A_fdia)
[PROOF STATE]
proof (state)
this:
d y +  |x\<^sup>\<star>\<rangle> A x y = d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d y +  |x\<^sup>\<star>\<rangle> A x y = d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y)

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
have "... \<le> d y + |x\<^sup>\<star>\<rangle> |x\<rangle> y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y) \<le> d y +  |x\<^sup>\<star>\<rangle>  |x\<rangle> y
[PROOF STEP]
using local.dpdz.domain_1'' local.ds.fd_iso1 local.join.sup_mono
[PROOF STATE]
proof (prove)
using this:
ad (ad (?x \<cdot> ?y)) \<le> ad (ad ?x)
ad (ad ?x) \<le> ad (ad ?y) \<Longrightarrow>  |?z\<rangle> ?x \<le>  |?z\<rangle> ?y
\<lbrakk>?a \<le> ?c; ?b \<le> ?d\<rbrakk> \<Longrightarrow> ?a + ?b \<le> ?c + ?d

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y) \<le> d y +  |x\<^sup>\<star>\<rangle>  |x\<rangle> y
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
d y +  |x\<^sup>\<star>\<rangle> ( |x\<rangle> y \<cdot> ad y) \<le> d y +  |x\<^sup>\<star>\<rangle>  |x\<rangle> y

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
d y +  |x\<^sup>\<star>\<rangle> A x y \<le> d y +  |x\<^sup>\<star>\<rangle>  |x\<rangle> y
[PROOF STEP]
show "d y + |x\<^sup>\<star>\<rangle> A x y \<le> |x\<^sup>\<star>\<rangle> y"
[PROOF STATE]
proof (prove)
using this:
d y +  |x\<^sup>\<star>\<rangle> A x y \<le> d y +  |x\<^sup>\<star>\<rangle>  |x\<rangle> y

goal (1 subgoal):
 1. d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
d y +  |x\<^sup>\<star>\<rangle> A x y \<le>  |x\<^sup>\<star>\<rangle> y

goal:
No subgoals!
[PROOF STEP]
qed