induct: fixes x :: "event list"   and P :: "event list \<Rightarrow> bool" assumes "x \<in> tls"   and "P []"   and "\<And>evsf X B. \<lbrakk>evsf \<in> tls; P evsf; X \<in> synth (analz (knows Spy evsf))\<rbrakk> \<Longrightarrow> P (Says Spy B X # evsf)"   and "\<And>evsSK NA NB M role. \<lbrakk>evsSK \<in> tls; P evsSK; {Nonce NA, Nonce NB, Nonce M} \<subseteq> analz (knows Spy evsSK)\<rbrakk> \<Longrightarrow> P (Notes Spy \<lbrace>Nonce (PRF (M, NA, NB)), Key (sessionK ((NA, NB, M), role))\<rbrace> # evsSK)"   and "\<And>evsCH NA A B SID PA. \<lbrakk>evsCH \<in> tls; P evsCH; Nonce NA \<notin> used evsCH; NA \<notin> range PRF\<rbrakk> \<Longrightarrow> P (Says A B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> # evsCH)"   and "\<And>evsSH NB A' B A NA SID PA PB. \<lbrakk>evsSH \<in> tls; P evsSH; Nonce NB \<notin> used evsSH; NB \<notin> range PRF; Says A' B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> \<in> set evsSH\<rbrakk> \<Longrightarrow> P (Says B A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> # evsSH)"   and "\<And>evsC B A. \<lbrakk>evsC \<in> tls; P evsC\<rbrakk> \<Longrightarrow> P (Says B A (certificate B (pubK B)) # evsC)"   and "\<And>evsCX PMS B' A B KB. \<lbrakk>evsCX \<in> tls; P evsCX; Nonce PMS \<notin> used evsCX; PMS \<notin> range PRF; Says B' A (certificate B KB) \<in> set evsCX\<rbrakk> \<Longrightarrow> P (Says A B (Crypt KB (Nonce PMS)) # Notes A \<lbrace>Agent B, Nonce PMS\<rbrace> # evsCX)"   and "\<And>evsCV B' A NB SID PB B PMS. \<lbrakk>evsCV \<in> tls; P evsCV; Says B' A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> \<in> set evsCV; Notes A \<lbrace>Agent B, Nonce PMS\<rbrace> \<in> set evsCV\<rbrakk> \<Longrightarrow> P (Says A B (Crypt (priEK A) (Hash \<lbrace>Nonce NB, Agent B, Nonce PMS\<rbrace>)) # evsCV)"   and "\<And>evsCF A B NA SID PA B' NB PB PMS M. \<lbrakk>evsCF \<in> tls; P evsCF; Says A B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> \<in> set evsCF; Says B' A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> \<in> set evsCF; Notes A \<lbrace>Agent B, Nonce PMS\<rbrace> \<in> set evsCF; M = PRF (PMS, NA, NB)\<rbrakk> \<Longrightarrow> P (Says A B (Crypt (clientK (NA, NB, M)) (Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>)) # evsCF)"   and "\<And>evsSF A' B A NA SID PA NB PB A'' PMS M. \<lbrakk>evsSF \<in> tls; P evsSF; Says A' B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> \<in> set evsSF; Says B A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> \<in> set evsSF; Says A'' B (Crypt (pubK B) (Nonce PMS)) \<in> set evsSF; M = PRF (PMS, NA, NB)\<rbrakk> \<Longrightarrow> P (Says B A (Crypt (serverK (NA, NB, M)) (Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>)) # evsSF)"   and "\<And>evsCA A B PMS M NA NB X SID PA PB B'. \<lbrakk>evsCA \<in> tls; P evsCA; Notes A \<lbrace>Agent B, Nonce PMS\<rbrace> \<in> set evsCA; M = PRF (PMS, NA, NB); X = Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>; Says A B (Crypt (clientK (NA, NB, M)) X) \<in> set evsCA; Says B' A (Crypt (serverK (NA, NB, M)) X) \<in> set evsCA\<rbrakk> \<Longrightarrow> P (Notes A \<lbrace>Number SID, Agent A, Agent B, Nonce M\<rbrace> # evsCA)"   and "\<And>evsSA A B A'' PMS M NA NB X SID PA PB A'. \<lbrakk>evsSA \<in> tls; P evsSA; A \<noteq> B; Says A'' B (Crypt (pubK B) (Nonce PMS)) \<in> set evsSA; M = PRF (PMS, NA, NB); X = Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>; Says B A (Crypt (serverK (NA, NB, M)) X) \<in> set evsSA; Says A' B (Crypt (clientK (NA, NB, M)) X) \<in> set evsSA\<rbrakk> \<Longrightarrow> P (Notes B \<lbrace>Number SID, Agent A, Agent B, Nonce M\<rbrace> # evsSA)"   and "\<And>evsCR A B NA SID PA B' NB PB M. \<lbrakk>evsCR \<in> tls; P evsCR; Says A B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> \<in> set evsCR; Says B' A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> \<in> set evsCR; Notes A \<lbrace>Number SID, Agent A, Agent B, Nonce M\<rbrace> \<in> set evsCR\<rbrakk> \<Longrightarrow> P (Says A B (Crypt (clientK (NA, NB, M)) (Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>)) # evsCR)"   and "\<And>evsSR A' B A NA SID PA NB PB M. \<lbrakk>evsSR \<in> tls; P evsSR; Says A' B \<lbrace>Agent A, Nonce NA, Number SID, Number PA\<rbrace> \<in> set evsSR; Says B A \<lbrace>Nonce NB, Number SID, Number PB\<rbrace> \<in> set evsSR; Notes B \<lbrace>Number SID, Agent A, Agent B, Nonce M\<rbrace> \<in> set evsSR\<rbrakk> \<Longrightarrow> P (Says B A (Crypt (serverK (NA, NB, M)) (Hash \<lbrace>Number SID, Nonce M, Nonce NA, Number PA, Agent A, Nonce NB, Number PB, Agent B\<rbrace>)) # evsSR)"   and "\<And>evso A B NA NB M role X. \<lbrakk>evso \<in> tls; P evso; A \<noteq> Spy; Says A B (Crypt (sessionK ((NA, NB, M), role)) X) \<in> set evso\<rbrakk> \<Longrightarrow> P (Says A Spy (Key (sessionK ((NA, NB, M), role))) # evso)" shows "P x"