scyther-proof 0.8.0.0 → 0.10.0.0
raw patch · 56 files changed
+6828/−5465 lines, 56 filesdep +utf8-stringdep ~arraydep ~containersdep ~process
Dependencies added: utf8-string
Dependency ranges changed: array, containers, process, tagsoup, time
Files
- CHANGES +5/−0
- README.md +9/−60
- data/examples/classic/ASW_optimistic_contract.spthy +166/−0
- data/examples/classic/BrandsChaum.spthy +45/−0
- data/examples/classic/BrandsChaum_iterated.spthy +44/−0
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy +568/−426
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy +348/−259
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy +573/−410
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy +124/−88
- data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy +122/−86
- data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy +568/−426
- data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy +348/−259
- data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy +573/−410
- data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy +124/−88
- data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy +122/−86
- data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy +176/−122
- data/isabelle/README +9/−60
- data/isabelle/document/root.tex +9/−30
- data/isabelle/src/ESPLogic/Automation.thy +1/−1
- data/isabelle/src/ESPLogic/Capabilities.thy +6/−6
- data/isabelle/src/ESPLogic/DistinctList.thy +1/−1
- data/isabelle/src/ESPLogic/ExecMessage.thy +33/−39
- data/isabelle/src/ESPLogic/ExplicitModel.thy +366/−243
- data/isabelle/src/ESPLogic/HOL_ext.thy +64/−0
- data/isabelle/src/ESPLogic/Hints.thy +1/−1
- data/isabelle/src/ESPLogic/InferenceRules.thy +87/−20
- data/isabelle/src/ESPLogic/Protocol.thy +190/−100
- data/isabelle/src/ESPLogic/Syntax.thy +7/−1
- data/isabelle/src/ESPLogic/Unify.thy +8/−3
- data/isabelle/src/ESPLogic/WeakTyping.thy +241/−144
- data/isabelle/src/ESPLogic/espl_definitions.ML +47/−10
- data/isabelle/src/ESPLogic/espl_methods.ML +11/−10
- data/isabelle/src/ESPLogic/espl_utils.ML +1/−1
- data/isabelle/src/isar-keywords.el +0/−704
- dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs +623/−0
- scyther-proof.cabal +11/−9
- src/Control/Monad/BoundedDFS.hs +16/−4
- src/Main.hs +8/−32
- src/Scyther/Equalities.hs +115/−26
- src/Scyther/Facts.hs +80/−25
- src/Scyther/Formula.hs +67/−25
- src/Scyther/GoalFlow.hs +1/−1
- src/Scyther/Message.hs +43/−24
- src/Scyther/Protocol.hs +123/−38
- src/Scyther/Sequent.hs +23/−17
- src/Scyther/Theory.hs +3/−0
- src/Scyther/Theory/Dot.hs +28/−6
- src/Scyther/Theory/Lexer.hs +0/−612
- src/Scyther/Theory/Lexer.x +430/−0
- src/Scyther/Theory/Lexer.x_src_only +0/−416
- src/Scyther/Theory/Parser.hs +147/−92
- src/Scyther/Theory/Pretty.hs +8/−7
- src/Scyther/Typing.hs +81/−35
- src/System/Isabelle.hs +1/−1
- src/Text/Dot.hs +9/−1
- src/Text/Isar.hs +14/−0
CHANGES view
@@ -1,3 +1,8 @@+* 0.10.0.0+ - upgraded dependency on Isabelle to Isabelle2014+ - add support for explicit matching and non-matching steps in protocols+ - new protocol example for optimistic fair exchange+ * 0.8.0.0 - upgraded dependency on Isabelle to Isabelle-2013-2
README.md view
@@ -1,10 +1,12 @@-README: The scyther-proof security protocol verification tool-=============================================================+The scyther-proof security protocol verification tool+===================================================== -Authors: Simon Meier <iridcode@gmail.com>-Creation Date: 2011-05-13-Last Updated: 2014-01-31 by Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>+ +- Authors: Simon Meier <iridcode@gmail.com>, Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>+- Creation Date: 2011-05-13+- Last Updated: 2015-02-20 by Andreas Lochbihler+ 1. Introduction =============== @@ -55,55 +57,16 @@ 2.2 Installing the Isabelle/HOL theories ---------------------------------------- -Download and install full Isabelle2013-2 according to the installation+Download and install full Isabelle2014 according to the installation instructions at - http://isabelle.in.tum.de/website-Isabelle2013-2/+ http://isabelle.in.tum.de/website-Isabelle2014/ The first time you call `scyther-proof` with the `--isabelle` flag it will build the logic image of the Isabelle/HOL theories formalizing the security protocol verification theory underlying `scyther-proof`. -If you wish to use ProofGeneral to interactively process the theory files-using our extensions to Isabelle's ISAR proof language, use one of the-following two variants. This is needed in order to make the new ISAR keywords-`role`, `protocol`, `sources`, and `prefix_close` available in the Emacs-frontend. If you are using the Isabelle/jEdit Prover IDE, the keywords are-automatically registered. --Variant a: Brute Force-------------------------Copy the Emacs keywords file provided with the ESPL distribution at-- $SCYTHER_PROOF_HOME/data/isabelle/src/isar-keywords.el--to your local Isabelle configuration in-- $ISABELLE_HOME_USER/etc--This will replace any custom keyword file that you have already-installed in that way. You can find out about $ISABELLE_HOME_USER-by running-- isabelle getenv ISABELLE_HOME_USER---Variant b: Elegance----------------------A more elegant way is to copy the keywords file provided with our-distribution to-- $ISABELLE_HOME_USER/etc/isar-keywords-ESPL.el--and start Isabelle using the -k switch as follows.-- isabelle emacs -k ESPL <your-theory-file.thy>--- 3. Usage ======== @@ -147,20 +110,6 @@ Note that in many case the easiest way to start with constructing machine-checked proofs interactively is to use a proof script generated by scyther-proof.-- Using ProofGeneral- -------------------- In the directory output by scyther-proof, load the Tutorial on interactive- proof construction using the following commands-- cd <theory-dir-output-by-scytherproof>/src- isabelle emacs Tutorial.thy-- or if you've chosen the elegant variant for the keywords file-- isabelle emacs -k ESPL Tutorial.thy- Using the Isabelle/jEdit Prover IDE -----------------------------------
+ data/examples/classic/ASW_optimistic_contract.spthy view
@@ -0,0 +1,166 @@+theory ASW_optimistic_contract+begin++section{* Optimistic fair exchange following Asokan, Shoup, Waidner *}++text{*++We model the contract signing example from ++ N. Asokan, V. Shoup, and M. Waidner. Asynchronous protocols for optimistic+ fair exchange. In Proceedings of the IEEE Symposium on Research in Security+ and Privacy, pages 86--99. IEEE Computer Society Press, 1998. ++Since role scripts are linear, we model the non-deterministic choice to+abort as separate roles that share the same prefix with the non-aborting role.+The trusted party is therefore split into Ta and Tr which run only the+abort protocol or only the resolve protocol.++*}++protocol Contract+{+ 00abort. Ta -> : {'bind', $T, n}sk($T)+ 00resolve. Tr -> : {'bind', $T, n}sk($T)++ 0regular. A <- : {'bind', $T, n}sk($T)+ 1regular. A -> : {$A, $B, $T, n, 'text', h(sA)}sk($A)+ -> B : {$A, $B, $T, n, 'text', cA}sk($A)+ 2regular. <- B : {{$A, $B, $T, n, 'text', cA}sk($A), h(sB)}sk($B)+ A <- : {{$A, $B, $T, n, 'text', h(sA)}sk($A), cB}sk($B)+ 3regular. A -> B : sA+ 4regular. B : cA -> h(sA)+ 5regular. A <- B : sB+ 6regular. A : cB -> h(sB)++ 0abort. Aa <- : {'bind', $T, n}sk($T)+ 1abort. Aa -> : {$A, $B, $T, n, 'text', h(sA)}sk($A)+ 2abort. Aa -> : {'aborted', {$A, $B, $T, n, 'text', h(sA)}sk($A)}sk($A)+ -> Ta : {'aborted', {A, B, $T, n, 'text', cA}sk(A)}sk(A)+ 3abort. <- Ta : {'aborted', {'aborted', {A, B, $T, n, 'text', cA}sk(A)}sk(A)}sk($T)+ Aa <- : {'aborted', {'aborted', {$A, $B, $T, n, 'text', h(sA)}sk($A)}sk($A)}sk($T)++ resolve1. -> Tr : {A, B, $T, n, 'text', cA}sk(A), {{A, B, $T, n, 'text', cA}sk(A), cB}sk(B)+ resolve2. <- Tr : {{A, B, $T, n, 'text', cA}sk(A), {{A, B, $T, n, 'text', cA}sk(A), cB}sk(B)}sk($T)++ verify. -> V : {A, B, $T, n, 'text', h(sA)}sk(A), sA,+ {{A, B, $T, n, 'text', h(sA)}sk(A), h(sB)}sk(B), sB+ verifyr. -> Vr : {{A, B, $T, n, 'text', cA}sk(A), {{A, B, $T, n, 'text', cA}sk(A), cB}sk(B)}sk($T)+}++subsection{* Security Properties *}++property (of Contract) Contract_typing:+ "n@A :: Known(A_0regular) | n@Ta | n@Tr+ n@B :: Known(B_1regular) | n@Ta | n@Tr+ cA@B :: Known(B_1regular) | h(sA@A) | h(sA@Aa)+ cB@A :: Known(A_2regular) | h(sB@B)+ sA@B :: Known(B_3regular)+ sB@A :: Known(A_5regular)++ n@Aa :: Known(Aa_0abort) | n@Ta | n@Tr+ A@Ta :: Known(Ta_2abort) | Agent+ B@Ta :: Known(Ta_2abort) | Agent+ cA@Ta :: Known(Ta_2abort) | h(sA@A) | h(sA@Aa)++ A@Tr :: Known(Tr_resolve1) | Agent+ B@Tr :: Known(Tr_resolve1) | Agent+ cA@Tr :: Known(Tr_resolve1) | h(sA@A) | h(sA@Aa)+ cB@Tr :: Known(Tr_resolve1) | h(sB@B)++ A@V :: Known(V_verify) | Agent+ B@V :: Known(V_verify) | Agent+ n@V :: Known(V_verify) | n@Ta | n@Tr+ sA@V :: Known(V_verify) | sA@A+ sB@V :: Known(V_verify) | sB@B++ A@Vr :: Known(Vr_verifyr) | Agent+ B@Vr :: Known(Vr_verifyr) | Agent+ n@Vr :: Known(Vr_verifyr) | n@Ta | n@Tr+ cA@Vr :: Known(Vr_verifyr) | h(sA@A) | h(sA@Aa)+ cB@Vr :: Known(Vr_verifyr) | h(sB@B)+ "++properties (of Contract)+ regular_agree_A: iagree(A_6regular[A,B,T,n,sA,sB] -> B_5regular[A,B,T,n,sA,sB], {A,B})+ regular_agree_B: niagree(B_4regular[A,B,T,n,sA] -> A_3regular[A,B,T,n,sA], {A,B})++property (of Contract) regular_verified:+ premises+ "role(0) = V"+ "step(0, V_verify)"+ "uncompromised(A#0)"+ "uncompromised(B#0)"+ imply threads 1, 2 such that+ "role(1) = A &+ step(1, A_3regular) &++ role(2) = B &+ step(2, B_5regular) &++ A#0 = A#1 & A#0 = A#2 &+ B#0 = B#1 & B#0 = B#2 &+ T#0 = T#1 & T#0 = T#2 &++ n#0 = n#1 & n#0 = n#2 &+ sA#0 = sA#1 &+ sB#0 = sB#2+ "++property (of Contract) resolve_verified:+ premises+ "role(0) = Vr"+ "step(0, Vr_verifyr)"+ "uncompromised(A#0)"+ "uncompromised(B#0)"+ "uncompromised(T#0)"+ imply threads 1, 2 such that+ "( role(1) = A &+ step(1, A_1regular) &+ A#0 = A#1 &+ B#0 = B#1 &+ T#0 = T#1 &+ n#0 = n#1 &+ cA#0 = h(sA#1)+ |+ role(1) = Aa &+ step(1, Aa_1abort) &+ A#0 = A#1 &+ B#0 = B#1 &+ T#0 = T#1 &+ n#0 = n#1 &+ cA#0 = h(sA#1)+ ) &++ role(2) = B &+ step(2, B_2regular) &+ A#0 = A#2 &+ B#0 = B#2 &+ T#0 = T#2 &+ n#0 = n#2 &+ cB#0 = h(sB#2)+ "++property (of Contract) regular_verified_not_aborted:+ premises+ "role(0) = V"+ "step(0, V_verify)"+ "uncompromised(A#0)"+ "uncompromised(T#0)"+ // cA#0 should be replaced with a wildcard+ "knows({'aborted', {'aborted', {A#0, B#0, T#0, n#0, 'text', cA#0}sk(A#0)}sk(A#0)}sk(T#0))"+ imply+ "False"++property (of Contract) resolve_verified_not_aborted:+ premises+ "role(0) = Vr"+ "step(0, Vr_verifyr)"+ "uncompromised(A#0)"+ "uncompromised(T#0)"+ // cA#0 should be replaced with a wildcard+ "knows({'aborted', {'aborted', {A#0, B#0, T#0, n#0, 'text', cA#0}sk(A#0)}sk(A#0)}sk(T#0))"+ imply+ "False"++end
+ data/examples/classic/BrandsChaum.spthy view
@@ -0,0 +1,45 @@+theory BrandsChaum+begin++section{* Distance bounding following Brands, Chaum *}++text{*++We model the distance bounding protocol following Brands and Chaum++ Stefan Brands and David Chaum. Distance-Bounding Protocols. EUROCRYPT '93 + Lecture Notes in Computer Science 765, pp. 344--359, Springer, 1993.++Since the Dolev-Yao model has no notion of time, we can only show that+the challenge-response steps have to happen in the right order.++*}++protocol BrandsChaum+{+ 1. P -> : P, {m}k+ -> V : P, c+ 2. P <- V : a+ 3. P -> : h(a, m)+ -> V : b+ 4. P -> : m, k, {a, h(a, m)}sk(P)+ -> V : m, k, {a, b}sk(P)+ 5. V : c -> {m}k+ 6. V : b -> h(a, m)+}++property (of BrandsChaum) prover_recent:+ premises+ "role(0) = V"+ "step(0, V_6)"+ "uncompromised(P#0)"+ injectively imply a thread 1 such that+ "role(1) = P &+ P#0 = P#1 &+ m#0 = m#1 &+ k#0 = k#1 &+ a#0 = a#1 &+ St(1, P_1) < St(0, V_2) < St(1, P_3) < St(0, V_3)+ "++end
+ data/examples/classic/BrandsChaum_iterated.spthy view
@@ -0,0 +1,44 @@+theory BrandsChaum_iterated+begin++text{*++The same model of the Brands Chaum distance bounding protocol as in BrandsChaum.spthy+except that now two challenges are exchanged.++*}++protocol BrandsChaum+{+ 1. P -> : P, {m1, m2}k+ -> V : P, c+ 21. P <- V : a1+ 31. P -> : h(a1, m1)+ -> V : b1+ 22. P <- V : a2+ 32. P -> : h(a2, m2)+ -> V : b2+ 4. P -> : m1, m2, m3, k, {a1, h(a1, m1), a2, h(a2, m2)}sk(P)+ -> V : m1, m2, m3, k, {a1, b1, a2, b2}sk(P)+ 5. V : c -> {m1, m2}k+ 61. V : b1 -> h(a1, m1)+ 62. V : b2 -> h(a2, m2)+}++property (of BrandsChaum) prover_recent:+ premises+ "role(0) = V"+ "step(0, V_62)"+ "uncompromised(P#0)"+ injectively imply a thread 1 such that+ "role(1) = P &+ P#0 = P#1 &+ m1#0 = m1#1 & m2#0 = m2#1 &+ k#0 = k#1 &+ a1#0 = a1#1 & a2#0 = a2#1 &+ St(1, P_1) <+ St(0, V_21) < St(1, P_31) < St(0, V_31) <+ St(0, V_22) < St(1, P_32) < St(0, V_32)+ "++end
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy view
@@ -731,1075 +731,1217 @@ have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_TNB+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0, s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_RA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto@@ -1880,11 +2022,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_bdkey_B_injective_agreement:@@ -1919,11 +2061,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1960,11 +2102,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_bdkey_B_non_injective_agreement:@@ -1990,11 +2132,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_bdkey_A_injective_agreement:@@ -2029,7 +2171,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''A'' tid1) )@@ -2043,11 +2185,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis proof(sources! "@@ -2056,13 +2198,13 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2108,11 +2250,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2136,11 +2278,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_secret_Kab: assumes facts:@@ -2160,11 +2302,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_B_secret_Kab:@@ -2185,11 +2327,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_injective_agreement_B:@@ -2228,7 +2370,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2268,11 +2410,11 @@ next case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2311,7 +2453,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2333,9 +2475,9 @@ next case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_bdkey_A_injective_agreement_P:@@ -2372,11 +2514,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2415,11 +2557,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_P_secret_Kab:@@ -2432,11 +2574,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_secret_Kab: assumes facts:@@ -2456,11 +2598,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_B_secret_Kab:@@ -2481,11 +2623,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_bdkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_bdkey_A_injective_agreement_B:@@ -2524,7 +2666,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2555,10 +2697,10 @@ next case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2608,7 +2750,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2630,9 +2772,9 @@ next case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2680,11 +2822,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2732,11 +2874,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2761,11 +2903,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_secret_Kab: assumes facts:@@ -2784,7 +2926,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2797,7 +2939,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_B_secret_Kab:@@ -2817,7 +2959,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2830,7 +2972,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_injective_agreement_B:@@ -2868,7 +3010,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2916,12 +3058,12 @@ next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2985,14 +3127,14 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_special_TTP_bdkey_A_injective_agreement_P:@@ -3028,7 +3170,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3041,7 +3183,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3079,7 +3221,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3106,13 +3248,13 @@ next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed @@ -3127,11 +3269,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_secret_Kab: assumes facts:@@ -3150,7 +3292,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3163,7 +3305,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_B_secret_Kab:@@ -3183,7 +3325,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3196,7 +3338,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_special_TTP_bdkey_A_injective_agreement_B:@@ -3234,7 +3376,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3281,12 +3423,12 @@ next case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3335,7 +3477,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3374,10 +3516,10 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_special_TTP_bdkey_different_actors_A_P intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3424,7 +3566,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3437,7 +3579,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3484,7 +3626,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3497,7 +3639,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy view
@@ -441,667 +441,756 @@ have "(t,r,s) : approx isoiec_9798_2_bdkey_composed_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_bdkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_TNB+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0, s(MV ''Text4'' tid0) |} ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_RA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_bdkey_composed_typing_state t r s" by unfold_locales auto@@ -1182,11 +1271,11 @@ |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_2_udkey_B_injective_agreement:@@ -1220,11 +1309,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1261,11 +1350,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_3_udkey_B_non_injective_agreement:@@ -1291,11 +1380,11 @@ |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_4_udkey_A_injective_agreement:@@ -1330,7 +1419,7 @@ |} ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1339,12 +1428,12 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1390,11 +1479,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1418,11 +1507,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_secret_Kab: assumes facts:@@ -1441,11 +1530,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_B_secret_Kab:@@ -1465,11 +1554,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_5_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_injective_agreement_B:@@ -1507,7 +1596,7 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1547,11 +1636,11 @@ next case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1589,7 +1678,7 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1611,9 +1700,9 @@ next case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_5_udkey_A_injective_agreement_P:@@ -1649,11 +1738,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1691,11 +1780,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_P_secret_Kab:@@ -1708,11 +1797,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_secret_Kab: assumes facts:@@ -1731,11 +1820,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_B_secret_Kab:@@ -1755,11 +1844,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: isoiec_9798_2_6_udkey_P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_bdkey_state) isoiec_9798_2_6_udkey_A_injective_agreement_B:@@ -1797,7 +1886,7 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1828,10 +1917,10 @@ next case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1880,7 +1969,7 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1902,9 +1991,9 @@ next case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1951,11 +2040,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2002,11 +2091,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy view
@@ -686,352 +686,410 @@ have "(t,r,s) : approx isoiec_9798_3_composed_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_TNA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Ra t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_TNB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_TNB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_TNA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_RB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_RA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_RA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_2_RB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_2_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_3_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_text_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_text_4_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_RA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_RA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_4_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_4_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_TokenBA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_TokenTA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_check_4_in_Text2+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,@@ -1043,168 +1101,195 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_T t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_TokenBA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_TokenTA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_Text2+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -1226,12 +1311,13 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_Text5+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -1253,12 +1339,13 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_pkA+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -1280,336 +1367,391 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_T t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_text_4_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_TokenTA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_T t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_TokenTA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_check_3_in_Text3+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,@@ -1623,12 +1765,13 @@ ( SK ( s(AV ''T'' tid0) ) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_check_3_in_pkA+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,@@ -1642,126 +1785,146 @@ ( SK ( s(AV ''T'' tid0) ) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_T t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_A t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_B t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_composed_typing_state t r s" by unfold_locales auto@@ -1841,11 +2004,11 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_2_B_injective_agreement:@@ -1879,11 +2042,11 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1919,11 +2082,11 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_3_B_non_injective_agreement:@@ -1948,11 +2111,11 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_3_state) isoiec_9798_3_4_A_injective_agreement:@@ -1987,7 +2150,7 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1996,12 +2159,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2046,11 +2209,11 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2095,11 +2258,11 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2145,7 +2308,7 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2154,12 +2317,12 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2212,7 +2375,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2227,16 +2390,16 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)- qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2282,7 +2445,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2292,12 +2455,12 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2342,11 +2505,11 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2391,11 +2554,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2458,7 +2621,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2474,16 +2637,16 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)- qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2530,7 +2693,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2540,12 +2703,12 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2609,7 +2772,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2619,12 +2782,12 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2672,11 +2835,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2722,7 +2885,7 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2732,12 +2895,12 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2783,7 +2946,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2793,12 +2956,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2843,11 +3006,11 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2892,11 +3055,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2951,7 +3114,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2961,7 +3124,7 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2971,13 +3134,13 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3024,7 +3187,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3034,12 +3197,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3095,7 +3258,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3105,12 +3268,12 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3158,11 +3321,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy view
@@ -210,220 +210,256 @@ have "(t,r,s) : approx isoiec_9798_4_bdkey_composed_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_bdkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_TNb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_TNa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_bdkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_bdkey_composed_typing_state t r s" by unfold_locales auto@@ -504,11 +540,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_1_bdkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_2_bdkey_B_injective_agreement:@@ -543,11 +579,11 @@ s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -584,11 +620,11 @@ s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_B_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_3_bdkey_B_non_injective_agreement:@@ -614,11 +650,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_bdkey_state) isoiec_9798_4_4_bdkey_A_injective_agreement:@@ -653,7 +689,7 @@ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts hence "Kbd ( s(AV ''A'' tid1) )@@ -667,11 +703,11 @@ s(AV ''B'' tid1), s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis proof(sources! "@@ -680,13 +716,13 @@ s(AV ''A'' tid0), s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -732,11 +768,11 @@ s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy view
@@ -208,220 +208,256 @@ have "(t,r,s) : approx isoiec_9798_4_udkey_composed_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_udkey_composed_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_TNb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_TNa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_udkey_composed_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_udkey_composed_typing_state t r s" by unfold_locales auto@@ -501,11 +537,11 @@ LC ''isoiec_9798_4_1_ccf_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_1_udkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_2_udkey_B_injective_agreement:@@ -539,11 +575,11 @@ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -579,11 +615,11 @@ LC ''isoiec_9798_4_3_ccf_2'', s(MV ''TNb'' tid0), s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_B_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_3_udkey_B_non_injective_agreement:@@ -608,11 +644,11 @@ LC ''isoiec_9798_4_3_ccf_1'', s(MV ''TNa'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_udkey_state) isoiec_9798_4_4_udkey_A_injective_agreement:@@ -647,7 +683,7 @@ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -656,12 +692,12 @@ s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -707,11 +743,11 @@ s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy view
@@ -51,50 +51,56 @@ have "(t,r,s) : approx isoiec_9798_2_1_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_1_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_1_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -175,11 +181,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_1_bdkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_2_bdkey_A@@ -234,51 +240,58 @@ have "(t,r,s) : approx isoiec_9798_2_2_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_2_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_2_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -368,11 +381,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_2_bdkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -458,90 +471,101 @@ have "(t,r,s) : approx isoiec_9798_2_3_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_3_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_TNB t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_TNB+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(AV ''B'' tid0), s(MV ''Text1'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_bdkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_bdkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_3_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -622,11 +646,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_bdkey_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_3_bdkey_state) B_non_injective_agreement:@@ -652,11 +676,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_bdkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_4_bdkey_A@@ -735,91 +759,103 @@ have "(t,r,s) : approx isoiec_9798_2_4_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_4_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0, s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_RA t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_RA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_bdkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_bdkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_4_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -909,7 +945,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_B_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''A'' tid1) )@@ -923,11 +959,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis proof(sources! "@@ -936,13 +972,13 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''A'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -988,11 +1024,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_bdkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1144,210 +1180,236 @@ have "(t,r,s) : approx isoiec_9798_2_5_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_5_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_bdkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_bdkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_5_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -1415,11 +1477,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_secret_Kab: assumes facts:@@ -1439,11 +1501,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_bdkey_state) B_secret_Kab:@@ -1464,11 +1526,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_injective_agreement_B:@@ -1507,7 +1569,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1547,11 +1609,11 @@ next case (isoiec_9798_2_5_bdkey_P_2_enc tid4) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1590,7 +1652,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1612,9 +1674,9 @@ next case (isoiec_9798_2_5_bdkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_bdkey_state) A_injective_agreement_P:@@ -1651,11 +1713,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1694,11 +1756,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_bdkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_6_bdkey_A@@ -1840,205 +1902,232 @@ have "(t,r,s) : approx isoiec_9798_2_6_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_6_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_bdkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_bdkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_6_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -2106,11 +2195,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_secret_Kab: assumes facts:@@ -2130,11 +2219,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_bdkey_state) B_secret_Kab:@@ -2155,11 +2244,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_bdkey_state) A_injective_agreement_B:@@ -2198,7 +2287,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2229,10 +2318,10 @@ next case (isoiec_9798_2_6_bdkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2282,7 +2371,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2304,9 +2393,9 @@ next case (isoiec_9798_2_6_bdkey_P_3_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2354,11 +2443,11 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2406,11 +2495,11 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_bdkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2572,205 +2661,231 @@ have "(t,r,s) : approx isoiec_9798_2_5_special_TTP_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_5_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_special_TTP_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_special_TTP_bdkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_5_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -2839,11 +2954,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_special_TTP_bdkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_secret_Kab: assumes facts:@@ -2862,7 +2977,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2875,7 +2990,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) B_secret_Kab:@@ -2895,7 +3010,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2908,7 +3023,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_injective_agreement_B:@@ -2946,7 +3061,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -2994,12 +3109,12 @@ next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3063,14 +3178,14 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_special_TTP_bdkey_state) A_injective_agreement_P:@@ -3106,7 +3221,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3119,7 +3234,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3157,7 +3272,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3184,13 +3299,13 @@ next case (isoiec_9798_2_5_special_TTP_bdkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_6_special_TTP_bdkey_A@@ -3351,201 +3466,228 @@ have "(t,r,s) : approx isoiec_9798_2_6_special_TTP_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_6_special_TTP_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_special_TTP_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_special_TTP_bdkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_6_special_TTP_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -3615,11 +3757,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_special_TTP_bdkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_secret_Kab: assumes facts:@@ -3638,7 +3780,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3651,7 +3793,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) B_secret_Kab:@@ -3671,7 +3813,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3684,7 +3826,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_special_TTP_bdkey_state) A_injective_agreement_B:@@ -3722,7 +3864,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3769,12 +3911,12 @@ next case (isoiec_9798_2_6_special_TTP_bdkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3823,7 +3965,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3862,10 +4004,10 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce dest: different_actors_A_P intro: event_predOrdI) qed (fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3912,7 +4054,7 @@ |} ( Kbd ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3925,7 +4067,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3972,7 +4114,7 @@ |} ( Kbd ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_special_TTP_bdkey_P_3_enc_1 tid1) note_unified facts = this facts hence "Kbd ( s(AV ''P'' tid1) )@@ -3985,7 +4127,7 @@ case swapped note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy view
@@ -47,50 +47,56 @@ have "(t,r,s) : approx isoiec_9798_2_1_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_1_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_1_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_1_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_1_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_1_udkey_msc_typing_state t r s" by unfold_locales auto@@ -171,11 +177,11 @@ |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_1_udkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_2_udkey_A@@ -227,50 +233,57 @@ have "(t,r,s) : approx isoiec_9798_2_2_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_2_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_2_enc_2'', LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_2_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_2_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_2_udkey_msc_typing_state t r s" by unfold_locales auto@@ -359,11 +372,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_2_udkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -441,90 +454,101 @@ have "(t,r,s) : approx isoiec_9798_2_3_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_3_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_TNB t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_TNB+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_2'', s(MV ''TNB'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_TNA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_Text1+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_3_enc_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_3_udkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_3_udkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_3_udkey_msc_typing_state t r s" by unfold_locales auto@@ -605,11 +629,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_udkey_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_3_udkey_state) B_non_injective_agreement:@@ -635,11 +659,11 @@ |} ( K ( s(MV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_3_udkey_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_4_udkey_A@@ -718,91 +742,103 @@ have "(t,r,s) : approx isoiec_9798_2_4_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_4_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_RB t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_2'', s(MV ''RB'' tid0), LN ''RA'' tid0, s(MV ''Text4'' tid0) |} ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_RA t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_RA+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_4_enc_1'', s(MV ''RA'' tid0), LN ''RB'' tid0, s(MV ''Text2'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_4_udkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_4_udkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_4_udkey_msc_typing_state t r s" by unfold_locales auto@@ -892,7 +928,7 @@ |} ( K ( s(MV ''B'' tid0) ) ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_B_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -901,12 +937,12 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid1) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -952,11 +988,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_4_udkey_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1108,205 +1144,231 @@ have "(t,r,s) : approx isoiec_9798_2_5_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_5_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Kab t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_1'', LN ''TVPa'' tid0, s(MV ''Kab'' tid0), s(AV ''B'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_2_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_2_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_TNb t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_TNb+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_Text7+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_4'', s(MV ''TNb'' tid0), s(AV ''A'' tid0), s(MV ''Text7'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_A_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_A_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_A t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Kab t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_P t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_TNa t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_TNa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_TNp t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_TNp+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text2+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_2_2'', s(MV ''TNp'' tid0), s(MV ''Kab'' tid0), s(MV ''A'' tid0), s(MV ''Text2'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text5+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_5_enc_3'', s(MV ''TNa'' tid0), s(AV ''B'' tid0), s(MV ''Text5'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_3_Text6 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_B_text_4_Text8 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_B_text_4_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_A t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_B t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_TVPa t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_TVPa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_5_udkey_P_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_2_5_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_5_udkey_P_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_5_udkey_msc_typing_state t r s" by unfold_locales auto@@ -1374,11 +1436,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_5_udkey_P_2_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_5_udkey_P_2_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_5_udkey_state) A_secret_Kab: assumes facts:@@ -1397,11 +1459,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_udkey_state) B_secret_Kab:@@ -1421,11 +1483,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_udkey_state) A_injective_agreement_B:@@ -1463,7 +1525,7 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1503,11 +1565,11 @@ next case (isoiec_9798_2_5_udkey_P_2_enc tid4) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1545,7 +1607,7 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1567,9 +1629,9 @@ next case (isoiec_9798_2_5_udkey_P_2_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_5_udkey_state) A_injective_agreement_P:@@ -1605,11 +1667,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1647,11 +1709,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_5_udkey_P_2_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_2_6_udkey_A@@ -1793,201 +1855,228 @@ have "(t,r,s) : approx isoiec_9798_2_6_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_2_6_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Kab t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_3_TokenPA_for_B t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Kab t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_P t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_4_Text7 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_B_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_B_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_A t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_B t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Ra t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Rb t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_2_Text2 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_2_6_udkey_P_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_2_6_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_2_6_udkey_P_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_2_6_udkey_msc_typing_state t r s" by unfold_locales auto@@ -2055,11 +2144,11 @@ shows "False" using facts proof(sources! " LN ''Kab'' tid0 ") case isoiec_9798_2_6_udkey_P_3_Kab note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case isoiec_9798_2_6_udkey_P_3_Kab_1 note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)-qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+qed (safe?, simp_all?, insert facts, (fastforce+)?) lemma (in restricted_isoiec_9798_2_6_udkey_state) A_secret_Kab: assumes facts:@@ -2078,11 +2167,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_udkey_state) B_secret_Kab:@@ -2102,11 +2191,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce dest: P_secret_Kab intro: event_predOrdI)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_2_6_udkey_state) A_injective_agreement_B:@@ -2144,7 +2233,7 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2175,10 +2264,10 @@ next case (isoiec_9798_2_6_udkey_A_4_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2227,7 +2316,7 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2249,9 +2338,9 @@ next case (isoiec_9798_2_6_udkey_P_3_enc tid3) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2298,11 +2387,11 @@ |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2349,11 +2438,11 @@ |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_2_6_udkey_P_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy view
@@ -45,40 +45,46 @@ have "(t,r,s) : approx isoiec_9798_3_1_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_1_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_1_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_A t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_TNA t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_1_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_1_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_1_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_1_msc_typing_state t r s" by unfold_locales auto@@ -158,11 +164,11 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_1_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_3_2_A@@ -212,52 +218,60 @@ have "(t,r,s) : approx isoiec_9798_3_2_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_2_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_B t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_2_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Ra t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_2_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_2_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_2_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_2_msc_typing_state t r s" by unfold_locales auto@@ -346,11 +360,11 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_2_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -425,70 +439,81 @@ have "(t,r,s) : approx isoiec_9798_3_3_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_3_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_TNB t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_TNB t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_TNB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_3_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_A t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_TNA t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_3_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_3_3_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_3_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_3_msc_typing_state t r s" by unfold_locales auto@@ -568,11 +593,11 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_3_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_3_3_state) B_non_injective_agreement:@@ -597,11 +622,11 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_3_A_1_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_3_4_A@@ -668,76 +693,88 @@ have "(t,r,s) : approx isoiec_9798_3_4_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_4_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_4_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_B t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_1_RB t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_RB t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_4_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_RA t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_RA t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_RA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_4_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_4_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_4_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_4_msc_typing_state t r s" by unfold_locales auto@@ -827,7 +864,7 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_B_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -836,12 +873,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_A_2_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -886,11 +923,11 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_4_A_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -973,82 +1010,95 @@ have "(t,r,s) : approx isoiec_9798_3_5_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_5_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_5_A_2_RB t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_2_RB t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_2_RB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_3_Text6 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_text_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_text_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_5_A_text_4_Text4 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_A_text_4_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_A t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_RA t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_RA t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_RA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_text_3_Text6 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_text_3_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_5_B_4_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_5_B_4_Text4 t r s tid0) then interpret state: isoiec_9798_3_5_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_5_B_4_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_5_msc_typing_state t r s" by unfold_locales auto@@ -1137,11 +1187,11 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_B_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1187,7 +1237,7 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_A_4_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1196,12 +1246,12 @@ |} ( SK ( s(AV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_5_B_3_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1344,52 +1394,60 @@ have "(t,r,s) : approx isoiec_9798_3_6_1_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_6_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_Rb t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_2_TokenBA t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_2_TokenBA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_TokenTA_for_B t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_TokenTA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_4_pkB t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_check_4_in_Text2 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_check_4_in_Text2+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_6_opt_1_sig_2'', s(AV ''B'' tid0), LN ''Ra'' tid0,@@ -1401,126 +1459,146 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_A_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_A_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_A t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_Ra t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_T t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_T t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text5 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_B_5_pkA t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_B_5_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_A t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_B t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Rb t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Rpa t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text5 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_1_T_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_6_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_1_T_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_6_1_msc_typing_state t r s" by unfold_locales auto@@ -1617,7 +1695,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_1_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1632,16 +1710,16 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)- qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_1_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1687,7 +1765,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -1697,12 +1775,12 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_A_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1747,11 +1825,11 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1796,11 +1874,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_1_T_4_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -1945,46 +2023,53 @@ have "(t,r,s) : approx isoiec_9798_3_6_2_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_6_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_Rb t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_2_TokenBA t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_2_TokenBA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_TokenTA t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_TokenTA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_4_pkB t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_Text2 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_Text2+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -2006,12 +2091,13 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_Text5 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_Text5+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -2033,12 +2119,13 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_check_4_in_pkA t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_check_4_in_pkA+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| {| LC ''isoiec_9798_3_6_opt_2_sig_4'', LN ''Rpa'' tid0,@@ -2060,132 +2147,153 @@ ( inv(s(MV ''pkB'' tid0)) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_A_text_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_A_text_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_A t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_Ra t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Rpa t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_T t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_T t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text5 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_pkA t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_B_5_pkB t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_B_5_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_A t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_A t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_B t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_B t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Rb t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Rpa t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_text_4_Text5 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_text_4_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_6_2_T_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_6_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_6_2_T_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_6_2_msc_typing_state t r s" by unfold_locales auto@@ -2292,7 +2400,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2308,16 +2416,16 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)- qed (insert facts, fastforce+)?+ thus ?thesis by (auto dest!: ltk_secrecy)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_B_2_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2364,7 +2472,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2374,12 +2482,12 @@ |} ( SK ( s(MV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_A_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2443,7 +2551,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_6_2_A_check_4_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2453,12 +2561,12 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2506,11 +2614,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_6_2_T_4_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2645,166 +2753,193 @@ have "(t,r,s) : approx isoiec_9798_3_7_1_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_7_1_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_7_1_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_B t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_TokenTA_for_B t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_TokenTA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_3_pkB t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_3_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Ra t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_T t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_T t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_Text9 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_4_pkA t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_4_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_A t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_A t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_B t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Rb t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Rpa t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_1_T_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_7_1_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_1_T_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_7_1_msc_typing_state t r s" by unfold_locales auto@@ -2894,7 +3029,7 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2904,12 +3039,12 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_B_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -2955,7 +3090,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -2965,12 +3100,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_A_4_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3015,11 +3150,11 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3064,11 +3199,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_1_T_3_enc_1 tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3208,46 +3343,53 @@ have "(t,r,s) : approx isoiec_9798_3_7_2_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_3_7_2_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_3_7_2_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_B t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_Rb t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_TokenTA t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_TokenTA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_3_pkB t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_3_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_check_3_in_Text3 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_check_3_in_Text3+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,@@ -3261,12 +3403,13 @@ ( SK ( s(AV ''T'' tid0) ) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_check_3_in_pkA t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_check_3_in_pkA+ thus ?case proof(sources! " Enc {| LC ''check_4'', {| LC ''isoiec_9798_3_7_opt_2_sig_3'', LN ''Rpa'' tid0,@@ -3280,126 +3423,146 @@ ( SK ( s(AV ''T'' tid0) ) ) |} ( LN ''check_nonce_4'' tid0 ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_text_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_text_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_text_4_Text7 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_text_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_A_5_Text9 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Ra t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Rpa t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_T t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_T t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_T+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text3 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text6 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_Text9 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_pkA t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_pkA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_4_pkB t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_4_pkB+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_B_text_5_Text8 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_B_text_5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_A t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_A t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_B t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_B t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Rb t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Rpa t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Rpa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_2_Text2 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_text_3_Text3 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_text_3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_3_7_2_T_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_3_7_2_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_3_7_2_T_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_3_7_2_msc_typing_state t r s" by unfold_locales auto@@ -3498,7 +3661,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3508,7 +3671,7 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3518,13 +3681,13 @@ |} ( SK ( s(MV ''B'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_B_5_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3571,7 +3734,7 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3581,12 +3744,12 @@ |} ( SK ( s(AV ''A'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_A_4_enc tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3642,7 +3805,7 @@ ( LN ''check_nonce_4'' tid0 ) ") case fake note_unified facts = this facts thus ?thesis proof(sources! " LN ''check_nonce_4'' tid0 ")- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case (isoiec_9798_3_7_2_A_check_3_out_enc tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -3652,12 +3815,12 @@ |} ( SK ( s(AV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -3705,11 +3868,11 @@ |} ( SK ( s(MV ''T'' tid0) ) ) ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_3_7_2_T_3_enc tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy view
@@ -51,40 +51,46 @@ have "(t,r,s) : approx isoiec_9798_4_1_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_1_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_1_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_1_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_1_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -165,11 +171,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_1_bdkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_4_2_bdkey_A@@ -225,46 +231,53 @@ have "(t,r,s) : approx isoiec_9798_4_2_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_2_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_2_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_2_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_2_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -354,11 +367,11 @@ s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_2_bdkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -444,70 +457,81 @@ have "(t,r,s) : approx isoiec_9798_4_3_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_3_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_3_bdkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_TNb t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_TNb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_TNa t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_TNa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_bdkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_3_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_bdkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_3_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -588,11 +612,11 @@ s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_B_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_3_bdkey_state) B_non_injective_agreement:@@ -618,11 +642,11 @@ s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_bdkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_4_4_bdkey_A@@ -700,76 +724,88 @@ have "(t,r,s) : approx isoiec_9798_4_4_bdkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_4_bdkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_4_bdkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Ra t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_bdkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_4_bdkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_bdkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_4_bdkey_msc_typing_state t r s" by unfold_locales auto@@ -859,7 +895,7 @@ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_B_3_hash tid1) note_unified facts = this facts hence "Kbd ( s(AV ''A'' tid1) )@@ -873,11 +909,11 @@ s(AV ''B'' tid1), s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) next case swapped note_unified facts = this facts thus ?thesis proof(sources! "@@ -886,13 +922,13 @@ s(AV ''A'' tid0), s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed (fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -938,11 +974,11 @@ s(AV ''B'' tid0), s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_bdkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy view
@@ -51,40 +51,46 @@ have "(t,r,s) : approx isoiec_9798_4_1_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_1_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_1_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_TNA t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_TNA+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_1_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_1_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_1_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_1_udkey_msc_typing_state t r s" by unfold_locales auto@@ -164,11 +170,11 @@ LC ''isoiec_9798_4_1_ccf_1'', s(MV ''TNA'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_1_udkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_4_2_udkey_A@@ -224,46 +230,53 @@ have "(t,r,s) : approx isoiec_9798_4_2_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_2_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_2_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_2_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_2_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_2_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_2_udkey_msc_typing_state t r s" by unfold_locales auto@@ -352,11 +365,11 @@ LC ''isoiec_9798_4_2_ccf_2'', LN ''Rb'' tid0, s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_2_udkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -442,70 +455,81 @@ have "(t,r,s) : approx isoiec_9798_4_3_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_3_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_3_udkey_A_text_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_text_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_text_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_text_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_text_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_TNb t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_TNb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_A_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_A_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_A t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_TNa t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_TNa+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_1_Text2 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_1_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_3_udkey_B_text_2_Text4 t r s tid0) then interpret state: isoiec_9798_4_3_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_3_udkey_B_text_2_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_3_udkey_msc_typing_state t r s" by unfold_locales auto@@ -585,11 +609,11 @@ LC ''isoiec_9798_4_3_ccf_2'', s(MV ''TNb'' tid0), s(MV ''Text3'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_B_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed lemma (in restricted_isoiec_9798_4_3_udkey_state) B_non_injective_agreement:@@ -614,11 +638,11 @@ LC ''isoiec_9798_4_3_ccf_1'', s(MV ''TNa'' tid0), s(MV ''Text1'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_3_udkey_A_1_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed role isoiec_9798_4_4_udkey_A@@ -694,76 +718,88 @@ have "(t,r,s) : approx isoiec_9798_4_4_udkey_msc_typing" proof(cases rule: reachable_in_approxI_ext [OF isoiec_9798_4_4_udkey_msc_typing.monoTyp, completeness_cases_rule])- case (isoiec_9798_4_4_udkey_A_1_B t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_B t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_Rb t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_1_Text1 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_text_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_text_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_text_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_text_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_A_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Ra t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Text2 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_2_Text3 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_2_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_text_3_Text4 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_text_3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) note facts = this+ case (isoiec_9798_4_4_udkey_B_text_3_Text5 t r s tid0) then interpret state: isoiec_9798_4_4_udkey_msc_typing_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = isoiec_9798_4_4_udkey_B_text_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "isoiec_9798_4_4_udkey_msc_typing_state t r s" by unfold_locales auto@@ -853,7 +889,7 @@ s(MV ''Text4'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_B_3_hash tid1) note_unified facts = this facts thus ?thesis proof(sources! "@@ -862,12 +898,12 @@ s(MV ''Text2'' tid1) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_A_2_hash tid2) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?)+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this@@ -913,11 +949,11 @@ s(MV ''Text2'' tid0) |} ") case fake note_unified facts = this facts- thus ?thesis by (fastforce dest!: ltk_secrecy)+ thus ?thesis by (auto dest!: ltk_secrecy) next case (isoiec_9798_4_4_udkey_A_2_hash tid1) note_unified facts = this facts thus ?thesis by (fastforce intro: event_predOrdI split: if_splits)- qed (insert facts, fastforce+)?+ qed (safe?, simp_all?, insert facts, (fastforce+)?) qed } note niagree = this
data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy view
@@ -219,402 +219,456 @@ have "(t,r,s) : approx typing_2_6" proof(cases rule: reachable_in_approxI_ext [OF typing_2_6.monoTyp, completeness_cases_rule])- case (A_1_B t r s tid0) note facts = this+ case (A_1_B t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_1_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_1_Rb t r s tid0) note facts = this+ case (A_1_Rb t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_1_Text1 t r s tid0) note facts = this+ case (A_1_Text1 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_3_Kab t r s tid0) note facts = this+ case (A_3_Kab t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (A_3_Text4 t r s tid0) note facts = this+ case (A_3_Text4 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(MV ''B'' tid0), s(MV ''Text4'' tid0) |} ( K ( s(AV ''A'' tid0) ) ( s(AV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (A_3_Text5 t r s tid0) note facts = this+ case (A_3_Text5 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_3_TokenPA_for_B t r s tid0) note facts = this+ case (A_3_TokenPA_for_B t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_text4_Text6 t r s tid0) note facts = this+ case (A_text4_Text6 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_text4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_text4_Text7 t r s tid0) note facts = this+ case (A_text4_Text7 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_text4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (A_5_Text8 t r s tid0) note facts = this+ case (A_5_Text8 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (A_5_Text9 t r s tid0) note facts = this+ case (A_5_Text9 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = A_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_1_Bbd t r s tid0) note facts = this+ case (Abd_1_Bbd t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_1_Bbd+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_1_Rb t r s tid0) note facts = this+ case (Abd_1_Rb t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_1_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_1_Text1 t r s tid0) note facts = this+ case (Abd_1_Text1 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_1_Text1+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_3_Kab t r s tid0) note facts = this+ case (Abd_3_Kab t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_3_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''Abd'' tid0), s(MV ''Bbd'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''Abd'' tid0) ) ( s(AV ''Pbd'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Abd_3_Text4 t r s tid0) note facts = this+ case (Abd_3_Text4 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_3_Text4+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_1'', LN ''Ra'' tid0, s(MV ''Kab'' tid0), s(AV ''Abd'' tid0), s(MV ''Bbd'' tid0), s(MV ''Text4'' tid0) |} ( Kbd ( s(AV ''Abd'' tid0) ) ( s(AV ''Pbd'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Abd_3_Text5 t r s tid0) note facts = this+ case (Abd_3_Text5 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_3_TokenPA_for_B t r s tid0) note facts = this+ case (Abd_3_TokenPA_for_B t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_3_TokenPA_for_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_text4_Text6 t r s tid0) note facts = this+ case (Abd_text4_Text6 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_text4_Text6+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_text4_Text7 t r s tid0) note facts = this+ case (Abd_text4_Text7 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_text4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Abd_5_Text8 t r s tid0) note facts = this+ case (Abd_5_Text8 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_5_Text8+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_5'', s(MV ''Rb'' tid0), LN ''Rpa'' tid0, s(MV ''Text8'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Abd_5_Text9 t r s tid0) note facts = this+ case (Abd_5_Text9 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Abd_5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (B_4_Kab t r s tid0) note facts = this+ case (B_4_Kab t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (B_4_P t r s tid0) note facts = this+ case (B_4_P t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_P+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (B_4_Rpa t r s tid0) note facts = this+ case (B_4_Rpa t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (B_4_Text3 t r s tid0) note facts = this+ case (B_4_Text3 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''A'' tid0), s(MV ''Text3'' tid0) |} ( K ( s(AV ''B'' tid0) ) ( s(MV ''P'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (B_4_Text6 t r s tid0) note facts = this+ case (B_4_Text6 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (B_4_Text7 t r s tid0) note facts = this+ case (B_4_Text7 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (B_text5_Text8 t r s tid0) note facts = this+ case (B_text5_Text8 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_text5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (B_text5_Text9 t r s tid0) note facts = this+ case (B_text5_Text9 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = B_text5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Bbd_4_Kab t r s tid0) note facts = this+ case (Bbd_4_Kab t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Kab+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''Abd'' tid0), s(AV ''Bbd'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''Bbd'' tid0) ) ( s(MV ''Pbd'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Bbd_4_Pbd t r s tid0) note facts = this+ case (Bbd_4_Pbd t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Pbd+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Bbd_4_Rpa t r s tid0) note facts = this+ case (Bbd_4_Rpa t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Rpa+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Bbd_4_Text3 t r s tid0) note facts = this+ case (Bbd_4_Text3 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Text3+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_3_2'', LN ''Rb'' tid0, s(MV ''Kab'' tid0), s(AV ''Abd'' tid0), s(AV ''Bbd'' tid0), s(MV ''Text3'' tid0) |} ( Kbd ( s(AV ''Bbd'' tid0) ) ( s(MV ''Pbd'' tid0) ) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Bbd_4_Text6 t r s tid0) note facts = this+ case (Bbd_4_Text6 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Text6+ thus ?case proof(sources! " Enc {| LC ''isoiec_9798_2_6_enc_4'', s(MV ''Rpa'' tid0), LN ''Rb'' tid0, s(MV ''Text6'' tid0) |} ( s(MV ''Kab'' tid0) ) ")- qed (insert facts, ((fastforce intro: event_predOrdI split: if_splits))+)?+ qed (safe?, simp_all?, insert facts, (((fastforce intro: event_predOrdI split: if_splits))+)?) next- case (Bbd_4_Text7 t r s tid0) note facts = this+ case (Bbd_4_Text7 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_4_Text7+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Bbd_text5_Text8 t r s tid0) note facts = this+ case (Bbd_text5_Text8 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_text5_Text8+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Bbd_text5_Text9 t r s tid0) note facts = this+ case (Bbd_text5_Text9 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Bbd_text5_Text9+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_2_A t r s tid0) note facts = this+ case (P_2_A t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_2_A+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_2_B t r s tid0) note facts = this+ case (P_2_B t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_2_B+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_2_Ra t r s tid0) note facts = this+ case (P_2_Ra t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_2_Rb t r s tid0) note facts = this+ case (P_2_Rb t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_2_Text2 t r s tid0) note facts = this+ case (P_2_Text2 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_text3_Text3 t r s tid0) note facts = this+ case (P_text3_Text3 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_text3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_text3_Text4 t r s tid0) note facts = this+ case (P_text3_Text4 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_text3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (P_text3_Text5 t r s tid0) note facts = this+ case (P_text3_Text5 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = P_text3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_2_Abd t r s tid0) note facts = this+ case (Pbd_2_Abd t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_2_Abd+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_2_Bbd t r s tid0) note facts = this+ case (Pbd_2_Bbd t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_2_Bbd+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_2_Ra t r s tid0) note facts = this+ case (Pbd_2_Ra t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_2_Ra+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_2_Rb t r s tid0) note facts = this+ case (Pbd_2_Rb t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_2_Rb+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_2_Text2 t r s tid0) note facts = this+ case (Pbd_2_Text2 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_2_Text2+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_text3_Text3 t r s tid0) note facts = this+ case (Pbd_text3_Text3 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_text3_Text3+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_text3_Text4 t r s tid0) note facts = this+ case (Pbd_text3_Text4 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_text3_Text4+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) next- case (Pbd_text3_Text5 t r s tid0) note facts = this+ case (Pbd_text3_Text5 t r s tid0) then interpret state: typing_2_6_state t r s by unfold_locales auto- show ?case using facts+ note_prefix_closed (state) facts = Pbd_text3_Text5+ thus ?case by (fastforce intro: event_predOrdI split: if_splits) qed thus "typing_2_6_state t r s" by unfold_locales auto
data/isabelle/README view
@@ -1,10 +1,12 @@-README: The scyther-proof security protocol verification tool-=============================================================+The scyther-proof security protocol verification tool+===================================================== -Authors: Simon Meier <iridcode@gmail.com>-Creation Date: 2011-05-13-Last Updated: 2014-01-31 by Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>+ +- Authors: Simon Meier <iridcode@gmail.com>, Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>+- Creation Date: 2011-05-13+- Last Updated: 2015-02-20 by Andreas Lochbihler+ 1. Introduction =============== @@ -55,55 +57,16 @@ 2.2 Installing the Isabelle/HOL theories ---------------------------------------- -Download and install full Isabelle2013-2 according to the installation+Download and install full Isabelle2014 according to the installation instructions at - http://isabelle.in.tum.de/website-Isabelle2013-2/+ http://isabelle.in.tum.de/website-Isabelle2014/ The first time you call `scyther-proof` with the `--isabelle` flag it will build the logic image of the Isabelle/HOL theories formalizing the security protocol verification theory underlying `scyther-proof`. -If you wish to use ProofGeneral to interactively process the theory files-using our extensions to Isabelle's ISAR proof language, use one of the-following two variants. This is needed in order to make the new ISAR keywords-`role`, `protocol`, `sources`, and `prefix_close` available in the Emacs-frontend. If you are using the Isabelle/jEdit Prover IDE, the keywords are-automatically registered. --Variant a: Brute Force-------------------------Copy the Emacs keywords file provided with the ESPL distribution at-- $SCYTHER_PROOF_HOME/data/isabelle/src/isar-keywords.el--to your local Isabelle configuration in-- $ISABELLE_HOME_USER/etc--This will replace any custom keyword file that you have already-installed in that way. You can find out about $ISABELLE_HOME_USER-by running-- isabelle getenv ISABELLE_HOME_USER---Variant b: Elegance----------------------A more elegant way is to copy the keywords file provided with our-distribution to-- $ISABELLE_HOME_USER/etc/isar-keywords-ESPL.el--and start Isabelle using the -k switch as follows.-- isabelle emacs -k ESPL <your-theory-file.thy>--- 3. Usage ======== @@ -147,20 +110,6 @@ Note that in many case the easiest way to start with constructing machine-checked proofs interactively is to use a proof script generated by scyther-proof.-- Using ProofGeneral- -------------------- In the directory output by scyther-proof, load the Tutorial on interactive- proof construction using the following commands-- cd <theory-dir-output-by-scytherproof>/src- isabelle emacs Tutorial.thy-- or if you've chosen the elegant variant for the keywords file-- isabelle emacs -k ESPL Tutorial.thy- Using the Isabelle/jEdit Prover IDE -----------------------------------
data/isabelle/document/root.tex view
@@ -1,46 +1,25 @@ \documentclass[11pt,a4paper]{article} \usepackage{isabelle,isabellesym} -% further packages required for unusual symbols (see also-% isabellesym.sty), use only when needed--%\usepackage{amssymb}- %for \<leadsto>, \<box>, \<diamond>, \<sqsupset>, \<mho>, \<Join>,- %\<lhd>, \<lesssim>, \<greatersim>, \<lessapprox>, \<greaterapprox>,- %\<triangleq>, \<yen>, \<lozenge>--%\usepackage[greek,english]{babel}- %option greek for \<euro>- %option english (default language) for \<guillemotleft>, \<guillemotright>--%\usepackage[latin1]{inputenc}- %for \<onesuperior>, \<onequarter>, \<twosuperior>, \<onehalf>,- %\<threesuperior>, \<threequarters>, \<degree>--%\usepackage[only,bigsqcap]{stmaryrd}- %for \<Sqinter>--%\usepackage{eufrak}- %for \<AA> ... \<ZZ>, \<aa> ... \<zz> (also included in amssymb)--%\usepackage{textcomp}- %for \<cent>, \<currency>--% this should be the last package used \usepackage{pdfsetup} % urls in roman style, theory text in math-similar italics \urlstyle{rm} \isabellestyle{it} -% for uniform font size-%\renewcommand{\isastyle}{\isastyleminor}+\renewcommand{\isamarkupchapter}[1]{\section{#1}}+\renewcommand{\isamarkupsection}[1]{\subsection{#1}}+\renewcommand{\isamarkupsubsection}[1]{\subsubsection{#1}}+\renewcommand{\isamarkupsubsubsection}[1]{\subsubsection{#1}}+\renewcommand{\isamarkupsect}[1]{\subsection{#1}}+\renewcommand{\isamarkupsubsect}[1]{\subsubsection{#1}}+\renewcommand{\isamarkupsubsubsect}[1]{\subsubsubsection{#1}} \begin{document} -\title{ESPL}-\author{By simon}+\title{Embedded Security Protocol Logic}+\author{Simon Meier} \maketitle \tableofcontents
data/isabelle/src/ESPLogic/Automation.thy view
@@ -31,7 +31,7 @@ method_setup sources = {* ESPL_Methods.sourcesP >> (fn ((minimal, msg_t), opt_rule) => fn ctxt =>- METHOD_CASES (fn facts => + METHOD_CASES (fn facts => Seq.DETERM (HEADGOAL ( ESPL_Methods.sources_tac ctxt minimal msg_t opt_rule facts))))
data/isabelle/src/ESPLogic/Capabilities.thy view
@@ -27,10 +27,10 @@ "unionPart P1 P2 q = P1 q \<union> P2 q" notation (xsymbols)- unionPart (infix "\<union>\<^isub>P" 65)+ unionPart (infix "\<union>\<^sub>P" 65) lemma union_unionPart_conv:- "(a \<in> ((P1 \<union>\<^isub>P P2) q)) = (a \<in> (P1 q \<union> P2 q))"+ "(a \<in> ((P1 \<union>\<^sub>P P2) q)) = (a \<in> (P1 q \<union> P2 q))" by (fastforce simp add: unionPart_def) @@ -90,21 +90,21 @@ "interCap C1 C2 = (\<lambda> q. C1 q \<inter> C2 q)" notation (xsymbols)- interCap (infix "\<inter>\<^isub>C" 65)+ interCap (infix "\<inter>\<^sub>C" 65) definition unionCap :: "capability \<Rightarrow> capability \<Rightarrow> capability" (infix "UNC" 65) where "unionCap C1 C2 = (\<lambda> q. C1 q \<union> C2 q)" notation (xsymbols)- unionCap (infix "\<union>\<^isub>C" 65)+ unionCap (infix "\<union>\<^sub>C" 65) lemma union_unionCap_conv:- "(a \<in> ((C1 \<union>\<^isub>C C2) q)) = (a \<in> (C1 q \<union> C2 q))"+ "(a \<in> ((C1 \<union>\<^sub>C C2) q)) = (a \<in> (C1 q \<union> C2 q))" by (fastforce simp add: unionCap_def) lemma inter_interCap_conv:- "(a \<in> ((C1 \<inter>\<^isub>C C2) q)) = (a \<in> (C1 q \<inter> C2 q))"+ "(a \<in> ((C1 \<inter>\<^sub>C C2) q)) = (a \<in> (C1 q \<inter> C2 q))" by (fastforce simp add: interCap_def)
data/isabelle/src/ESPLogic/DistinctList.thy view
@@ -95,7 +95,7 @@ qed -text{* Specialized instances of nextRel_rev for Snoc appends *}+text{* Specialized instances of @{text "nextRel_rev"} for Snoc appends *} lemma nextRel_Snoc_simps: "nextRel (xs@[a]) x y = nextRel (a#rev xs) y x" "nextRel (xs@[a,b]) x y = nextRel (b#a#rev xs) y x"
data/isabelle/src/ESPLogic/ExecMessage.thy view
@@ -11,7 +11,8 @@ * All rights reserved. See file LICENCE for more information. ******************************************************************************) theory ExecMessage-imports +imports+ HOL_ext Protocol begin @@ -87,15 +88,15 @@ (Kbd a b = Kbd x y) = (a = x \<and> b = y \<or> a = y \<and> b = x)" apply(clarsimp simp: Kbd_def Agent_def agents_def set_eq_iff) apply(rule iffI)- apply(rename_tac a b x y)+ apply(rename_tac a' b' x' y') apply(safe)- apply(drule_tac x="a" in spec)+ apply(drule_tac x="a'" in spec) apply(simp)- apply(drule_tac x="y" in spec)+ apply(drule_tac x="y'" in spec) apply(simp)- apply(drule_tac x="x" in spec)+ apply(drule_tac x="x'" in spec) apply(simp)- apply(drule_tac x="b" in spec)+ apply(drule_tac x="b'" in spec) apply(simp) done @@ -128,6 +129,7 @@ type_synonym store = "varid \<times> tid \<Rightarrow> execmsg" +text{* Key inversion *} fun inv :: "execmsg \<Rightarrow> execmsg" where "inv (PK m) = SK m"@@ -138,34 +140,8 @@ "\<lbrakk> a \<in> Agent; b \<in> Agent \<rbrakk> \<Longrightarrow> inv (Kbd a b) = Kbd a b" by(auto simp: Kbd_def) -(* TODO: Move *)-fun opt_map2 :: "('a \<Rightarrow> 'b \<Rightarrow> 'c) \<Rightarrow> 'a option \<Rightarrow> 'b option \<Rightarrow> 'c option"-where- "opt_map2 f (Some x) (Some y) = Some (f x y)"-| "opt_map2 f _ _ = None" -lemma Some_opt_map2 [simp]:- "(Some x = opt_map2 f a b) =- (\<exists> y z. x = f y z \<and> Some y = a \<and> Some z = b)"- "(opt_map2 f a b = Some x) =- (\<exists> y z. x = f y z \<and> Some y = a \<and> Some z = b)"- by (cases a, simp, cases b, simp_all add: eq_commute)+--lemma Some_if_pushL [simp]:- "(Some x = (if b then Some y else None)) = (b \<and> x = y)"- "((if b then Some y else None) = Some x) = (b \<and> x = y)"- by (auto split: if_splits)--lemma Some_if_pushR [simp]:- "(Some x = (if b then None else Some y)) = (\<not>b \<and> x = y)"- "((if b then None else Some y) = Some x) = (\<not>b \<and> x = y)"- by (auto split: if_splits)--lemma Some_Option_map [simp]:- "(Some x = Option.map f a) = (\<exists>y. x = f y \<and> Some y = a)"- "(Option.map f a = Some x) = (\<exists>y. x = f y \<and> Some y = a)"- by (cases a, auto)+-+text{* Instantiating a pattern *} fun inst :: "store \<Rightarrow> tid \<Rightarrow> pattern \<Rightarrow> execmsg option" where "inst s i (PConst c) = Some (Lit (EConst c))"@@ -175,16 +151,36 @@ | "inst s i (PEnc m k) = opt_map2 Enc (inst s i m) (inst s i k)" | "inst s i (PSign m k) = opt_map2 Tup (inst s i m) - (opt_map2 Enc (inst s i m) (Option.map inv (inst s i k)))"-| "inst s i (PHash m) = Option.map Hash (inst s i m)"+ (opt_map2 Enc (inst s i m) (map_option inv (inst s i k)))"+| "inst s i (PHash m) = map_option Hash (inst s i m)" | "inst s i (PSymK a b) = opt_map2 K (inst s i a) (inst s i b)"-| "inst s i (PAsymPK a) = Option.map PK (inst s i a)"-| "inst s i (PAsymSK a) = Option.map SK (inst s i a)"+| "inst s i (PAsymPK a) = map_option PK (inst s i a)"+| "inst s i (PAsymSK a) = map_option SK (inst s i a)" | "inst s i (PShrK V) = (if (\<forall> v \<in> V. s (v, i) \<in> Agent) then Some (KShr (agents {s (v, i) | v. v \<in> V})) else None)"+| "inst s i (PAny) = None" +text{* Instantiate a pattern and export wildcards *}+fun any_inst :: "store \<Rightarrow> tid \<Rightarrow> pattern \<Rightarrow> (execmsg, execmsg option) varfun"+where+ "any_inst s i (PConst c) = Val (Some (Lit (EConst c)))"+| "any_inst s i (PFresh n) = Val (Some (Lit (ENonce n i)))"+| "any_inst s i (PVar v) = Val (Some (s (v, i)))"+| "any_inst s i (PTup x y) = var_lift2 (opt_map2 Tup) (any_inst s i x) (any_inst s i y)"+| "any_inst s i (PEnc m k) = var_lift2 (opt_map2 Enc) (any_inst s i m) (any_inst s i k)"+| "any_inst s i (PSign m k) = var_lift2+ (\<lambda>m' k'. opt_map2 Tup m' (opt_map2 Enc m' (map_option inv k')))+ (any_inst s i m) (any_inst s i k)"+| "any_inst s i (PHash m) = var_map (map_option Hash) (any_inst s i m)"+| "any_inst s i (PSymK a b) = var_lift2 (opt_map2 K) (any_inst s i a) (any_inst s i b)"+| "any_inst s i (PAsymPK a) = var_map (map_option PK) (any_inst s i a)"+| "any_inst s i (PAsymSK a) = var_map (map_option SK) (any_inst s i a)"+| "any_inst s i (PShrK V) = Val (inst s i (PShrK V))"+| "any_inst s i (PAny) = Fun (\<lambda>m. Val (Some m))"++ text{* We assume that recipients making use of shared keys look them up in a table. This lookup only succeeds if agent identities are given.@@ -304,8 +300,6 @@ lemma inv_inj [iff]: "(inv x = inv y) = (x = y)" by (auto) (induct x, auto)-- subsubsection{* @{term subterms} *}
data/isabelle/src/ESPLogic/ExplicitModel.thy view
@@ -111,6 +111,11 @@ type_synonym state = "explicit_trace \<times> threadpool \<times> store" ++definition exec_match :: "store \<Rightarrow> tid \<Rightarrow> varid \<Rightarrow> pattern \<Rightarrow> bool"+where+ "exec_match s i v pt = var_fold Ex (var_map (op = (Some (s (v, i)))) (any_inst s i pt))"+ inductive_set reachable :: "proto \<Rightarrow> state set" for P :: "proto"@@ -149,6 +154,12 @@ \<rbrakk> \<Longrightarrow> (t @ [Step (i, Recv l pt)], r(i \<mapsto> (done @ [Recv l pt], todo, skipped)), s) \<in> reachable P" +| match: "\<lbrakk> (t, r, s) \<in> reachable P;+ r i = Some (done, Match l eq mv pt # todo, skipped);+ exec_match s i mv pt = eq+ \<rbrakk>+ \<Longrightarrow> (t @ [Step (i, Match l eq mv pt)], r(i \<mapsto> (done @ [Match l eq mv pt], todo, skipped)), s) \<in> reachable P"+ | hash: "\<lbrakk> (t, r, s) \<in> reachable P; m \<in> knows t; Hash m \<notin> knows t@@ -169,7 +180,6 @@ \<rbrakk> \<Longrightarrow> (t @ [Learns {Enc m k}], r, s) \<in> reachable P" - | decr: "\<lbrakk> (t, r, s) \<in> reachable P; Enc m k \<in> knows t; inv k \<in> knows t@@ -187,7 +197,7 @@ [ OF reachable , rule_format , consumes 0- , case_names init compr skip lkr send recv hash tuple encr decr+ , case_names init compr skip lkr send recv match hash tuple encr decr ] end @@ -342,6 +352,11 @@ "Recv l pt \<notin> skipped" by (auto dest!: note_in_skipped) +lemma match_notin_skipped [iff]:+ "Match l eq mv pt \<notin> skipped"+ by (auto dest!: note_in_skipped)++ lemma in_steps_conv_done_skipped: "(i, step) \<in> steps t = (step \<in> set done \<and> step \<notin> skipped)"@@ -372,13 +387,23 @@ using recv `i = i'` by fastforce qed auto next+ case (match t r s i "done" l eq mv pt todo skipped i' done' todo' skipped')+ thus ?case+ proof(cases "i = i'")+ case True+ then interpret thread:+ reachable_thread P t r s i "done" "Match l eq mv pt # todo" skipped'+ using match by unfold_locales auto+ show ?thesis using match `i = i'` by fastforce+ qed auto+next case (compr t r s i "done" l ty pt todo skipped m i' done' todo' skipped') thus ?case proof(cases "i = i'") case True thus ?thesis using compr `i = i'` proof(cases "step = Note l ty pt")- case True+ case True interpret thread: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped' using compr `i = i'` by unfold_locales auto@@ -417,11 +442,27 @@ thus "?case" by fastforce qed ((unfold map_upd_Some_unfold)?, auto)+ +lemma in_steps_match:+ "((Match l eq mv pt) \<in> set done) = ((i, Match l eq mv pt) \<in> steps t)"+using thread_exists+proof(induct arbitrary: i "done" todo skipped rule rule: reachable_induct)+ case init+ thus ?case by fastforce+qed ((unfold map_upd_Some_unfold)?, auto)++ lemmas send_steps_in_done [elim!] = iffD1[OF in_steps_send, rule_format] lemmas send_done_in_steps [elim!] = iffD2[OF in_steps_send, rule_format] lemmas recv_steps_in_done [elim!] = iffD1[OF in_steps_recv, rule_format] lemmas recv_done_in_steps [elim!] = iffD2[OF in_steps_recv, rule_format]+lemmas match_steps_in_done [elim!] = iffD1[OF in_steps_match, rule_format]+lemmas match_done_in_steps [elim!] = iffD2[OF in_steps_match, rule_format] +lemma not_note_done_in_steps:+ assumes "step \<in> set done"+ and "\<not> noteStep step"+ shows "(i, step) \<in> steps t"+using assms+by (cases step, auto) lemma in_steps_eq_in_done: "step \<notin> skipped \<Longrightarrow> ((i, step) \<in> steps t) = (step \<in> set done)" @@ -462,13 +503,16 @@ shows "step \<in> set done" proof(cases step)- case (Send l pt)+ case Send thus ?thesis using inSteps by (fastforce dest: in_steps_send[THEN iffD2]) next- case (Recv l pt)+ case Recv thus ?thesis using inSteps by (fastforce dest: in_steps_recv[THEN iffD2]) next- case (Note l ty pt)+ case Match+ thus ?thesis using inSteps by (fastforce dest: in_steps_match[THEN iffD2])+next+ case Note thus ?thesis using inSteps by (fastforce simp add: in_steps_conv_done_skipped) qed @@ -533,6 +577,16 @@ by fastforce qed fastforce next+ case (match t r s i "done" l eq mv pt todo skipped i' done' todo' skipped')+ from match show ?case + proof(cases "i = i'")+ case True+ interpret this_thread:+ reachable_thread P t r s i' "done" "Match l eq mv pt # todo'" skipped'+ using match `i = i'` by unfold_locales auto+ show ?thesis using match `i = i'` by fastforce+ qed fastforce+next case (compr t r s i "done" l ty msg todo skipped m i' done' todo' skipped') from compr show ?case proof(cases "i = i'")@@ -576,6 +630,16 @@ using facts by(auto dest: in_set_listOrd1 todo_notin_doneD listOrd_done_imp_listOrd_trace in_set_listOrd2 listOrd_append[THEN iffD1] in_steps_conv_done_skipped[THEN iffD1]) +lemma listOrd_match_role_imp_listOrd_trace:+ assumes facts:+ "(i, step) \<in> steps t"+ "listOrd (done @ todo) (Match l eq mv pt) step"+ shows+ "listOrd t (Step (i, Match l eq mv pt)) (Step (i, step))"+using distinct+using facts+by(auto dest: in_set_listOrd1 todo_notin_doneD listOrd_done_imp_listOrd_trace in_set_listOrd2 listOrd_append[THEN iffD1] in_steps_conv_done_skipped[THEN iffD1])+ lemma roleOrd_notSkipped_imp_listOrd_trace: assumes facts: "(i, step) \<in> steps t"@@ -613,44 +677,29 @@ end (* reachable_state *) -lemma (in reachable_state) send_step_FV:- assumes thread_exists: "r i = Some (done, Send l msg # todo, skipped)"- and FV: "MVar n \<in> FV msg"- shows "\<exists> l' msg'. (i, Recv l' msg') \<in> steps t \<and> MVar n \<in> FV msg'"-proof -- interpret this_thread: reachable_thread P t r s i "done" "Send l msg # todo" skipped- using thread_exists by unfold_locales auto- let ?role = "done @ Send l msg # todo"- have "Send l msg \<in> set ?role" by simp- then obtain l' msg' - where "listOrd ?role (Recv l' msg') (Send l msg)"- and "MVar n \<in> FV msg'"- using FV by(fast dest!: this_thread.Send_FV)- thus ?thesis using this_thread.distinct- by(auto dest: in_set_listOrd1 in_set_listOrd2)-qed--lemma (in reachable_state) note_step_FV:- assumes thread_exists: "r i = Some (done, Note l ty msg # todo, skipped)"- and FV: "MVar n \<in> FV msg"- shows "\<exists> l' msg'. (i, Recv l' msg') \<in> steps t \<and> MVar n \<in> FV msg'"+lemma (in reachable_state) source_step:+ assumes thread_exists: "r i = Some (done, ustep # todo, skipped)"+ and useV: "v \<in> used_vars ustep"+ shows "\<exists> sstep. (i, sstep) \<in> steps t \<and> v \<in> sourced_vars sstep" proof -- interpret this_thread: reachable_thread P t r s i "done" "Note l ty msg # todo" skipped+ interpret this_thread: reachable_thread P t r s i "done" "ustep # todo" skipped using thread_exists by unfold_locales auto- let ?role = "done @ Note l ty msg # todo"- have "Note l ty msg \<in> set ?role" by simp- then obtain l' msg' - where "listOrd ?role (Recv l' msg') (Note l ty msg)"- and "MVar n \<in> FV msg'"- using FV by(fast dest!: this_thread.Note_FV)- thus ?thesis using this_thread.distinct- by(auto dest: in_set_listOrd1 in_set_listOrd2)+ let ?role = "done @ ustep # todo"+ have "ustep \<in> set ?role" by simp+ then obtain sstep+ where "listOrd ?role sstep ustep"+ and is_source: "v \<in> sourced_vars sstep"+ using useV by (fast dest!: this_thread.source_use_ord)+ hence "sstep \<in> set done" using this_thread.distinct+ by (auto dest: in_set_listOrd1 in_set_listOrd2)+ moreover have "\<not> noteStep sstep" using is_source by auto+ ultimately show ?thesis using is_source+ by (auto intro: this_thread.not_note_done_in_steps) qed -+(* subsubsection{* The Effect of a Step on the Intruder Knowledge *} - context reachable_state begin @@ -661,7 +710,7 @@ qed auto end-+*) subsection{* Almost Distinct Traces *} @@ -697,6 +746,13 @@ show ?case using `distinct' t` this_thread.distinct by(fastforce dest: this_thread.in_steps_in_done) next+ case (match t r s i "done" l eq mv pt todo skipped)+ then interpret this_thread:+ reachable_thread P t r s i "done" "Match l eq mv pt # todo" skipped+ by unfold_locales auto+ show ?case using `distinct' t` this_thread.distinct+ by (fastforce dest: this_thread.in_steps_in_done)+next case (send t r s i "done" l msg todo skipped m) then interpret this_thread: reachable_thread P t r s i "done" "Send l msg # todo" skipped@@ -910,40 +966,40 @@ next case (Cons e xs) thus ?case proof(cases e)- case (Step st) thus ?thesis- proof(cases "x = St st")- case True hence "?decomp (e#xs) [e] xs" - using Step Cons by auto- thus ?thesis by blast- next- case False- hence "predOrd xs x y"- using Step Cons by auto- then obtain ys zs where "?decomp xs ys zs"- using Cons by blast- hence "?decomp (e#xs) (e#ys) zs"- using Step Cons by auto- thus ?thesis by blast- qed+ case (Step st) thus ?thesis+ proof(cases "x = St st")+ case True hence "?decomp (e#xs) [e] xs"+ using Step Cons by auto+ thus ?thesis by blast+ next+ case False+ hence "predOrd xs x y"+ using Step Cons by auto+ then obtain ys zs where "?decomp xs ys zs"+ using Cons by blast+ hence "?decomp (e#xs) (e#ys) zs"+ using Step Cons by auto+ thus ?thesis by blast+ qed next- case (Learns M) thus ?thesis- proof(cases "\<exists> m \<in> M. x = Ln m")- case True - then obtain m where "m \<in> M" and "x = Ln m"- by auto- hence "?decomp (e#xs) [e] xs" - using Learns Cons by auto- thus ?thesis by blast- next- case False- hence "predOrd xs x y"- using Learns Cons by auto- then obtain ys zs where "?decomp xs ys zs"- using Cons by blast- hence "?decomp (e#xs) (e#ys) zs"- using Learns Cons by auto- thus ?thesis by blast- qed+ case (Learns M) thus ?thesis+ proof(cases "\<exists> m \<in> M. x = Ln m")+ case True+ then obtain m where "m \<in> M" and "x = Ln m"+ by auto+ hence "?decomp (e#xs) [e] xs"+ using Learns Cons by auto+ thus ?thesis by blast+ next+ case False+ hence "predOrd xs x y"+ using Learns Cons by auto+ then obtain ys zs where "?decomp xs ys zs"+ using Cons by blast+ hence "?decomp (e#xs) (e#ys) zs"+ using Learns Cons by auto+ thus ?thesis by blast+ qed next case (LKReveal a) thus ?thesis proof(cases "x = LKR (Lit (EAgent a))")@@ -970,46 +1026,46 @@ next case (Cons e xs) then obtain ys zs where decomp1: "?decomp (e#xs) ys zs"- by blast+ by fast hence "ys = [] \<and> e # xs = zs \<or> (\<exists>ys'. e # ys' = ys \<and> xs = ys' @ zs)"- (is "?nil \<or> ?non_nil")- by (simp add: Cons_eq_append_conv)+ (is "?nil \<or> ?non_nil")+ by (simp add: Cons_eq_append_conv) moreover { assume ?nil hence ?case using decomp1 by auto } moreover { assume ?non_nil- then obtain ys' where decomp2: "ys = e # ys'" and "xs = ys' @ zs"- by auto- hence ?case- proof(cases e)- case (Step st) thus ?thesis- proof(cases "x = St st")- case True thus ?thesis- using Step decomp1 decomp2 by auto- next- case False- hence "?decomp xs ys' zs"- using Step decomp1 decomp2 by auto- hence "predOrd xs x y"- using Cons by auto- thus ?thesis- using Step by auto- qed- next- case (Learns M) thus ?thesis- proof(cases "\<exists> m \<in> M. x = Ln m")- case True thus ?thesis- using Learns decomp1 decomp2 by auto- next- case False- hence "?decomp xs ys' zs"- using Learns decomp1 decomp2 by auto- hence "predOrd xs x y"- using Cons by auto- thus ?thesis- using Learns by auto- qed+ then obtain ys' where decomp2: "ys = e # ys'" and "xs = ys' @ zs"+ by auto+ hence ?case+ proof(cases e)+ case (Step st) thus ?thesis+ proof(cases "x = St st")+ case True thus ?thesis+ using Step decomp1 decomp2 by auto+ next+ case False+ hence "?decomp xs ys' zs"+ using Step decomp1 decomp2 by auto+ hence "predOrd xs x y"+ using Cons by auto+ thus ?thesis+ using Step by auto+ qed next+ case (Learns M) thus ?thesis+ proof(cases "\<exists> m \<in> M. x = Ln m")+ case True thus ?thesis+ using Learns decomp1 decomp2 by auto+ next+ case False+ hence "?decomp xs ys' zs"+ using Learns decomp1 decomp2 by auto+ hence "predOrd xs x y"+ using Cons by auto+ thus ?thesis+ using Learns by auto+ qed+ next case (LKReveal a) thus ?thesis proof(cases "x = LKR (Lit (EAgent a))") case True thus ?thesis@@ -1023,7 +1079,7 @@ thus ?thesis using LKReveal by auto qed- qed+ qed } ultimately show ?case by fast qed@@ -1102,6 +1158,12 @@ from recv show ?case by (fastforce dest: s1.rev_knows_pairParts_closedD) next+ case (match t r s i "done" l eq mv pt todo)+ then interpret s1: reachable_state P t r s+ by unfold_locales+ from match show ?case+ by (fastforce dest: s1.rev_knows_pairParts_closedD)+next case (init r s) thus ?case by simp next case (lkr t r s a)@@ -1142,6 +1204,14 @@ text{* Three of the lemmas for the reasoning technique. *} lemmas Input = Ln_before_inp +lemma match_eq_rule:+ "(i, Match l True v pt) \<in> steps t \<Longrightarrow> exec_match s i v pt"+by (induct rule: reachable_induct) (fastforce+)++lemma not_match_rule:+ "(i, Match l False v pt) \<in> steps t \<Longrightarrow> \<not> exec_match s i v pt"+by (induct rule: reachable_induct) (fastforce+)+ lemma split_before: "Ln (Tup m m') \<prec> y \<Longrightarrow> Ln m \<prec> y \<and> Ln m' \<prec> y" by (fastforce intro: pairParts_before)@@ -1262,12 +1332,12 @@ { assume "?tup" hence "?thesis" by fastforce } moreover { assume "?chain t r s" hence "?chain (t@t') r s" - by (fastforce intro!: decrChain_append)+ by (fastforce intro!: decrChain_append) hence "?thesis" by blast } moreover { assume "?note t r s" hence "?note (t@t') r s" - by (fastforce intro!: decrChain_append)+ by (fastforce intro!: decrChain_append) hence "?thesis" by blast } moreover { assume "?keys" hence "?thesis" by auto }@@ -1287,7 +1357,7 @@ using hash by fastforce moreover { assume "?new" hence ?case - using `m \<in> knows t` by fastforce + using `m \<in> knows t` by fastforce } moreover { assume "?old" @@ -1302,7 +1372,7 @@ using encr by fastforce moreover { assume "?new" hence ?case - using `m \<in> knows t` and `k \<in> knows t` by fastforce + using `m \<in> knows t` and `k \<in> knows t` by fastforce } moreover { assume "?old" @@ -1317,7 +1387,7 @@ using tuple by fastforce moreover { assume "?new" hence ?case - using `x \<in> knows t` and `y \<in> knows t` by fastforce + using `x \<in> knows t` and `y \<in> knows t` by fastforce } moreover { assume "?old" @@ -1380,6 +1450,61 @@ } ultimately show ?case by fastforce next+ case (match t r s i "done" l eq mv pt todo skipped)+ hence "?cases m' t r s" + (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys")+ by clarsimp+ moreover+ { assume "?ik0" hence "?case" by blast } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover+ { let ?t' = "t@[Step (i, Match l eq mv pt)]"+ and ?r' = "r(i \<mapsto> (done @ [Match l eq mv pt], todo, skipped))"+ assume "?chain t r s" then+ obtain i' done' todo' l' pt' skipped' m+ where thread': "r i' = Some (done', todo', skipped')"+ and send: "Send l' pt' \<in> set done'"+ and msg: "Some m = inst s i' pt'"+ and chain:"decrChain [] t {St (i', Send l' pt')} m m'"+ by auto+ then interpret th1: reachable_thread P t r s i' done' todo' skipped'+ using match by unfold_locales auto+ obtain done'' todo'' skipped''+ where "Send l' pt' \<in> set done''"+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Match l eq mv pt # todo, skipped)` thread' send+ by (cases "i = i'") (fastforce+)+ hence "?chain ?t' ?r' s"+ using chain msg+ by (fast intro!: decrChain_append)+ hence "?case" by auto+ } moreover+ { let ?t' = "t@[Step (i, Match l eq mv pt)]"+ and ?r' = "r(i \<mapsto> (done @ [Match l eq mv pt], todo, skipped))"+ assume "?note t r s" then+ obtain i' done' todo' skipped' l' ty' pt' m+ where thread': "r i' = Some (done', todo', skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'"+ and notSkipped: "Note l' ty' pt' \<notin> skipped'"+ and msg: "Some m = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"+ by auto+ then interpret th1: reachable_thread P t r s i' done' todo' skipped'+ using match by unfold_locales auto+ obtain done'' todo'' skipped''+ where "Note l' ty' pt' \<in> set done''"+ and "Note l' ty' pt' \<notin> skipped'' "+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Match l eq mv pt # todo, skipped)` thread' inDone notSkipped+ by (cases "i = i'") (fastforce+)+ hence "?note ?t' ?r' s" using msg chain notSkipped inDone+ by (fast intro!: decrChain_append)+ hence "?case" by auto+ }+ ultimately show ?case by fastforce+ next case (send t r s i "done" l pt todo skipped m) then interpret th1: reachable_thread P t r s i "done" "Send l pt # todo" skipped@@ -1392,10 +1517,10 @@ moreover { assume "?new" hence "decrChain [] ?t' {St (i, Send l pt)} m m'"- by (fastforce intro!: decrChain_unpair)+ by (fastforce intro!: decrChain_unpair) moreover have "?r' i = Some (done @ [Send l pt], todo, skipped)"- using th1.thread_exists by auto+ using th1.thread_exists by auto ultimately have ?case using `Some m = inst s i pt` apply-@@ -1405,13 +1530,13 @@ apply(rule disjI2) apply(rule disjI1) apply(fastforce)- done+ done } moreover { assume "?old" hence "?cases m' t r s" (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys")- using send by clarsimp+ using send by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover { assume "?hash" hence "?case" by fastforce } moreover@@ -1419,38 +1544,38 @@ { assume "?keys" hence "?case" by fastforce } moreover { assume "?tup" hence "?case" by fastforce } moreover { assume "?chain t r s" then- obtain i' done' todo' l' pt' skipped' m- where thread': "r i' = Some (done', todo',skipped')"- and send: "Send l' pt' \<in> set done'"- and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Send l' pt')} m m'"- by auto- obtain done'' todo'' skipped''- where "Send l' pt' \<in> set done''"- and "(r(i \<mapsto> (done @ [Send l pt], todo, skipped))) i' = Some (done'', todo'',skipped'')"- using `r i = Some (done, Send l pt # todo, skipped)` thread' send- by (cases "i = i'") (fastforce+)- hence "?chain ?t' ?r' s"- using chain msg- by (fast intro!: decrChain_append)- hence "?case" by auto+ obtain i' done' todo' l' pt' skipped' m+ where thread': "r i' = Some (done', todo',skipped')"+ and send: "Send l' pt' \<in> set done'"+ and msg: "Some m = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Send l' pt')} m m'"+ by auto+ obtain done'' todo'' skipped''+ where "Send l' pt' \<in> set done''"+ and "(r(i \<mapsto> (done @ [Send l pt], todo, skipped))) i' = Some (done'', todo'',skipped'')"+ using `r i = Some (done, Send l pt # todo, skipped)` thread' send+ by (cases "i = i'") (fastforce+)+ hence "?chain ?t' ?r' s"+ using chain msg+ by (fast intro!: decrChain_append)+ hence "?case" by auto } moreover { assume "?note t r s" then obtain i' done' todo' skipped' l' ty' pt' m- where thread': "r i' = Some (done', todo', skipped')"- and inDone: "Note l' ty' pt' \<in> set done'"+ where thread': "r i' = Some (done', todo', skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'" and notSkipped: "Note l' ty' pt' \<notin> skipped'" and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'" by auto obtain done'' todo'' skipped''- where "Note l' ty' pt' \<in> set done''"+ where "Note l' ty' pt' \<in> set done''" and "Note l' ty' pt' \<notin> skipped'' "- and "?r' i' = Some (done'', todo'', skipped'')"- using `r i = Some (done, Send l pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (fastforce+)+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Send l pt # todo, skipped)` thread' inDone notSkipped+ by (cases "i = i'") (fastforce+) hence "?note ?t' ?r' s" using chain notSkipped inDone msg- by(fast intro!: decrChain_append)+ by(fast intro!: decrChain_append) hence "?case" by auto } ultimately have ?case by fast@@ -1469,53 +1594,53 @@ { assume "?new" hence "m' \<in> pairParts m" and "m' \<notin> knows t" by auto hence - "(predOrd t (Ln m) (Ln (Enc m k)) \<and> predOrd t (Ln k) (Ln (Enc m k))) \<or>+ "(predOrd t (Ln m) (Ln (Enc m k)) \<and> predOrd t (Ln k) (Ln (Enc m k))) \<or> ((\<exists>i done todo skipped. r i = Some (done, todo,skipped) \<and> (\<exists>l pt ms. Send l pt \<in> set done \<and> Some ms = inst s i pt \<and> - decrChain [] t {St (i, Send l pt)} ms (Enc m k)))) \<or>+ decrChain [] t {St (i, Send l pt)} ms (Enc m k)))) \<or> ((\<exists>i done todo skipped. r i = Some (done, todo,skipped) \<and> (\<exists>l ty pt ms. Note l ty pt \<in> set done \<and> Note l ty pt \<notin> skipped \<and>- Some ms = inst s i pt \<and> - decrChain [] t {St (i, Note l ty pt)} ms (Enc m k))))"- (is "?fake_enc \<or> ?decchain t (Enc m k) \<or> ?notechain t (Enc m k)")- using IH[OF `Enc m k \<in> knows t`] by auto+ Some ms = inst s i pt \<and>+ decrChain [] t {St (i, Note l ty pt)} ms (Enc m k))))"+ (is "?fake_enc \<or> ?decchain t (Enc m k) \<or> ?notechain t (Enc m k)")+ using IH[OF `Enc m k \<in> knows t`] by auto moreover { assume "?fake_enc"- hence "?case" using `?new`- by (auto dest!: in_knows_predOrd1 s1.rev_knows_pairParts_closedD)+ hence "?case" using `?new`+ by (auto dest!: in_knows_predOrd1 s1.rev_knows_pairParts_closedD) } moreover { assume "?decchain t (Enc m k)" then- obtain i' done' todo' l' pt' skipped' ms- where thread': "r i' = Some (done', todo',skipped')"- and send: "Send l' pt' \<in> set done'"- and msg: "Some ms = inst s i' pt'"- and chain: "decrChain [] t {St (i', Send l' pt')} ms (Enc m k)"- by auto- moreover- hence "decrChain [] ?t' {St (i', Send l' pt')} ms m'"- using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`- by (fastforce intro!: decrChain_decrypt)- ultimately- have "?decchain ?t' m'" by fastforce- hence "?case" by blast+ obtain i' done' todo' l' pt' skipped' ms+ where thread': "r i' = Some (done', todo',skipped')"+ and send: "Send l' pt' \<in> set done'"+ and msg: "Some ms = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Send l' pt')} ms (Enc m k)"+ by auto+ moreover+ hence "decrChain [] ?t' {St (i', Send l' pt')} ms m'"+ using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`+ by (fastforce intro!: decrChain_decrypt)+ ultimately+ have "?decchain ?t' m'" by fastforce+ hence "?case" by blast } moreover { assume "?notechain t (Enc m k)" then- obtain i' done' todo' l' ty' pt' skipped' ms- where thread': "r i' = Some (done', todo',skipped')"- and inDone: "Note l' ty' pt' \<in> set done'"- and notSkipped: "Note l' ty' pt' \<notin> skipped'"- and msg: "Some ms = inst s i' pt'"- and chain: "decrChain [] t {St (i', Note l' ty' pt')} ms (Enc m k)"- by auto- moreover- hence "decrChain [] ?t' {St (i', Note l' ty' pt')} ms m'"- using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`- by (fastforce intro!: decrChain_decrypt)- ultimately- have "?notechain ?t' m'" by fastforce- hence "?case" by blast+ obtain i' done' todo' l' ty' pt' skipped' ms+ where thread': "r i' = Some (done', todo',skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'"+ and notSkipped: "Note l' ty' pt' \<notin> skipped'"+ and msg: "Some ms = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} ms (Enc m k)"+ by auto+ moreover+ hence "decrChain [] ?t' {St (i', Note l' ty' pt')} ms m'"+ using `?new` `Enc m k \<in> knows t` `inv k \<in> knows t`+ by (fastforce intro!: decrChain_decrypt)+ ultimately+ have "?notechain ?t' m'" by fastforce+ hence "?case" by blast } ultimately have ?case by fast }@@ -1545,61 +1670,63 @@ } ultimately show "?case" by fast next- case (skip t r s i "done" l ty pt todo skipped)- then interpret this_thread: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped by unfold_locales- let ?r' = "r(i \<mapsto> (done @ [Note l ty pt], todo, insert (Note l ty pt) skipped))"- have "m' \<in> knows t" using skip by fastforce- hence "?cases m' t r s" - (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys")- using skip by clarsimp- moreover- { assume "?ik0" hence "?case" by blast } moreover- { assume "?hash" hence "?case" by fastforce } moreover- { assume "?enc" hence "?case" by fastforce } moreover- { assume "?keys" hence "?case" by fastforce } moreover- { assume "?tup" hence "?case" by fastforce } moreover- { assume "?chain t r s" then- obtain i' done' todo' l' pt' skipped' m+ case (skip t r s i "done" l ty pt todo skipped)+ then interpret this_thread:+ reachable_thread P t r s i "done" "Note l ty pt # todo" skipped+ by unfold_locales+ let ?r' = "r(i \<mapsto> (done @ [Note l ty pt], todo, insert (Note l ty pt) skipped))"+ have "m' \<in> knows t" using skip by fastforce+ hence "?cases m' t r s"+ (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys")+ using skip by clarsimp+ moreover+ { assume "?ik0" hence "?case" by blast } moreover+ { assume "?hash" hence "?case" by fastforce } moreover+ { assume "?enc" hence "?case" by fastforce } moreover+ { assume "?keys" hence "?case" by fastforce } moreover+ { assume "?tup" hence "?case" by fastforce } moreover+ { assume "?chain t r s" then+ obtain i' done' todo' l' pt' skipped' m where thread': "r i' = Some (done', todo',skipped')" and send: "Send l' pt' \<in> set done'" and msg: "Some m = inst s i' pt'" and chain: "decrChain [] t {St (i', Send l' pt')} m m'" by auto- obtain done'' todo'' skipped''+ obtain done'' todo'' skipped'' where "Send l' pt' \<in> set done''" and "?r' i' = Some (done'', todo'',skipped'')" using skip(3) thread' send by (cases "i = i'") (fastforce+)- hence "?chain t ?r' s"+ hence "?chain t ?r' s" using chain msg by fast- hence "?case" by auto- }- moreover- { assume "?note t r s" then- obtain i' done' todo' skipped' l' ty' pt' m- where thread': "r i' = Some (done', todo', skipped')"- and inDone: "Note l' ty' pt' \<in> set done'"- and notSkipped: "Note l' ty' pt' \<notin> skipped'"- and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"- by auto+ hence "?case" by auto+ }+ moreover+ { assume "?note t r s" then+ obtain i' done' todo' skipped' l' ty' pt' m+ where thread': "r i' = Some (done', todo', skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'"+ and notSkipped: "Note l' ty' pt' \<notin> skipped'"+ and msg: "Some m = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"+ by auto obtain done'' todo'' skipped''- where "Note l' ty' pt' \<in> set done''"- and "Note l' ty' pt' \<notin> skipped'' "- and "?r' i' = Some (done'', todo'', skipped'')"- using `r i = Some (done, Note l ty pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (force dest: this_thread.done_notin_todoD)+- hence "?note t ?r' s" + where "Note l' ty' pt' \<in> set done''"+ and "Note l' ty' pt' \<notin> skipped'' "+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Note l ty pt # todo, skipped)` thread' inDone notSkipped+ by (cases "i = i'") (force dest: this_thread.done_notin_todoD)++ hence "?note t ?r' s" using chain notSkipped inDone msg by fast hence "?case" by auto- } moreover- { assume "?keys" hence "?case" by fastforce }- ultimately - show "?case" by fastforce+ } moreover+ { assume "?keys" hence "?case" by fastforce }+ ultimately+ show "?case" by fastforce next- case(compr t r s i "done" l ty pt todo skipped m m')- then interpret th1: + case(compr t r s i "done" l ty pt todo skipped m m')+ then interpret th1: reachable_thread P t r s i "done" "Note l ty pt # todo" skipped by unfold_locales let ?r' = "r(i \<mapsto> (done @ [Note l ty pt], todo, skipped))"@@ -1609,12 +1736,8 @@ using compr by fastforce moreover { assume "?new"- (*- hence "m' \<in> pairParts (inst s i pt)" and "m' \<notin> knows t" using `m = inst s i pt` - by auto-*)- hence "decrChain [] ?t' {St (i, Note l ty pt)} m m'" - by (fastforce intro!: decrChain_unpair)+ hence "decrChain [] ?t' {St (i, Note l ty pt)} m m'"+ by (fastforce intro!: decrChain_unpair) moreover have "?r' i = Some (done @ [Note l ty pt], todo, skipped)" using th1.thread_exists by auto@@ -1625,7 +1748,7 @@ by (fastforce dest: th1.todo_notin_skippedD) ultimately have ?case using `Some m = inst s i pt`- apply-+ apply- apply(rule disjI2) apply(rule disjI2) apply(rule disjI2)@@ -1638,7 +1761,7 @@ { assume "?old" hence "?cases m' t r s" (is "?ik0 \<or> ?hash \<or> ?enc \<or> ?tup \<or> ?chain t r s \<or> ?note t r s \<or> ?keys")- using compr by clarsimp+ using compr by clarsimp moreover { assume "?ik0" hence "?case" by blast } moreover { assume "?hash" hence "?case" by fastforce } moreover@@ -1646,35 +1769,35 @@ { assume "?keys" hence "?case" by fastforce } moreover { assume "?tup" hence "?case" by fastforce } moreover { assume "?chain t r s" then- obtain i' done' todo' l' pt' skipped' m- where thread': "r i' = Some (done', todo',skipped')"- and send: "Send l' pt' \<in> set done'"- and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Send l' pt')} m m'"- by auto- obtain done'' todo'' skipped''- where "Send l' pt' \<in> set done''"- and "(r(i \<mapsto> (done @ [Note l ty pt], todo, skipped))) i' = Some (done'', todo'',skipped'')"- using compr(3) thread' send- by (cases "i = i'") (fastforce+)- hence "?chain ?t' ?r' s" using chain msg- by(fast intro!: decrChain_append)- hence "?case" by auto+ obtain i' done' todo' l' pt' skipped' m+ where thread': "r i' = Some (done', todo',skipped')"+ and send: "Send l' pt' \<in> set done'"+ and msg: "Some m = inst s i' pt'"+ and chain: "decrChain [] t {St (i', Send l' pt')} m m'"+ by auto+ obtain done'' todo'' skipped''+ where "Send l' pt' \<in> set done''"+ and "(r(i \<mapsto> (done @ [Note l ty pt], todo, skipped))) i' = Some (done'', todo'',skipped'')"+ using compr(3) thread' send+ by (cases "i = i'") (fastforce+)+ hence "?chain ?t' ?r' s" using chain msg+ by(fast intro!: decrChain_append)+ hence "?case" by auto } moreover { assume "?note t r s" then obtain i' done' todo' skipped' l' ty' pt' m- where thread': "r i' = Some (done', todo', skipped')"- and inDone: "Note l' ty' pt' \<in> set done'"+ where thread': "r i' = Some (done', todo', skipped')"+ and inDone: "Note l' ty' pt' \<in> set done'" and notSkipped: "Note l' ty' pt' \<notin> skipped'" and msg: "Some m = inst s i' pt'"- and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'"+ and chain: "decrChain [] t {St (i', Note l' ty' pt')} m m'" by auto obtain done'' todo'' skipped''- where "Note l' ty' pt' \<in> set done''"+ where "Note l' ty' pt' \<in> set done''" and "Note l' ty' pt' \<notin> skipped'' "- and "?r' i' = Some (done'', todo'', skipped'')"- using `r i = Some (done, Note l ty pt # todo, skipped)` thread' inDone notSkipped- by (cases "i = i'") (fastforce+)+ and "?r' i' = Some (done'', todo'', skipped'')"+ using `r i = Some (done, Note l ty pt # todo, skipped)` thread' inDone notSkipped+ by (cases "i = i'") (fastforce+) hence "?note ?t' ?r' s" using chain notSkipped inDone msg by(fast intro!: decrChain_append)
data/isabelle/src/ESPLogic/HOL_ext.thy view
@@ -29,6 +29,70 @@ "\<lbrakk> \<And> x y. m x = Some y \<Longrightarrow> m' x = Some y \<rbrakk> \<Longrightarrow> m \<subseteq>\<^sub>m m'" by(force simp: map_le_def) ++section{* Option *}++fun opt_map2 :: "('a \<Rightarrow> 'b \<Rightarrow> 'c) \<Rightarrow> 'a option \<Rightarrow> 'b option \<Rightarrow> 'c option"+where+ "opt_map2 f (Some x) (Some y) = Some (f x y)"+| "opt_map2 f _ _ = None"++lemma Some_opt_map2 [simp]:+ "(Some x = opt_map2 f a b) =+ (\<exists> y z. x = f y z \<and> Some y = a \<and> Some z = b)"+ "(opt_map2 f a b = Some x) =+ (\<exists> y z. x = f y z \<and> Some y = a \<and> Some z = b)"+ by (cases a, simp, cases b, simp_all add: eq_commute)+++lemma Some_if_pushL [simp]:+ "(Some x = (if b then Some y else None)) = (b \<and> x = y)"+ "((if b then Some y else None) = Some x) = (b \<and> x = y)"+ by (auto split: if_splits)++lemma Some_if_pushR [simp]:+ "(Some x = (if b then None else Some y)) = (\<not>b \<and> x = y)"+ "((if b then None else Some y) = Some x) = (\<not>b \<and> x = y)"+ by (auto split: if_splits)++lemma Some_Option_map [simp]:+ "(Some x = map_option f a) = (\<exists>y. x = f y \<and> Some y = a)"+ "(map_option f a = Some x) = (\<exists>y. x = f y \<and> Some y = a)"+ by (cases a, auto)++++section{* Variadic Functions *}++datatype ('a, 'b) varfun = Val 'b | Fun "'a \<Rightarrow> ('a, 'b) varfun"++primrec var_map :: "('b \<Rightarrow> 'c) \<Rightarrow> ('a, 'b) varfun \<Rightarrow> ('a, 'c) varfun"+where+ "var_map f (Val x) = Val (f x)"+| "var_map f (Fun g) = Fun (\<lambda>x. var_map f (g x))"++primrec var_apply :: "('a, 'b \<Rightarrow> 'c) varfun \<Rightarrow> ('a, 'b) varfun \<Rightarrow> ('a, 'c) varfun"+where+ "var_apply (Val f) v = var_map f v"+| "var_apply (Fun g) v = Fun (\<lambda>x. var_apply (g x) v)"++abbreviation var_lift2 :: "('b \<Rightarrow> 'c \<Rightarrow> 'd) \<Rightarrow> ('a, 'b) varfun \<Rightarrow> ('a, 'c) varfun \<Rightarrow> ('a, 'd) varfun"+where "var_lift2 f v1 v2 \<equiv> var_apply (var_map f v1) v2"++primrec var_fold :: "(('a \<Rightarrow> 'b) \<Rightarrow> 'b) \<Rightarrow> ('a, 'b) varfun \<Rightarrow> 'b"+where+ "var_fold f (Val x) = x"+| "var_fold f (Fun g) = f (\<lambda>x. var_fold f (g x))"+++lemma var_map_map [simp]: "var_map f (var_map g v) = var_map (f o g) v"+by (induct v) (auto)++lemma var_fold_not_all: "(\<not> var_fold All v) = var_fold Ex (var_map Not v)"+by (induct v) (auto)++lemma var_fold_not_ex: "(\<not> var_fold Ex v) = var_fold All (var_map Not v)"+by (induct v) (auto)++ section{* Finite Sets *} text{*
data/isabelle/src/ESPLogic/Hints.thy view
@@ -79,7 +79,7 @@ val hint_ct = mk_hint name t |> HOLogic.mk_Trueprop |> Thm.cterm_of (Proof_Context.theory_of ctxt); in- Goal.prove_internal [] hint_ct (K (ALLGOALS (remove_all_hints_tac ctxt)))+ Goal.prove_internal ctxt [] hint_ct (K (ALLGOALS (remove_all_hints_tac ctxt))) end; end;
data/isabelle/src/ESPLogic/InferenceRules.thy view
@@ -75,6 +75,8 @@ (\<forall> st st'. (nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st') \<longrightarrow> ((recvStep st \<longrightarrow> (\<exists> m. Some m = inst s i (stepPat st) \<and> predOrd t (Ln m) (St (i, st)))) \<and>+ (matchEqStep st \<longrightarrow> exec_match s i (matchVar st) (stepPat st)) \<and>+ (notMatchStep st \<longrightarrow> \<not> exec_match s i (matchVar st) (stepPat st)) \<and> predOrd t (St (i, st)) (St (i, st'))) )" @@ -232,6 +234,14 @@ \<lbrakk> nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st'; recvStep st \<rbrakk> \<Longrightarrow> \<exists> m. Some m = inst s i (stepPat st) \<and> Ln m \<prec> St (i, st)"+ and "\<And> st st'.+ \<lbrakk> nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st';+ matchEqStep st+ \<rbrakk> \<Longrightarrow> exec_match s i (matchVar st) (stepPat st)"+ and "\<And> st st'.+ \<lbrakk> nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st';+ notMatchStep st+ \<rbrakk> \<Longrightarrow> \<not> exec_match s i (matchVar st) (stepPat st)" and "\<And> st st'. \<lbrakk> nextRel (filter (\<lambda> x. \<not> (noteStep x)) (takeWhile (\<lambda> x. x \<noteq> step) R) @ [step]) st st' \<rbrakk> \<Longrightarrow> St (i, st) \<prec> St (i, st')"@@ -246,7 +256,7 @@ from role_exists obtain "done" todo skipped where R_split: "R = done @ todo"- and "r i = Some (done, todo,skipped)"+ and thread_state: "r i = Some (done, todo,skipped)" by (auto elim!: roleMap_SomeE) moreover then interpret this_thread:@@ -285,12 +295,23 @@ by(fastforce dest!: this_thread.note_in_skipped note_filtered_revRole) hence steps: "(i, st) \<in> steps t" "(i, st') \<in> steps t" by(auto dest: this_thread.in_steps_conv_done_skipped[THEN iffD1])- { assume "recvStep st" then- obtain l pt where "st = Recv l pt" by (cases st) auto+ { assume "recvStep st" hence "\<exists> m. Some m = inst s i (stepPat st) \<and> Ln m \<prec> St (i, st)"- using steps by(auto intro!: Ln_before_inp)+ using steps by (auto dest!: recvStepD Ln_before_inp) } note input = this+ {+ assume "matchEqStep st"+ hence "exec_match s i (matchVar st) (stepPat st)"+ using steps by (auto dest!: matchEqStepD match_eq_rule)+ }+ note match_eq = this+ {+ assume "notMatchStep st"+ hence "\<not> exec_match s i (matchVar st) (stepPat st)"+ using steps by (auto dest!: notMatchStepD not_match_rule)+ }+ note not_match = this have "listOrd R st st'" using nextRel and R_split and done_split@@ -300,7 +321,7 @@ apply - apply(drule this_thread.in_steps_conv_done_skipped[THEN iffD1]) by(fastforce dest!: this_thread.roleOrd_notSkipped_imp_listOrd_trace dest:listOrd_imp_predOrd)+- note input and this+ note input and match_eq and not_match and this } ultimately show ?thesis by (auto simp: prefixClose_def)@@ -310,15 +331,18 @@ lemma ext_prefixClose: "\<lbrakk> (i, step) \<in> steps t; roleMap r i = Some R \<rbrakk> \<Longrightarrow>- prefixClose s t R step i \<and> - (recvStep step \<longrightarrow> (\<exists> m. Some m = inst s i (stepPat step) \<and> Ln m \<prec> St (i, step)))"- by (cases step) (fastforce intro!: prefixCloseI Ln_before_inp)++ prefixClose s t R step i \<and>+ (recvStep step \<longrightarrow> (\<exists> m. Some m = inst s i (stepPat step) \<and> Ln m \<prec> St (i, step))) \<and>+ (matchEqStep step \<longrightarrow> exec_match s i (matchVar step) (stepPat step)) \<and>+ (notMatchStep step \<longrightarrow> \<not> exec_match s i (matchVar step) (stepPat step))"+by (cases step)+ (auto dest: prefixCloseI Ln_before_inp matchEqStepD match_eq_rule notMatchStepD not_match_rule) text{* Used for prefix closing assumptions corresponding to a case of an annotation completeness induction proof. *}-lemma thread_prefixClose: +lemma thread_prefixClose: assumes thread_exists: "r i = Some (step#done, todo, skipped)" and not_skipped: "step \<notin> skipped" shows @@ -326,21 +350,29 @@ ((recvStep st \<longrightarrow> (\<exists> m. Some m = inst s i (stepPat st) \<and> predOrd t (Ln m) (St (i, st))) ) \<and>- predOrd t (St (i, st)) (St (i, st')))+ (matchEqStep st \<longrightarrow> exec_match s i (matchVar st) (stepPat st)) \<and>+ (notMatchStep st \<longrightarrow> \<not> exec_match s i (matchVar st) (stepPat st)) \<and>+ predOrd t (St (i, st)) (St (i, st'))) ) \<and> (recvStep (last (step#done)) \<longrightarrow>- (\<exists> m. Some m = inst s i (stepPat (last (step#done))) \<and> + (\<exists> m. Some m = inst s i (stepPat (last (step#done))) \<and> predOrd t (Ln m) (St (i, (last (step#done)))) )+ ) \<and>+ (matchEqStep (last (step#done)) \<longrightarrow>+ exec_match s i (matchVar (last (step#done))) (stepPat (last (step#done)))+ ) \<and>+ (notMatchStep (last (step#done)) \<longrightarrow>+ \<not> exec_match s i (matchVar (last (step#done))) (stepPat (last (step#done))) )"- (is "?prefix \<and> ?inp_last")+ (is "?prefix \<and> ?inp_last \<and> ?match_eq_last \<and> ?not_match_last") proof - interpret this_thread: reachable_thread P t r s i "step#done" todo skipped using thread_exists by unfold_locales auto { assume recv: "recvStep (last (step#done))" hence last_step: "(i, last (step#done)) \<in> steps t"- proof+ proof - obtain l pt where recv_eq: "(Recv l pt) = (last (step # done))" using recv by (fastforce dest!: recvStepD)@@ -349,10 +381,39 @@ using thread_exists recv_eq by(fastforce dest!: this_thread.in_steps_recv[THEN iffD1]) qed- hence "?inp_last"- by (cases "last (step # done)") (fastforce dest!: Ln_before_inp)++ hence "?inp_last" by (fastforce dest: recvStepD Ln_before_inp) } moreover+ {+ assume match: "matchEqStep (last (step#done))"+ hence last_step: "(i, last (step#done)) \<in> steps t"+ proof -+ obtain l v pt+ where match_eq: "(Match l True v pt) = (last (step # done))"+ using match by (fastforce dest!: matchEqStepD)+ hence "Match l True v pt \<in> set (step # done)" by auto+ thus ?thesis+ using thread_exists match_eq+ by(fastforce dest!: this_thread.in_steps_recv[THEN iffD1])+ qed+ hence "?match_eq_last" by (fastforce dest: matchEqStepD match_eq_rule)+ }+ moreover+ {+ assume match: "notMatchStep (last (step#done))"+ hence last_step: "(i, last (step#done)) \<in> steps t"+ proof -+ obtain l v pt+ where match_eq: "(Match l False v pt) = (last (step # done))"+ using match by (fastforce dest!: notMatchStepD)+ hence "Match l False v pt \<in> set (step # done)" by auto+ thus ?thesis+ using thread_exists match_eq+ by(fastforce dest!: this_thread.in_steps_recv[THEN iffD1])+ qed+ hence "?not_match_last" by (fastforce dest: notMatchStepD not_match_rule)+ }+ moreover { fix st st' assume "nextRel (step # (filter (\<lambda> x. \<not> (noteStep x)) done)) st st'"@@ -403,19 +464,25 @@ hence recv: "recvStep st \<Longrightarrow> \<exists> m. Some m = inst s i (stepPat st) \<and> predOrd t (Ln m) (St (i, st))" using this_thread.roleMap- by (cases st) (auto intro!: Ln_before_inp dest: in_steps_predOrd1)- note step_ord recv+ by (cases st) (auto dest: Ln_before_inp in_steps_predOrd1)+ from step_ord have matchEq:+ "matchEqStep st \<Longrightarrow> exec_match s i (matchVar st) (stepPat st)"+ by (cases st) (auto dest: in_steps_predOrd1 matchEqStepD match_eq_rule)+ from step_ord have notMatch:+ "notMatchStep st \<Longrightarrow> \<not> exec_match s i (matchVar st) (stepPat st)"+ by (cases st) (auto dest: in_steps_predOrd1 notMatchStepD not_match_rule)+ note step_ord recv matchEq notMatch } ultimately- show ?thesis by fast+ show ?thesis by blast qed end -text{* +(* TODO: Find the right place for this lemma. It is used only in the "prefix\_close" command.-*}+*) lemma steps_in_steps: "(i,step) \<in> steps t \<Longrightarrow> (i,step) \<in> steps t" by auto
data/isabelle/src/ESPLogic/Protocol.thy view
@@ -30,15 +30,16 @@ | PFresh id | PVar varid | PHash pattern- | PTup pattern pattern - | PEnc pattern pattern + | PTup pattern pattern+ | PEnc pattern pattern | PSign pattern pattern- | PSymK pattern pattern - | PShrK "varid set" (* variables denoting a set of agents sharing a key *)- | PAsymPK pattern - | PAsymSK pattern + | PSymK pattern pattern+ | PShrK "varid set" --{* variables denoting a set of agents sharing a key *}+ | PAsymPK pattern+ | PAsymSK pattern+ | PAny --{* wildcard for matching *} -(* bi-directional keys between two agents referenced by variables *)+text{* Bi-directional keys between two agents referenced by variables *} definition sKbd :: "varid \<Rightarrow> varid \<Rightarrow> pattern" where "sKbd a b = PShrK {a, b}" @@ -79,6 +80,7 @@ by (auto simp: sKbd_def) +text{* Free agent variables *} fun FAV :: "pattern \<Rightarrow> id set" where "FAV (PVar (AVar a)) = {a}"@@ -97,13 +99,19 @@ by (auto simp: sKbd_def) -subsubsection{* Roles *}+subsubsection{* Role Steps *} text{*- Roles are non-empty lists of unique send and receive steps - such that no long-term keys are used in message texts and all + Roles are non-empty lists of unique send and receive steps+ such that no long-term keys are used in message texts and all nonce variables are received before they are sent.+ Additionally, match steps can be used to express local constraints+ on variables and messages. Matching may be positive (equality+ must hold in order to execute the step) or negative. + Note steps indicate possible points of dynamic information+ leakage.+ The labels allow to make steps with identical message unique. They are currently defaulted to strings, but could be anything. *}@@ -112,33 +120,105 @@ datatype notetype = RandGen | State | SessKey -datatype rolestep = Send lbl pattern | Recv lbl pattern | Note lbl notetype pattern+datatype rolestep = Send lbl pattern+| Recv lbl pattern+| Match lbl bool varid pattern+| Note lbl notetype pattern +text {*+ Free message variables guaranteed to be instantiated (having+ a semantic source) after a role step was executed.+*}+fun sourced_vars :: "rolestep \<Rightarrow> id set"+where+ "sourced_vars (Recv lbl pt) = FMV pt"+| "sourced_vars (Match lbl True v pt) = FMV pt"+| "sourced_vars _ = {}"++text {*+ Free message variables which must have been obtained previously+ when performing a role step.+*}+fun used_vars :: "rolestep \<Rightarrow> id set"+where+ "used_vars (Send lbl msg) = FMV msg"+| "used_vars (Recv lbl pt) = {}"+| "used_vars (Match lbl True v pt) = {m. v = MVar m}"+| "used_vars (Match lbl False v pt) = {m. v = MVar m} \<union> FMV pt"+| "used_vars (Note lbl ty msg) = FMV msg"++text {* Free variables of a role step *}+fun FV_rolestep :: "rolestep \<Rightarrow> varid set"+where+ "FV_rolestep (Send lbl pt) = FV pt"+| "FV_rolestep (Recv lbl pt) = FV pt"+| "FV_rolestep (Match lbl eq v pt) = {v} \<union> FV pt"+| "FV_rolestep (Note lbl ty pt) = FV pt"++text {* Free agent variables of a role step *}+fun FAV_rolestep :: "rolestep \<Rightarrow> id set"+where+ "FAV_rolestep (Send lbl pt) = FAV pt"+| "FAV_rolestep (Recv lbl pt) = FAV pt"+| "FAV_rolestep (Match lbl eq v pt) = {a. v = AVar a} \<union> FAV pt"+| "FAV_rolestep (Note lbl ty pt) = FAV pt"++text {* The pattern of a rolestep *} fun stepPat :: "rolestep \<Rightarrow> pattern" where- "stepPat (Send lbl msg) = msg"-| "stepPat (Recv lbl msg) = msg"-| "stepPat (Note lbl ty msg) = msg"+ "stepPat (Send lbl pt) = pt"+| "stepPat (Recv lbl pt) = pt"+| "stepPat (Match lbl eq v pt) = pt"+| "stepPat (Note lbl ty pt) = pt" +text {* The variable to match with (or not) *}+fun matchVar :: "rolestep \<Rightarrow> varid"+where+ "matchVar (Match l eq v pt) = v"+| "matchVar _ = undefined"++text {* The type of possible information leakage *} fun noteType :: "rolestep \<Rightarrow> notetype" where "noteType (Note l ty pt) = ty"+| "noteType _ = undefined" ++text {* Predicates for step types *}+ fun sendStep :: "rolestep \<Rightarrow> bool" where- "sendStep (Send lbl msg) = True"-| "sendStep (Recv lbl msg) = False"-| "sendStep (Note lbl ty msg) = False"+ "sendStep (Send lbl pt) = True"+| "sendStep _ = False" fun noteStep :: "rolestep \<Rightarrow> bool" where- "noteStep (Send lbl msg) = False"-| "noteStep (Recv lbl msg) = False"-| "noteStep (Note lbl ty msg) = True"+ "noteStep (Note lbl ty pt) = True"+| "noteStep _ = False" +fun recvStep :: "rolestep \<Rightarrow> bool"+where+ "recvStep (Recv lbl pt) = True"+| "recvStep _ = False" -abbreviation recvStep where "recvStep x \<equiv> \<not>sendStep x \<and> \<not> noteStep x"+fun matchStep :: "rolestep \<Rightarrow> bool"+where+ "matchStep (Match lbl eq v pt) = True"+| "matchStep _ = False" +text {* Distinguishing positive and negative match steps *}++fun matchEqStep :: "rolestep \<Rightarrow> bool"+where+ "matchEqStep (Match lbl True v pt) = True"+| "matchEqStep _ = False"++fun notMatchStep :: "rolestep \<Rightarrow> bool"+where+ "notMatchStep (Match lbl False v pt) = True"+| "notMatchStep _ = False"++ lemma sendStepD [simp]: assumes inStep: "sendStep step" shows "\<exists> l pt. step = (Send l pt)"@@ -148,11 +228,36 @@ lemma recvStepD [simp]: assumes inStep: "recvStep step"- shows "\<exists> l pt. step = (Recv l pt)"+ shows "\<exists> l v. step = (Recv l v)" using inStep proof(cases step) qed auto +lemma matchStepD [simp]:+ assumes inStep: "matchStep step"+ shows "\<exists> l eq v pt. step = (Match l eq v pt)"+using inStep+proof (cases step)+qed auto++lemma matchEqStepD [simp]:+ assumes inStep: "matchEqStep step"+ shows "\<exists> l v pt. step = (Match l True v pt)"+using inStep+proof (cases step)+ case (Match lbl eq v pt)+ thus ?thesis using inStep by (cases eq, auto)+qed auto++lemma notMatchStepD [simp]:+ assumes inStep: "notMatchStep step"+ shows "\<exists> l v pt. step = (Match l False v pt)"+using inStep+proof (cases step)+ case (Match lbl eq v pt)+ thus ?thesis using inStep by (cases eq, auto)+qed auto+ lemma noteStepD [simp]: assumes inStep: "noteStep step" shows "\<exists> l ty pt. step = (Note l ty pt)"@@ -161,24 +266,28 @@ qed auto +subsubsection{* Roles *}+ type_synonym "role" = "rolestep list" -fun recv_before :: "id set \<Rightarrow> role \<Rightarrow> bool"+text{*+ Message variables whose values are semantically used in a+ role step, i.e., sent or matched against, must have been+ instantiated in an earlier step of the role.+*}+fun source_before_use :: "id set \<Rightarrow> role \<Rightarrow> bool" where- "recv_before bound [] = True"-| "recv_before bound (Recv _ msg # xs) = - recv_before (bound \<union> FMV msg) xs"-| "recv_before bound (Note _ _ msg # xs) =- ((\<forall> v. v \<in> FMV msg \<longrightarrow> v \<in> bound) \<and> recv_before bound xs)"-| "recv_before bound (Send _ msg # xs) =- ((\<forall> v. v \<in> FMV msg \<longrightarrow> v \<in> bound) \<and> recv_before bound xs)"+ "source_before_use bound [] = True"+| "source_before_use bound (step # xs) =+ ((used_vars step \<subseteq> bound)+ \<and> source_before_use (bound \<union> sourced_vars step) xs)" locale wf_role = distinct_list R for R :: "role" +- assumes recv_msgVar_first [iff]: "recv_before {} R"+ assumes source_msgVar_first [iff]: "source_before_use {} R" - + subsubsection{* Protocols *} type_synonym proto = "role set"@@ -192,80 +301,44 @@ subsubsection{* Well-Formed Roles *} -lemma recv_before_sent_distinct_Send_FV:- "\<lbrakk> recv_before V (R@ Send lbl pt # R'); - distinct (R @ Send lbl pt # R');- v \<in> FMV pt; v \<notin> V +lemma source_before_use_distinct:+ "\<lbrakk> source_before_use V (R @ step # R');+ distinct (R @ step # R');+ v \<in> used_vars step; v \<notin> V \<rbrakk> \<Longrightarrow>- \<exists> lbl' pt'. Recv lbl' pt' \<in> set R \<and> v \<in> FMV pt'"-proof(induct R arbitrary: V)- case (Cons step R) note IH = this show ?case- proof(cases step)- case (Send lbl pt) thus ?thesis using IH by auto- next- case (Recv lbl pt) thus ?thesis using IH by (auto, fast)+ (\<exists> step'. step' \<in> set R \<and> v \<in> sourced_vars step')"+proof (induct R arbitrary: V)+ case (Cons step R)+ note IH = this show ?case+ proof (cases step)+ case Send thus ?thesis using IH by fastforce next- case (Note lbl ty pt) thus ?thesis using IH by auto- qed-qed simp--lemma recv_before_note_distinct_Note_FV:- "\<lbrakk> recv_before V (R@ Note lbl ty pt # R'); - distinct (R @ Note lbl ty pt # R');- v \<in> FMV pt; v \<notin> V - \<rbrakk> \<Longrightarrow>- \<exists> lbl' pt'. Recv lbl' pt' \<in> set R \<and> v \<in> FMV pt'"-proof(induct R arbitrary: V)- case (Cons Note R) - note IH = this show ?case- proof(cases Note)- case (Send lbl pt) thus ?thesis using IH by auto+ case Recv thus ?thesis using IH by fastforce next- case (Recv lbl pt) thus ?thesis using IH by (auto, fast)+ case Match thus ?thesis using IH by fastforce next- case (Note lbl ty pt) thus ?thesis using IH by auto+ case Note thus ?thesis using IH by fastforce qed-qed simp-+qed auto -lemma (in wf_role) Send_FV:- assumes Send: "Send lbl pt \<in> set R" (is "?send \<in> set R")- and FV: "v \<in> FMV pt"- shows "\<exists> lbl' pt'. listOrd R (Recv lbl' pt') (Send lbl pt) \<and> v \<in> FMV pt'" -using Send +lemma (in wf_role) source_use_ord:+ assumes useR: "ustep \<in> set R"+ and useV: "v \<in> used_vars ustep"+ shows "\<exists> sstep. v \<in> sourced_vars sstep \<and> listOrd R sstep ustep" (is "\<exists> sstep. ?source sstep")+using useR proof -- let ?send = "Send lbl pt"- and "\<exists> lbl' pt'. ?received lbl' pt'" = ?thesis- assume "?send \<in> set R" then- obtain ys zs - where split: "R = ys @ ?send # zs" by (blast dest!: split_list)- moreover have "distinct R" and "recv_before {} R" by auto- ultimately obtain lbl' pt' where "Recv lbl' pt' \<in> set ys" - and "v \<in> FMV pt'"- by (fastforce dest!: recv_before_sent_distinct_Send_FV intro!: FV)- hence "?received lbl' pt'" using split by auto+ assume "ustep \<in> set R"+ then obtain ys zs + where split: "R = ys @ ustep # zs" by (blast dest!: split_list)+ moreover have "distinct R" and "source_before_use {} R" by auto+ ultimately obtain sstep where "v \<in> sourced_vars sstep" and "sstep \<in> set ys"+ by (fastforce dest!: source_before_use_distinct intro!: useV)+ hence "?source sstep" using split by fastforce thus ?thesis by blast qed -lemma (in wf_role) Note_FV:- assumes Note: "Note lbl ty pt \<in> set R" (is "?note \<in> set R")- and FV: "v \<in> FMV pt"- shows "\<exists> lbl' pt'. listOrd R (Recv lbl' pt') (Note lbl ty pt) \<and> v \<in> FMV pt'" -using Note-proof -- let ?send = "Note lbl ty pt"- and "\<exists> lbl' pt'. ?received lbl' pt'" = ?thesis- assume "?note \<in> set R" then- obtain ys zs - where split: "R = ys @ ?note # zs" by (blast dest!: split_list)- moreover have "distinct R" and "recv_before {} R" by auto- ultimately obtain lbl' pt' where "Recv lbl' pt' \<in> set ys" - and "v \<in> FMV pt'"- by (fastforce dest!: recv_before_note_distinct_Note_FV intro!: FV)- hence "?received lbl' pt'" using split by auto- thus ?thesis by blast-qed+subsubsection{* Auxiliary Lemmas *} lemma FV_FAV_conv[iff]: "(a \<in> FAV pt) = ((AVar a) \<in> FV pt)"@@ -283,11 +356,30 @@ by(cases vid) auto qed auto +lemma sourced_imp_FV[dest]:+ "v \<in> sourced_vars st \<Longrightarrow> MVar v \<in> FV_rolestep st"+proof (cases st)+ case (Match lbl eq mv pt)+ assume "v \<in> sourced_vars st"+ thus ?thesis using Match by (cases eq, auto)+qed auto +lemma used_imp_FV[dest]:+ "v \<in> used_vars st \<Longrightarrow> MVar v \<in> FV_rolestep st"+proof (cases st)+ case (Match lbl eq mv pt)+ assume "v \<in> used_vars st"+ thus ?thesis using Match by (cases eq, auto)+qed auto +lemma source_noteD[dest]:+ "\<lbrakk> v \<in> sourced_vars st; noteStep st \<rbrakk> \<Longrightarrow> False"+by (auto dest: noteStepD)++ definition aVars:: "role \<Rightarrow> varid set" where- "aVars role = foldr (\<lambda> st se. (AVar ` FAV (stepPat st)) \<union> se) role {}"+ "aVars role = foldr (\<lambda> st se. (AVar ` FAV_rolestep st) \<union> se) role {}" lemma aVars_singleton[iff]: "AVar a \<notin> aVars []"@@ -296,11 +388,11 @@ lemma aVars_Nil [iff]: "aVars [] = {}" by (auto simp: aVars_def) -lemma aVars_Cons [simp]: "aVars (s#xs) = (AVar ` FAV (stepPat s) \<union> aVars xs)"+lemma aVars_Cons [simp]: "aVars (s#xs) = (AVar ` FAV_rolestep s \<union> aVars xs)" by (auto simp: aVars_def) lemma aVars_FAV_conv:- "(AVar a \<in> aVars R) = (\<exists> s \<in> set R. \<exists> pt. (stepPat s = pt \<and> a \<in> FAV pt))"+ "(AVar a \<in> aVars R) = (\<exists> s \<in> set R. a \<in> FAV_rolestep s)" by (induct R) ( fastforce simp add: aVars_def)+ @@ -347,8 +439,6 @@ )" proof (cases "[s\<leftarrow>xs . \<not> noteStep s]") qed (fastforce simp add: firstComStep_def)+ -- end
data/isabelle/src/ESPLogic/Syntax.thy view
@@ -29,7 +29,7 @@ subsubsection{* General Cryptographic Messages *} -notation (xsymbols) ExecMessage.inv ("[_]\<^isup>-\<^isup>1" [60] 58)+notation (xsymbols) ExecMessage.inv ("[_]\<^sup>-\<^sup>1" [60] 58) subsubsection{* Specification Messages *}@@ -63,6 +63,12 @@ translations "<|x, y, z|>" == "<|x, <|y, z|> |>" "<|x, y|>" == "CONST PTup x y"+++subsubsection{* Protocol Role Steps *}++abbreviation "MatchEq" where "MatchEq lbl \<equiv> Match lbl True"+abbreviation "NotMatch" where "NotMatch lbl \<equiv> Match lbl False" subsubsection{* Execution Messages *}
data/isabelle/src/ESPLogic/Unify.thy view
@@ -205,7 +205,7 @@ (* TODO: Remove hack by using Named_Thms data functor. *) val thm_by_name = Proof_Context.get_thm ctxt; val ss = ctxt - delsimps map thm_by_name ["tid_eq_commute", "reorient_store_eq_store"];+ delsimps map thm_by_name ["tid_eq_commute"]; (* substitute an equality theorem in the given list of 'done' and 'todo' theorems. The changed theorems from 'done' are readded@@ -316,10 +316,15 @@ local fun define_cmd name info f = Outer_Syntax.command name info- (Parse_Spec.name_facts >> (Toplevel.print oo (Toplevel.proof o (note_modified_thmss f))));+ (Parse_Spec.name_facts >> (Toplevel.proof o (note_modified_thmss f)));++ fun define_qualified_cmd name info f =+ Outer_Syntax.command name info+ (Parse.parname -- Parse_Spec.name_facts >> (fn (qualifier, args) =>+ args |> note_modified_thmss (f qualifier) |> Toplevel.proof)); in val _ = - define_cmd @{command_spec "note_prefix_closed"} + define_qualified_cmd @{command_spec "note_prefix_closed"} "prefix close facts and store them under the given name" ESPL_Methods.prefix_close_thms;
data/isabelle/src/ESPLogic/WeakTyping.thy view
@@ -43,7 +43,7 @@ where "approx typing \<equiv> {q. case q of (t,r,s) \<Rightarrow> \<forall> (i,step) \<in> steps t. \<forall> R. roleMap r i = Some R \<longrightarrow>- (\<forall> n. MVar n \<in> FV (stepPat step) \<longrightarrow>+ (\<forall> n. MVar n \<in> FV_rolestep step \<longrightarrow> s (MVar n, i) \<in> typing (R, n) i (t,r,s) )}" @@ -63,7 +63,7 @@ "((t,r,s) \<in> approx typing) = (\<forall> (i,step) \<in> steps t. \<forall> R. roleMap r i = Some R \<longrightarrow>- (\<forall> n. MVar n \<in> FV (stepPat step) \<longrightarrow>+ (\<forall> n. MVar n \<in> FV_rolestep step \<longrightarrow> s (MVar n, i) \<in> typing (R, n) i (t,r,s)))" by (auto simp: approx_def) @@ -72,7 +72,7 @@ "\<And> i step R n. \<lbrakk> (i,step) \<in> steps t; roleMap r i = Some R;- MVar n \<in> FV (stepPat step)+ MVar n \<in> FV_rolestep step \<rbrakk> \<Longrightarrow> s (MV n i) \<in> typing (R, n) i (t,r,s)" shows "(t,r,s) \<in> approx typing"@@ -82,7 +82,7 @@ assumes approx: "(t,r,s) \<in> approx typing" and asms: "(i,step) \<in> steps t" "roleMap r i = Some R"- "MVar n \<in> FV (stepPat step)"+ "MVar n \<in> FV_rolestep step" shows "s (MV n i) \<in> typing (R, n) i (t,r,s)" using approx asms by (auto simp: approx_unfold)@@ -247,23 +247,70 @@ by (rule monoTyp_freeD) auto +lemma (in reachable_thread) step_done_typing:+ assumes typ_rule:+ "\<And> step.+ \<lbrakk> (i, step) \<in> steps t;+ MVar v \<in> FV_rolestep step+ \<rbrakk> \<Longrightarrow> s (MV v i) \<in> typing (done @ todo, v) i (t, r, s)"+ and step_done: "step \<in> set done"+ and step_var: "MVar v \<in> FV_rolestep step"+ shows "s (MV v i) \<in> typing (done @ todo, v) i (t, r, s)"+proof (cases "step \<in> skipped")+ case False+ thus ?thesis using assms by auto+next+ case True+ note inSkipped = this+ then obtain l ty pt+ where noteEq: "(Note l ty pt) = step"+ by(auto dest!: note_in_skipped)+ hence "\<exists> step'. listOrd (done@todo) step' (Note l ty pt) \<and> v \<in> sourced_vars step'"+ using inSkipped step_done step_var+ apply -+ apply(subgoal_tac "v \<in> used_vars step")+ apply(subgoal_tac "Note l ty pt \<in> set (done@todo)")+ apply(drule source_use_ord)+ by auto+ then obtain step'+ where roleBefore: "listOrd (done@todo) step' (Note l ty pt)"+ and varSourced: "v \<in> sourced_vars step'"+ by auto+ have notNote: "\<not> noteStep step'" using varSourced by auto+ have "step' \<in> set done" + using roleBefore step_done noteEq+ apply -+ apply(drule listOrd_append[THEN iffD1])+ apply(case_tac "listOrd done step' (Note l ty pt)")+ apply(fastforce dest: in_set_listOrd1)+ apply(case_tac "listOrd todo step' (Note l ty pt)")+ apply(fastforce dest: in_set_listOrd2 done_notin_todoD)+ apply(case_tac "step' \<in> set done \<and> Note l ty pt \<in> set todo")+ by(auto dest: done_notin_todoD)+ hence "(i, step') \<in> steps t" using notNote by (cases step', auto)+ thus ?thesis+ using varSourced by (auto intro!: typ_rule thread_exists)+qed++ lemma (in reachable_state) reachable_in_approxI: assumes monoTyp: "monoTyp typing"- and recv_case:+ and source_case: "\<And> t r s i done todo skipped m R step n. \<lbrakk> R \<in> P; roleMap r i = Some R; (done, step # todo) \<in> set (splits R);- recvStep step;- MVar n \<in> FV (stepPat step);- \<forall> step' \<in> set done. MVar n \<notin> FV (stepPat step');+ \<not> sendStep step; \<not> noteStep step;+ n \<in> sourced_vars step;+ \<forall> step' \<in> set done. MVar n \<notin> FV_rolestep step'; hint ''completenessCase'' (step, n); (t,r,s) \<in> reachable P; (t,r,s) \<in> approx typing; r i = Some (done, step # todo, skipped);- Some m = inst s i (stepPat step);- m \<in> knows t+ + recvStep step \<Longrightarrow> Some m = inst s i (stepPat step) \<and> m \<in> knows t;+ matchEqStep step \<Longrightarrow> exec_match s i (matchVar step) (stepPat step) \<rbrakk> \<Longrightarrow> s (MV n i) \<in> typing (R, n) i (t @ [Step (i, step)], r(i \<mapsto> (done @ [step], todo, skipped)), s)" shows "(t,r,s) \<in> approx typing"@@ -272,34 +319,33 @@ have "\<lbrakk> r i = Some (done, todo, skipped); (i,step) \<in> steps t;- MVar n \<in> FV (stepPat step)+ MVar n \<in> FV_rolestep step \<rbrakk> \<Longrightarrow> s (MV n i) \<in> typing (done@todo, n) i (t,r,s)" proof(induct arbitrary: i "done" todo step n skipped rule: reachable_induct) case (send t r s i "done" l pt todo skipped m i' done' todo' step n skipped') then interpret th1: - reachable_thread P t r s i "done" "Send l pt # todo" skipped- by unfold_locales auto+ reachable_thread P t r s i "done" "Send l pt # todo" skipped+ by unfold_locales auto from send have "(i', step) \<in> steps t \<or> (i' = i) \<and> step = Send l pt"- (is "?old \<or> ?new") by auto+ (is "?old \<or> ?new") by auto moreover { assume ?old- hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"- using send by (auto split: if_splits)- hence ?case- proof(rule monoTyp_freeD[OF monoTyp])- qed (auto simp: th1.thread_exists)+ hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"+ using send by (auto split: if_splits)+ hence ?case+ proof(rule monoTyp_freeD[OF monoTyp])+ qed (auto simp: th1.thread_exists) } moreover { let ?role = "done @ Send l pt # todo"- note IH = send(2)- assume "?new"- hence "MVar n \<in> FV pt"- using send by auto- then obtain l' msg' - where "(i, Recv l' msg') \<in> steps t" - "MVar n \<in> FV msg'"- by (fastforce dest!: th1.send_step_FV[OF th1.thread_exists])+ note IH = send(2)+ assume "?new"+ moreover hence "n \<in> used_vars step" using send by auto+ ultimately obtain step' + where "(i, step') \<in> steps t" + "n \<in> sourced_vars step'" + by (fastforce dest!: th1.source_step[OF th1.thread_exists]) hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)" by (auto dest: IH[OF th1.thread_exists]) have "done'@todo' = ?role"@@ -313,16 +359,16 @@ next case (recv t r s i "done" l pt todo skipped m i' done' todo' step n skipped') then interpret th1: - reachable_thread P t r s i "done" "Recv l pt # todo" skipped- by unfold_locales auto+ reachable_thread P t r s i "done" "Recv l pt # todo" skipped+ by unfold_locales auto from recv have "(i', step) \<in> steps t \<or> (i' = i) \<and> step = Recv l pt"- (is "?old \<or> ?new") by auto+ (is "?old \<or> ?new") by auto moreover { assume ?old- hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"- using recv by (auto split: if_splits)- hence ?case using `?old`+ hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"+ using recv by (auto split: if_splits)+ hence ?case using `?old` apply - apply(rule monoTyp_freeD[OF monoTyp]) apply(auto simp: th1.thread_exists)@@ -331,86 +377,31 @@ moreover { let ?role = "done @ Recv l pt # todo" note IH = recv(2)- assume "?new"+ assume "?new" hence cur_thread: "?role = done' @ todo'" "i = i'" using recv by auto have ?case- proof(cases "\<exists> step' \<in> set done. MVar n \<in> FV (stepPat step')")+ proof(cases "\<exists> step' \<in> set done. MVar n \<in> FV_rolestep step'") case True with recv- obtain step'' - where FV: "MVar n \<in> FV (stepPat step'')" - and step'': "step'' \<in> set done"+ obtain step'+ where FV: "MVar n \<in> FV_rolestep step'" + and step': "step' \<in> set done" by auto- thus ?thesis - proof(cases "step'' \<in> skipped")- case False- then obtain step' - where FV: "MVar n \<in> FV (stepPat step')" - and notinSkipped: "step' \<notin> skipped"- and step': "(i,step') \<in> steps t"- using FV step''- by(auto simp add: th1.in_steps_conv_done_skipped)- hence "s (MV n i) \<in> typing (?role, n) i (t, r, s)"- by (auto intro!: IH th1.thread_exists)- hence "s (MV n i') \<in> typing (done'@todo', n) i' (t, r, s)"- using cur_thread by simp- thus ?thesis- apply -- apply(rule monoTyp_freeD[OF monoTyp])- apply(auto simp: th1.thread_exists)- done- next- case True- then obtain step'- where FV: "MVar n \<in> FV (stepPat step')" - and inSkipped: "step' \<in> skipped"- and inDone: "step' \<in> set done"- using FV step''- by auto- then obtain l' ty' pt'- where noteEq: "(Note l' ty' pt') = step'"- by(auto dest!: th1.note_in_skipped)-- hence "\<exists> l'' pt''. listOrd ?role (Recv l'' pt'') (Note l' ty' pt') \<and> MVar n \<in> FV (stepPat (Recv l'' pt''))"- using FV inSkipped inDone - apply -- apply(drule FV_FMV_conv[THEN iffD2])- apply(subgoal_tac "Note l' ty' pt' \<in> set ?role")- apply(drule th1.Note_FV)- by (auto dest: FV_FMV_conv[THEN iffD1])- then obtain l'' pt''- where roleBefore: "listOrd ?role (Recv l'' pt'') (Note l' ty' pt')"- and varOfRecv: "MVar n \<in> FV (stepPat (Recv l'' pt''))"- by auto- hence "Recv l'' pt'' \<in> set done" - using inDone noteEq- apply -- apply(drule listOrd_append[THEN iffD1])- apply(case_tac "listOrd done (Recv l'' pt'') (Note l' ty' pt')")- apply(fastforce dest: in_set_listOrd1)- apply(case_tac "listOrd (Recv l pt # todo) (Recv l'' pt'') (Note l' ty' pt')")- apply(fastforce dest: in_set_listOrd2 th1.done_notin_todoD)- apply(case_tac "Recv l'' pt'' \<in> set done \<and> Note l' ty' pt' \<in> set (Recv l pt # todo)")- by(auto dest: th1.done_notin_todoD)- hence "(i, Recv l'' pt'') \<in> steps t" by auto-- hence "s (MV n i) \<in> typing (?role, n) i (t, r, s)"- using varOfRecv by (auto intro!: IH th1.thread_exists)- hence "s (MV n i') \<in> typing (done'@todo', n) i' (t, r, s)"- using cur_thread by simp- thus ?thesis- apply -- apply(rule monoTyp_freeD[OF monoTyp])- apply(auto simp: th1.thread_exists)- done- qed+ hence "s (MV n i) \<in> typing (done'@todo', n) i (t, r, s)"+ using th1.thread_exists cur_thread IH+ by (metis th1.step_done_typing)+ thus ?thesis using `?new`+ apply -+ apply(rule monoTyp_freeD[OF monoTyp])+ apply(auto simp: th1.thread_exists)+ done next case False moreover have "(t, r, s) \<in> approx typing" by (auto simp: approx_unfold dest!: IH roleMap_SomeD)- moreover have "MVar n \<in> FV pt" - using `MVar n \<in> FV (stepPat step)` `?new` by auto+ moreover note `?new`+ moreover note `MVar n \<in> FV_rolestep step` moreover note `Some m = inst s i pt` moreover note `m \<in> knows t` moreover note cur_thread[symmetric]@@ -418,9 +409,9 @@ ultimately show ?thesis apply - apply(clarsimp simp del: fun_upd_apply)- apply(rule recv_case)+ apply(rule source_case) apply(simp_all add: th1.role_in_P th1.roleMap th1.thread_exists - in_set_splits_conv remove_hints)+ in_set_splits_conv remove_hints) done qed }@@ -428,30 +419,31 @@ next case (compr t r s i "done" l ty pt todo skipped m i' done' todo' step n skipped') then interpret th1: - reachable_thread P t r s i "done" "Note l ty pt # todo" skipped- by unfold_locales auto+ reachable_thread P t r s i "done" "Note l ty pt # todo" skipped+ by unfold_locales auto from compr have "(i', step) \<in> steps t \<or> (i' = i) \<and> step = Note l ty pt"- (is "?old \<or> ?new") by auto+ (is "?old \<or> ?new") by auto moreover { assume ?old- hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"- using compr by (auto split: if_splits)- hence ?case- proof(rule monoTyp_freeD[OF monoTyp])- qed (auto simp: th1.thread_exists)+ hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"+ using compr by (auto split: if_splits)+ hence ?case+ proof(rule monoTyp_freeD[OF monoTyp])+ qed (auto simp: th1.thread_exists) } moreover { let ?role = "done @ Note l ty pt # todo"- note IH = compr(2)- assume "?new"- hence "MVar n \<in> FV pt"+ note IH = compr(2)+ assume "?new"+ hence "n \<in> used_vars (Note l ty pt)" using compr by auto- then obtain l' msg' - where "(i, Recv l' msg') \<in> steps t" - "MVar n \<in> FV msg'"- by (fastforce dest!: th1.note_step_FV[OF th1.thread_exists])- hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)"+ then obtain step' + where "(i, step') \<in> steps t" + "n \<in> sourced_vars step'"+ by (fastforce dest!: th1.source_step[OF th1.thread_exists])+ moreover hence "MVar n \<in> FV_rolestep step'" by auto+ ultimately have typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)" by (auto dest: IH[OF th1.thread_exists]) have "done'@todo' = ?role" using compr `?new` by auto@@ -464,15 +456,110 @@ next case (skip t r s i "done" l ty pt todo skipped i' done' todo' step n skipped') then interpret th1: - reachable_thread P t r s i "done" "Note l ty pt # todo" skipped- by unfold_locales auto+ reachable_thread P t r s i "done" "Note l ty pt # todo" skipped+ by unfold_locales auto from skip have "(i', step) \<in> steps t" (is "?old") by auto- hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"- using skip by (auto split: if_splits)- thus ?case- proof(rule monoTyp_freeD[OF monoTyp])- qed (auto simp: th1.thread_exists)+ hence "s(MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"+ using skip by (auto split: if_splits)+ thus ?case+ proof(rule monoTyp_freeD[OF monoTyp])+ qed (auto simp: th1.thread_exists)+ next+ case (match t r s i "done" l eq mv pt todo skipped i' done' todo' step n skipped') then+ interpret th1:+ reachable_thread P t r s i "done" "Match l eq mv pt # todo" skipped+ by unfold_locales auto+ from match+ have "(i', step) \<in> steps t \<or> (i' = i) \<and> step = Match l eq mv pt"+ (is "?old \<or> ?new") by auto+ moreover+ { assume ?old+ hence "s (MV n i') \<in> typing (done'@todo', n) i' (t,r,s)"+ using match by (auto split: if_splits)+ hence ?case+ proof (rule monoTyp_freeD[OF monoTyp])+ qed (auto simp: th1.thread_exists)+ }+ moreover+ { let ?role = "done @ Match l eq mv pt # todo"+ note IH = match(2)+ assume "?new"+ have ?case proof (cases eq)+ case True+ note eq_case = this+ hence cur_thread: "?role = done' @ todo'" "i = i'" and+ match_FV: "n \<in> used_vars step \<or> n \<in> sourced_vars step"+ using `?new` match by auto+ from match_FV show ?thesis proof+ assume "n \<in> used_vars step"+ with `?new` obtain step'+ where "(i, step') \<in> steps t"+ "n \<in> sourced_vars step'"+ by (fastforce dest!: th1.source_step[OF th1.thread_exists])+ hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)"+ by (auto dest: IH[OF th1.thread_exists])+ thus ?thesis using `?new` cur_thread(1)+ apply -+ apply(rule monoTyp_freeD[OF monoTyp])+ by (auto intro!: typed simp: th1.thread_exists)+ next+ assume "n \<in> sourced_vars step"+ thus ?thesis+ proof (cases "\<exists> step' \<in> set done. MVar n \<in> FV_rolestep step'")+ case True+ with match+ obtain step'+ where FV: "MVar n \<in> FV_rolestep step'"+ and step': "step' \<in> set done"+ by auto+ hence "s (MV n i) \<in> typing (done'@todo', n) i (t, r, s)"+ using th1.thread_exists cur_thread IH+ by (metis th1.step_done_typing)+ thus ?thesis using `?new`+ apply -+ apply(rule monoTyp_freeD[OF monoTyp])+ apply(auto simp: th1.thread_exists)+ done+ next+ case False+ moreover have "(t, r, s) \<in> approx typing"+ by (auto simp: approx_unfold dest!: IH roleMap_SomeD)+ moreover note `?new`+ moreover note `n \<in> sourced_vars step`+ moreover have "exec_match s i mv pt"+ using match eq_case by simp+ moreover note cur_thread[symmetric]++ ultimately show ?thesis+ apply -+ apply(clarsimp simp del: fun_upd_apply)+ apply(rule source_case)+ apply(simp_all add: th1.role_in_P th1.roleMap th1.thread_exists+ in_set_splits_conv remove_hints)+ done+ qed+ qed++ next+ case False note notMatch = this+ moreover note `?new`+ moreover hence "n \<in> used_vars step" using match notMatch by auto+ ultimately obtain step'+ where "(i, step') \<in> steps t" + "n \<in> sourced_vars step'" + by (fastforce dest!: th1.source_step[OF th1.thread_exists])+ hence typed: "s (MV n i) \<in> typing (?role, n) i (t, r, s)"+ by (auto dest: IH[OF th1.thread_exists])+ have "done'@todo' = ?role" using match `?new` by auto+ thus ?thesis using `?new`+ apply -+ apply(rule monoTyp_freeD[OF monoTyp])+ by (auto intro!: typed simp: th1.thread_exists)+ qed+ }+ ultimately show ?case by fastforce+ qed (auto intro: monoTyp_appendD[OF monoTyp]) } thus ?thesis unfolding approx_unfold by(auto elim!: roleMap_SomeE)@@ -487,37 +574,46 @@ *} lemma (in reachable_state) reachable_in_approxI_ext: assumes monoTyp: "monoTyp typing"- and recv_case:+ and source_case: "\<And> t r s i done todo skipped m R step n. \<lbrakk> R \<in> P; roleMap r i = Some R; (done, step # todo) \<in> set (splits R);- recvStep step;- MVar n \<in> foldl (\<lambda> fv step'. fv - FV (stepPat step')) (FV (stepPat step)) done;+ \<not> sendStep step; \<not> noteStep step;+ n \<in> foldl (\<lambda> fv step'. fv - sourced_vars step') (sourced_vars step) done; hint ''completenessCase'' (step, n); (t,r,s) \<in> reachable P; (t,r,s) \<in> approx typing;- r i = Some (done, step # todo ,skipped);- Some m = inst s i (stepPat step);- m \<in> knows t- \<rbrakk> \<Longrightarrow> + r i = Some (done, step # todo, skipped);+ \<forall> st'. st' \<in> set done \<longrightarrow> \<not> noteStep st' \<longrightarrow> (i, st') \<in> steps t;++ recvStep step \<Longrightarrow> Some m = inst s i (stepPat step) \<and> m \<in> knows t;+ matchEqStep step \<Longrightarrow> exec_match s i (matchVar step) (stepPat step)+ \<rbrakk> \<Longrightarrow> s (MV n i) \<in> typing (R, n) i ( t @ [Step (i, step)], r(i \<mapsto> (done @ [step], todo, skipped)), s)" shows "(t,r,s) \<in> approx typing" proof(induct rule: reachable_in_approxI[OF monoTyp]) case (1 t r s i "done" todo skipped m R step n) { fix v V assume "v \<in> V"- and "\<forall>step'\<in>set done. v \<notin> FV (stepPat step')"- hence "v \<in> foldl (\<lambda> fv step'. fv - FV (stepPat step')) V done"- by (induct "done" arbitrary: V) auto+ and "\<forall>step'\<in>set done. MVar v \<notin> FV_rolestep step'"+ hence "v \<in> foldl (\<lambda> fv step'. fv - sourced_vars step') V done"+ by (induct "done" arbitrary: V) (auto intro!: sourced_imp_FV) }- hence "MVar n \<in> foldl (\<lambda> fv step'. fv - FV (stepPat step')) (FV (stepPat step)) done"- using 1 by auto- thus ?case using 1+ hence "n \<in> foldl (\<lambda> fv step'. fv - sourced_vars step') (sourced_vars step) done"+ using 1 by auto+ moreover {+ interpret thread: reachable_thread P t r s i "done" "(step # todo)" skipped+ using 1 by unfold_locales auto+ fix st'+ assume "st' \<in> set done" and "\<not> noteStep st'"+ hence "(i, st') \<in> steps t" by (auto intro: thread.not_note_done_in_steps)+ }+ ultimately show ?case using 1 apply(subgoal_tac "True") apply(clarsimp)- apply(rule recv_case)+ apply(rule source_case) by(assumption | simp add: remove_hints)+ qed @@ -875,12 +971,13 @@ hint ''case_name'' ''fake'' ) \<or> (\<exists> R \<in> P. \<exists> i. roleMap r i = Some R \<and> - (\<exists> step \<in> set R. + (\<exists> step \<in> set R. (sendStep step \<or> noteStep step) \<and> (\<exists> m. Some m = inst s i (stepPat step) \<and> decrChain [] t {St (i, step)} m m') \<and> prefixClose s t R step i \<and> (\<forall> v \<in> FV (stepPat step). \<forall> n. v = MVar n \<longrightarrow> - s (MVar n, i) \<in> typing (R, n) i (t,r,s)) \<and>+ s (MVar n, i) \<in> typing (R, n) i (t,r,s) \<and>+ hint ''case_name_subst'' n) \<and> hint ''decrChainFrom'' (i, R, step) \<and> hint ''case_name'' ''decrypt'' )
data/isabelle/src/ESPLogic/espl_definitions.ML view
@@ -21,7 +21,7 @@ (* Additional Utilities *) val unnamed_caseN: string - datatype steptyp = Recv | Send | Note of term+ datatype steptyp = Recv | Send | Note of term | Match of bool * term val mk_rolestep: steptyp * term * term -> term val dest_rolestep: term -> steptyp * term * term val dest_role: term -> (steptyp * term * term) list@@ -76,15 +76,21 @@ ******************************************************************************) -datatype steptyp = Recv | Send | Note of term;+datatype steptyp = Recv | Send | Note of term | Match of bool * term; fun mk_rolestep (Send, lbl, msg) = @{const Send} $ lbl $ msg | mk_rolestep (Recv, lbl, msg) = @{const Recv} $ lbl $ msg | mk_rolestep (Note nTy, lbl, msg) = @{const Note} $ lbl $ nTy $ msg+ | mk_rolestep (Match (true, mv), lbl, msg) = @{const Match} $ lbl $ @{const True} $ mv $ msg+ | mk_rolestep (Match (false, mv), lbl, msg) = @{const Match} $ lbl $ @{const False} $ mv $ msg fun dest_rolestep (Const (@{const_name Send},_) $ lbl $ msg) = (Send, lbl, msg) | dest_rolestep (Const (@{const_name Recv},_) $ lbl $ msg) = (Recv, lbl, msg) | dest_rolestep (Const (@{const_name Note},_) $ lbl $ nTy $ msg) = (Note nTy, lbl, msg)+ | dest_rolestep (Const (@{const_name Match},_) $ lbl $ Const (@{const_name True},_) $ mv $ msg) =+ (Match (true, mv), lbl, msg)+ | dest_rolestep (Const (@{const_name Match},_) $ lbl $ Const (@{const_name False},_) $ mv $ msg) =+ (Match (false, mv), lbl, msg) | dest_rolestep t = raise TERM ("dest_rolestep", [t]) val dest_role = map dest_rolestep o HOLogic.dest_list@@ -178,14 +184,25 @@ val ss_full = lthy addsimps [step_def, msg_def] |> simpset_of; val sendStep_t = @{const sendStep} $ step_const;+ val recvStep_t = @{const recvStep} $ step_const;+ val matchStep_t = @{const matchStep} $ step_const;+ val matchEqStep_t = @{const matchEqStep} $ step_const;+ val notMatchStep_t = @{const notMatchStep} $ step_const; val noteStep_t = @{const noteStep} $ step_const; val stepPat_t = @{const stepPat} $ step_const;+ val matchVar_t = @{const matchVar} $ step_const; val noteType_t = @{const noteType} $ step_const; + val sourced_vars_t = @{const sourced_vars} $ step_const;+ val used_vars_t = @{const used_vars} $ step_const;+ val FV_rolestep_t = @{const FV_rolestep} $ step_const;+ val FAV_rolestep_t = @{const FAV_rolestep} $ step_const;+ val inst_t = @{term "inst s i"} $ msg_const;- val FV_t = @{term "FV"} $ msg_const;- val FMV_t = @{term "FMV"} $ msg_const;- val FAV_t = @{term "FAV"} $ msg_const;+ val any_inst_t = @{term "any_inst s i"} $ msg_const;+ val FV_t = @{const FV} $ msg_const;+ val FMV_t = @{const FMV} $ msg_const;+ val FAV_t = @{const FAV} $ msg_const; in lthy (* unfold theorems *)@@ -193,13 +210,23 @@ (* step expansions *) |> #2 o notes_expansion ss_step [ (mk_binding "sendStep_conv", [([sendStep_t],[att_iff_add])]) + , (mk_binding "recvStep_conv", [([recvStep_t],[att_iff_add])]) + , (mk_binding "matchStep_conv", [([matchStep_t],[att_iff_add])]) + , (mk_binding "matchEqStep_conv", [([matchEqStep_t],[att_iff_add])])+ , (mk_binding "notMatchStep_conv", [([notMatchStep_t],[att_iff_add])]) , (mk_binding "noteStep_conv", [([noteStep_t],[att_iff_add])]) , (mk_binding "stepPat_conv", [([stepPat_t],[att_simp_add])]) + , (mk_binding "matchVar_conv", [([matchVar_t],[att_simp_add])]) , (mk_binding "noteType_conv", [([noteType_t],[att_simp_add])])+ , (mk_binding "sourced_vars_conv", [([sourced_vars_t],[att_simp_add])])+ , (mk_binding "used_vars_conv", [([used_vars_t],[att_simp_add])])+ , (mk_binding "FV_rolestep_conv", [([FV_rolestep_t],[att_simp_add])])+ , (mk_binding "FAV_rolestep_conv", [([FAV_rolestep_t],[att_simp_add])]) ] (* full expansions *) |> notes_expansion ss_full [ (mk_binding "inst_conv", [([inst_t], [att_simp_add])])+ , (mk_binding "any_inst_conv", [([any_inst_t], [att_simp_add])]) , (mk_binding "FV_conv", [([FV_t], [att_simp_add])]) , (mk_binding "FMV_conv", [([FMV_t], [att_simp_add])]) , (mk_binding "FAV_conv", [([FAV_t], [att_simp_add])])@@ -260,13 +287,14 @@ val ss_role = ctxt addsimps [role_def, @{thm prefixClose_def}] |> simpset_of; val ss_full = ctxt addsimps ([role_def, @{thm prefixClose_def}] @ pat_defs @ step_defs @- @{thms wf_role_def distinct_list_def wf_role_axioms_def}) |> simpset_of+ @{thms wf_role_def distinct_list_def wf_role_axioms_def}) |> simpset_of; - fun simp_tactic {prems, context} = FIRSTGOAL (Simplifier.full_simp_tac (put_simpset ss_full context));+ fun simp_tactic {prems=_, context} = FIRSTGOAL (Simplifier.full_simp_tac (put_simpset ss_full context)); val distinct_steps_thms = prove_distinctness ctxt simp_tactic step_consts; - val ss_prefixClose = ctxt addsimps ([role_def, @{thm prefixClose_def}] @ distinct_steps_thms) |> simpset_of;+ val ss_prefixClose = ctxt addsimps ([role_def, @{thm prefixClose_def}] @ distinct_steps_thms @+ @{thms exec_match_def}) |> simpset_of; val wf_goal = HOLogic.mk_Trueprop (@{const wf_role} $ role_const); @@ -489,7 +517,16 @@ #1 o dest_msg_eq; val fixed_msg = msg_name o #2 o dest_msg_eq; - val subst = try hd (ESPL_Utils.gather_props subst_var prems);+ (* We only use substitutions which are enabled by the corresponding hint.+ This excludes equalities introduced by the MatchEq rule from the name+ computation.+ *)+ val naming_substs = map HOLogic.dest_string (Hints.gather_by_name "case_name_subst" prems);+ fun is_naming_subst v1 = exists (fn v2 => v1 = v2) naming_substs;++ val subst = prems |> ESPL_Utils.gather_props subst_var+ |> filter is_naming_subst+ |> try hd; val fixed = try hd (ESPL_Utils.gather_props fixed_msg prems); in if is_none subst andalso is_none fixed then @@ -761,7 +798,7 @@ val mono_typ_th = (@{const monoTyp} $ typ_const) |> HOLogic.mk_Trueprop |> Thm.cterm_of (Proof_Context.theory_of ctxt)- |> (fn ct => Goal.prove_internal [] ct+ |> (fn ct => Goal.prove_internal ctxt [] ct (K autom_tac) ); in
data/isabelle/src/ESPLogic/espl_methods.ML view
@@ -24,7 +24,7 @@ ((bool * term) * thm option) * (Context.generic * Token.T list) (* "prefix_close" proof state transformation *)- val prefix_close_thms: Proof.context -> thm list -> thm list+ val prefix_close_thms: string -> Proof.context -> thm list -> thm list val prefix_close_cmd: Proof.state -> Proof.state val note_prefix_closed_cmd: Proof.state -> Proof.state @@ -84,7 +84,8 @@ end; (* The tactic underlying the "sources" proof method *)-fun sources_tac ctxt minimal msg_t opt_raw_rule facts =+fun sources_tac _ _ _ _ [] = (fn _ => fn _ => Seq.empty) (* fail when no facts are chained in *)+ | sources_tac ctxt minimal msg_t opt_raw_rule facts = let val thy = Proof_Context.theory_of ctxt; val cert = Thm.cterm_of thy;@@ -108,7 +109,7 @@ val predOrd_elim_ths = @{thms in_knows_predOrd1 in_knows_predOrd2} val knows_thm = - Goal.prove_internal [] knows_ct + Goal.prove_internal ctxt [] knows_ct (fn facts' => ALLGOALS (Method.insert_tac (facts' @ facts)) THEN (ALLGOALS (assume_tac ORELSE' eresolve_tac predOrd_elim_ths)@@ -178,11 +179,11 @@ (* NOTE: this works only correctly in the context of a reachable_state locale as the theorem ext_prefixClose is dependent on this locale. *)-fun prefix_close_thms ctxt facts = +fun prefix_close_thms qualifier ctxt facts = let- val prefixClose_th = Proof_Context.get_thm ctxt "ext_prefixClose";+ val prefixClose_th = Proof_Context.get_thm ctxt (Long_Name.qualify qualifier "ext_prefixClose"); fun close step roleMap = [step, roleMap] MRS prefixClose_th;- val expand = Simplifier.simplify ctxt;+ val expand = Simplifier.simplify (ctxt addsimps @{thms exec_match_def}); val distinct_prop = distinct (Thm.eq_thm); (* fun new_fact th = forall (not_equal (Thm.prop_of th) o Thm.prop_of) facts; *)@@ -204,7 +205,7 @@ fun note_prefix_closed_cmd state = let val ctxt = Proof.context_of state; val facts = Proof.the_facts state;- val facts' = facts @ prefix_close_thms ctxt facts+ val facts' = facts @ prefix_close_thms "" ctxt facts in Proof.set_facts facts' state end (* A proof state transformation implementing prefix closing of@@ -215,14 +216,14 @@ val using = state |> Proof.goal |> (fn {context = ctxt, facts=using, goal=_} => - prefix_close_thms ctxt using)+ prefix_close_thms "" ctxt using) in Proof.using [[(using,[])]] state end; (* registering the prefix_close command *) val _ = Outer_Syntax.command @{command_spec "prefix_close"} "prefix close facts being used"- (Scan.succeed (Toplevel.print o (Toplevel.proof prefix_close_cmd)));+ (Scan.succeed (Toplevel.proof prefix_close_cmd)); (******************************************************************************@@ -265,7 +266,7 @@ *) fun completeness_cases_attrib ctxt th = let- val ss = Context.proof_of ctxt addsimps @{thms finite_setdiff_compute};+ val ss = Context.proof_of ctxt addsimps @{thms finite_setdiff_compute exec_match_def}; fun add_case_info th = th |> Rule_Cases.add_consumes 0 |> Rule_Cases.name (completeness_case_names th)
data/isabelle/src/ESPLogic/espl_utils.ML view
@@ -150,7 +150,7 @@ inst is a positional instantiation. *) fun add_simple_locale b loc_name inst thy =- Expression.add_locale I b (Binding.empty)+ Expression.add_locale b (Binding.empty) ( [ ( Locale.intern thy loc_name , ( ("",false) , Expression.Positional inst
− data/isabelle/src/isar-keywords.el
@@ -1,704 +0,0 @@-;;-;; Keyword classification tables for Isabelle/Isar.-;; Generated from HOLCF + HOL-BNF + HOL-Boogie + HOL-Library + HOL-Nominal + HOL-Statespace + HOL-SPARK + HOL-TPTP + HOL-Import.-;; *** DO NOT EDIT *** DO NOT EDIT *** DO NOT EDIT ***-;;--(defconst isar-keywords-major- '("\\."- "\\.\\."- "Isabelle\\.command"- "ML"- "ML_command"- "ML_file"- "ML_prf"- "ML_val"- "ProofGeneral\\.inform_file_processed"- "ProofGeneral\\.inform_file_retracted"- "ProofGeneral\\.kill_proof"- "ProofGeneral\\.pr"- "ProofGeneral\\.process_pgip"- "ProofGeneral\\.restart"- "ProofGeneral\\.undo"- "abbreviation"- "also"- "apply"- "apply_end"- "arities"- "assume"- "atom_decl"- "attribute_setup"- "ax_specification"- "axiomatization"- "axioms"- "back"- "bnf_def"- "boogie_end"- "boogie_open"- "boogie_status"- "boogie_vc"- "bundle"- "by"- "cannot_undo"- "case"- "cd"- "chapter"- "class"- "class_deps"- "classes"- "classrel"- "codata"- "code_abort"- "code_class"- "code_const"- "code_datatype"- "code_deps"- "code_include"- "code_instance"- "code_modulename"- "code_monad"- "code_pred"- "code_reflect"- "code_reserved"- "code_thms"- "code_type"- "coinductive"- "coinductive_set"- "commit"- "consts"- "context"- "corollary"- "cpodef"- "data"- "datatype"- "declaration"- "declare"- "def"- "default_sort"- "defer"- "defer_recdef"- "definition"- "defs"- "disable_pr"- "display_drafts"- "domain"- "domain_isomorphism"- "domaindef"- "done"- "enable_pr"- "end"- "enriched_type"- "equivariance"- "exit"- "export_code"- "extract"- "extract_type"- "finally"- "find_consts"- "find_theorems"- "find_unused_assms"- "fix"- "fixrec"- "from"- "full_prf"- "fun"- "function"- "guess"- "have"- "header"- "help"- "hence"- "hide_class"- "hide_const"- "hide_fact"- "hide_type"- "import_const_map"- "import_file"- "import_tptp"- "import_type_map"- "include"- "including"- "inductive"- "inductive_cases"- "inductive_set"- "inductive_simps"- "init_toplevel"- "instance"- "instantiation"- "interpret"- "interpretation"- "judgment"- "kill"- "kill_thy"- "lemma"- "lemmas"- "let"- "lift_definition"- "linear_undo"- "local_setup"- "locale"- "locale_deps"- "method_setup"- "moreover"- "next"- "nitpick"- "nitpick_params"- "no_notation"- "no_syntax"- "no_translations"- "no_type_notation"- "nominal_datatype"- "nominal_inductive"- "nominal_inductive2"- "nominal_primrec"- "nonterminal"- "notation"- "note"- "note_cyclic"- "note_prefix_closed"- "note_unified"- "notepad"- "obtain"- "oops"- "oracle"- "overloading"- "parse_ast_translation"- "parse_translation"- "partial_function"- "pcpodef"- "pr"- "prefer"- "prefix_close"- "presume"- "pretty_setmargin"- "prf"- "primrec"- "print_abbrevs"- "print_antiquotations"- "print_ast_translation"- "print_attributes"- "print_binds"- "print_bnfs"- "print_bundles"- "print_cases"- "print_claset"- "print_classes"- "print_codeproc"- "print_codesetup"- "print_coercion_maps"- "print_coercions"- "print_commands"- "print_configs"- "print_context"- "print_dependencies"- "print_drafts"- "print_facts"- "print_induct_rules"- "print_inductives"- "print_interps"- "print_locale"- "print_locales"- "print_methods"- "print_orders"- "print_quotconsts"- "print_quotients"- "print_quotientsQ3"- "print_quotmaps"- "print_quotmapsQ3"- "print_rules"- "print_simpset"- "print_statement"- "print_syntax"- "print_theorems"- "print_theory"- "print_trans_rules"- "print_translation"- "proof"- "prop"- "protocol"- "pwd"- "qed"- "quickcheck"- "quickcheck_generator"- "quickcheck_params"- "quit"- "quotient_definition"- "quotient_type"- "realizability"- "realizers"- "recdef"- "recdef_tc"- "record"- "refute"- "refute_params"- "remove_thy"- "rep_datatype"- "role"- "schematic_corollary"- "schematic_lemma"- "schematic_theorem"- "sect"- "section"- "setup"- "setup_lifting"- "show"- "simproc_setup"- "sledgehammer"- "sledgehammer_params"- "smt_status"- "solve_direct"- "sorry"- "spark_end"- "spark_open"- "spark_open_siv"- "spark_open_vcg"- "spark_proof_functions"- "spark_status"- "spark_types"- "spark_vc"- "specification"- "statespace"- "subclass"- "sublocale"- "subsect"- "subsection"- "subsubsect"- "subsubsection"- "syntax"- "syntax_declaration"- "term"- "termination"- "text"- "text_raw"- "then"- "theorem"- "theorems"- "theory"- "thm"- "thm_deps"- "thus"- "thy_deps"- "translations"- "try"- "try0"- "txt"- "txt_raw"- "typ"- "type_invariant"- "type_notation"- "type_synonym"- "typed_print_translation"- "typedecl"- "typedef"- "ultimately"- "undo"- "undos_proof"- "unfolding"- "unused_thms"- "use"- "use_thy"- "using"- "value"- "values"- "welcome"- "with"- "wrap_data"- "write"- "{"- "}"))--(defconst isar-keywords-minor- '("advanced"- "and"- "assumes"- "attach"- "avoids"- "begin"- "binder"- "checking"- "congs"- "constrains"- "datatypes"- "defaults"- "defines"- "file"- "fixes"- "for"- "functions"- "hints"- "identifier"- "if"- "imports"- "in"- "includes"- "infix"- "infixl"- "infixr"- "is"- "keywords"- "lazy"- "module_name"- "monos"- "morphisms"- "no_dests"- "notes"- "obtains"- "open"- "output"- "overloaded"- "permissive"- "pervasive"- "rep_compat"- "shows"- "structure"- "unchecked"- "unsafe"- "uses"- "where"))--(defconst isar-keywords-control- '("Isabelle\\.command"- "ProofGeneral\\.inform_file_processed"- "ProofGeneral\\.inform_file_retracted"- "ProofGeneral\\.kill_proof"- "ProofGeneral\\.process_pgip"- "ProofGeneral\\.restart"- "ProofGeneral\\.undo"- "cannot_undo"- "cd"- "commit"- "disable_pr"- "enable_pr"- "exit"- "init_toplevel"- "kill"- "kill_thy"- "linear_undo"- "quit"- "remove_thy"- "undo"- "undos_proof"- "use_thy"))--(defconst isar-keywords-diag- '("ML_command"- "ML_val"- "ProofGeneral\\.pr"- "boogie_status"- "class_deps"- "code_deps"- "code_thms"- "display_drafts"- "export_code"- "find_consts"- "find_theorems"- "find_unused_assms"- "full_prf"- "header"- "help"- "locale_deps"- "nitpick"- "pr"- "pretty_setmargin"- "prf"- "print_abbrevs"- "print_antiquotations"- "print_attributes"- "print_binds"- "print_bnfs"- "print_bundles"- "print_cases"- "print_claset"- "print_classes"- "print_codeproc"- "print_codesetup"- "print_coercion_maps"- "print_coercions"- "print_commands"- "print_configs"- "print_context"- "print_dependencies"- "print_drafts"- "print_facts"- "print_induct_rules"- "print_inductives"- "print_interps"- "print_locale"- "print_locales"- "print_methods"- "print_orders"- "print_quotconsts"- "print_quotients"- "print_quotientsQ3"- "print_quotmaps"- "print_quotmapsQ3"- "print_rules"- "print_simpset"- "print_statement"- "print_syntax"- "print_theorems"- "print_theory"- "print_trans_rules"- "prop"- "pwd"- "quickcheck"- "refute"- "sledgehammer"- "smt_status"- "solve_direct"- "spark_status"- "term"- "thm"- "thm_deps"- "thy_deps"- "try"- "try0"- "typ"- "unused_thms"- "value"- "values"- "welcome"))--(defconst isar-keywords-theory-begin- '("theory"))--(defconst isar-keywords-theory-switch- '())--(defconst isar-keywords-theory-end- '("end"))--(defconst isar-keywords-theory-heading- '("chapter"- "section"- "subsection"- "subsubsection"))--(defconst isar-keywords-theory-decl- '("ML"- "ML_file"- "abbreviation"- "arities"- "atom_decl"- "attribute_setup"- "axiomatization"- "axioms"- "boogie_end"- "boogie_open"- "bundle"- "class"- "classes"- "classrel"- "codata"- "code_abort"- "code_class"- "code_const"- "code_datatype"- "code_include"- "code_instance"- "code_modulename"- "code_monad"- "code_reflect"- "code_reserved"- "code_type"- "coinductive"- "coinductive_set"- "consts"- "context"- "data"- "datatype"- "declaration"- "declare"- "default_sort"- "defer_recdef"- "definition"- "defs"- "domain"- "domain_isomorphism"- "domaindef"- "equivariance"- "extract"- "extract_type"- "fixrec"- "fun"- "hide_class"- "hide_const"- "hide_fact"- "hide_type"- "import_const_map"- "import_file"- "import_tptp"- "import_type_map"- "inductive"- "inductive_set"- "instantiation"- "judgment"- "lemmas"- "local_setup"- "locale"- "method_setup"- "nitpick_params"- "no_notation"- "no_syntax"- "no_translations"- "no_type_notation"- "nominal_datatype"- "nonterminal"- "notation"- "notepad"- "oracle"- "overloading"- "parse_ast_translation"- "parse_translation"- "partial_function"- "primrec"- "print_ast_translation"- "print_translation"- "protocol"- "quickcheck_generator"- "quickcheck_params"- "realizability"- "realizers"- "recdef"- "record"- "refute_params"- "role"- "setup"- "setup_lifting"- "simproc_setup"- "sledgehammer_params"- "spark_end"- "spark_open"- "spark_open_siv"- "spark_open_vcg"- "spark_proof_functions"- "spark_types"- "statespace"- "syntax"- "syntax_declaration"- "text"- "text_raw"- "theorems"- "translations"- "type_invariant"- "type_notation"- "type_synonym"- "typed_print_translation"- "typedecl"- "use"))--(defconst isar-keywords-theory-script- '("inductive_cases"- "inductive_simps"))--(defconst isar-keywords-theory-goal- '("ax_specification"- "bnf_def"- "boogie_vc"- "code_pred"- "corollary"- "cpodef"- "enriched_type"- "function"- "instance"- "interpretation"- "lemma"- "lift_definition"- "nominal_inductive"- "nominal_inductive2"- "nominal_primrec"- "pcpodef"- "quotient_definition"- "quotient_type"- "recdef_tc"- "rep_datatype"- "schematic_corollary"- "schematic_lemma"- "schematic_theorem"- "spark_vc"- "specification"- "subclass"- "sublocale"- "termination"- "theorem"- "typedef"- "wrap_data"))--(defconst isar-keywords-qed- '("\\."- "\\.\\."- "by"- "done"- "sorry"))--(defconst isar-keywords-qed-block- '("qed"))--(defconst isar-keywords-qed-global- '("oops"))--(defconst isar-keywords-proof-heading- '("sect"- "subsect"- "subsubsect"))--(defconst isar-keywords-proof-goal- '("have"- "hence"- "interpret"))--(defconst isar-keywords-proof-block- '("next"- "proof"))--(defconst isar-keywords-proof-open- '("{"))--(defconst isar-keywords-proof-close- '("}"))--(defconst isar-keywords-proof-chain- '("finally"- "from"- "then"- "ultimately"- "with"))--(defconst isar-keywords-proof-decl- '("ML_prf"- "also"- "include"- "including"- "let"- "moreover"- "note"- "note_cyclic"- "note_prefix_closed"- "note_unified"- "txt"- "txt_raw"- "unfolding"- "using"- "write"))--(defconst isar-keywords-proof-asm- '("assume"- "case"- "def"- "fix"- "presume"))--(defconst isar-keywords-proof-asm-goal- '("guess"- "obtain"- "show"- "thus"))--(defconst isar-keywords-proof-script- '("apply"- "apply_end"- "back"- "defer"- "prefer"))--(provide 'isar-keywords)
+ dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs view
@@ -0,0 +1,623 @@+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "src/Scyther/Theory/Lexer.x" #-}++-- Ignore the slew of warnings from definitions generated by Alex.+-- NOTE: you should disable this line when working on this module to make sure+-- that you don't miss important warnings.+{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++module Scyther.Theory.Lexer where++import Control.Applicative+import Control.Monad+import Data.Word (Word8)+import qualified Codec.Binary.UTF8.String as UTF8++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\xbb\x00\x00\x00\xa7\x01\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x00\x00\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x7e\x05\x00\x00\x00\x00\x00\x00\xef\x05\x00\x00\x7e\xff\xff\xff\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x6f\x06\x00\x00\xca\xff\xff\xff\xad\xff\xff\xff\x82\xff\xff\xff\x5f\xff\xff\xff\xaf\x06\x00\x00\x58\x07\x00\x00\x18\x07\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\xe4\xff\xff\xff\x18\x08\x00\x00\xd8\x07\x00\x00\x00\x00\x00\x00\xd8\x08\x00\x00\x98\x08\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x8e\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xff\xff\x00\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\xff\xff\x00\x00\x00\x00\xe9\xff\xff\xff\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x0a\x00\x00\xc1\x0a\x00\x00\x24\x0b\x00\x00\x87\x0b\x00\x00\xea\x0b\x00\x00\x4d\x0c\x00\x00\xb0\x0c\x00\x00\x13\x0d\x00\x00\x76\x0d\x00\x00\xd9\x0d\x00\x00\x3c\x0e\x00\x00\x9f\x0e\x00\x00\x02\x0f\x00\x00\x65\x0f\x00\x00\xc8\x0f\x00\x00\x2b\x10\x00\x00\x8e\x10\x00\x00\xf1\x10\x00\x00\x54\x11\x00\x00\xb7\x11\x00\x00\x1a\x12\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x1b\x00\x19\x00\x63\x00\x4c\x00\x43\x00\x42\x00\x38\x00\x37\x00\x36\x00\x2d\x00\x39\x00\x2f\x00\x2b\x00\x30\x00\x2c\x00\x31\x00\x2a\x00\x00\x00\x28\x00\x5a\x00\x4e\x00\x55\x00\x53\x00\x62\x00\x5b\x00\x4d\x00\x45\x00\x46\x00\x56\x00\x60\x00\x44\x00\x5f\x00\x5d\x00\x4b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x52\x00\x64\x00\x57\x00\x51\x00\x58\x00\x59\x00\x54\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x47\x00\x18\x00\x48\x00\x50\x00\x5e\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6f\x00\x6a\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x49\x00\x5c\x00\x4a\x00\x4f\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x17\x00\x1a\x00\x16\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2e\x00\x61\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x35\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x13\x00\x07\x00\x0b\x00\x0b\x00\x0b\x00\x0c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x3b\x00\x3a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1d\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\x08\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x06\x00\x0d\x00\x0d\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x78\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x77\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x76\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x68\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x69\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x75\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x74\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6d\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x73\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x70\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x71\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6c\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x79\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x67\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x66\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x65\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x88\x00\x89\x00\x3e\x00\x5c\x00\x88\x00\xac\x00\x2a\x00\x2a\x00\x2a\x00\x29\x00\x7d\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2f\x00\x2a\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x2d\x00\xc2\x00\xc3\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x3e\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa7\x00\xa8\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x10\x00\x12\x00\x12\x00\x14\x00\x14\x00\xff\xff\x1e\x00\x1e\x00\x24\x00\x24\x00\x27\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x33\x00\x33\x00\x33\x00\x29\x00\x29\x00\x29\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = listArray (0::Int,121) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33),AlexAcc (alex_action_34),AlexAcc (alex_action_35),AlexAcc (alex_action_36),AlexAcc (alex_action_37),AlexAcc (alex_action_38),AlexAcc (alex_action_39),AlexAcc (alex_action_40),AlexAcc (alex_action_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_44),AlexAcc (alex_action_45),AlexAcc (alex_action_46),AlexAcc (alex_action_47),AlexAcc (alex_action_48),AlexAcc (alex_action_49),AlexAcc (alex_action_50),AlexAcc (alex_action_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55)]+{-# LINE 93 "src/Scyther/Theory/Lexer.x" #-}+++-- | Lex a keyword+keyword :: Keyword -> AlexAction Keyword+keyword kw input len = return kw++-- | Wrap a string into a keyword+scanString :: (String -> Keyword) -> AlexAction Keyword+scanString kw (_,_,_,input) len = return $ kw (take len input)++{-+-- | Scan a string until EOF is encountered.+alexScanTokens :: String -> Either String [Keyword]+alexScanTokens inp = runAlex inp gather+ where+ gather = do+ t <- alexMonadScan+ case trace (show t) t of+ EOF -> return [EOF]+ _ -> (t:) `liftM` gather++-- | Scan a file.+scanFile f = do+ inp <- readFile f+ return $ alexScanTokens inp+-}++-- | Formal text types.+data TextType =+ TextBegin String+ | TextContent String+ | TextEnd+ deriving( Eq, Ord, Show )++-- | Lexable Keywords+data Keyword =+ IDENT String+ | TEXT TextType+ | SQUOTE+ | DQUOTE+ | RIGHTARROW+ | LEFTARROW+ | LONGRIGHTARROW+ | LONGLEFTARROW+ | COMMA+ | DOT+ | COLON+ | QUESTIONMARK+ | BANG+ | AND+ | MID+ | DOLLAR+ | AT+ | SHARP+ | LPAREN+ | RPAREN+ | LBRACKET+ | RBRACKET+ | LBRACE+ | RBRACE+ | SLASH+ | BACKSLASH+ | TILDE+ | HAT+ | STAR+ | UNDERSCORE+ | MINUS+ | PLUS+ | EQUAL+ | LESS+ | GREATER+ | EOF+ | FORALL+ | EXISTS+ | LAND+ | LOR+ | LNOT+ | APPROX+ -- dummy keyword to get rid of overlapping pattern matches+ | DUMMY_KEYWORD+ deriving( Eq )++instance Show Keyword where+ show kw = case kw of+ IDENT i -> identifier i+ TEXT t -> txt t+ SQUOTE -> symbol "'"+ DQUOTE -> symbol "\""+ RIGHTARROW -> symbol "->"+ LEFTARROW -> symbol "<-"+ LONGRIGHTARROW -> symbol "-->"+ LONGLEFTARROW -> symbol "<--"+ COMMA -> symbol ","+ DOT -> symbol "."+ COLON -> symbol ":"+ QUESTIONMARK -> symbol "?"+ BANG -> symbol "!"+ AND -> symbol "&"+ MID -> symbol "|"+ DOLLAR -> symbol "$"+ AT -> symbol "@"+ SHARP -> symbol "#"+ LPAREN -> symbol "("+ RPAREN -> symbol ")"+ LBRACKET -> symbol "["+ RBRACKET -> symbol "]"+ LBRACE -> symbol "{"+ RBRACE -> symbol "}"+ SLASH -> symbol "/"+ BACKSLASH -> symbol "\\"+ TILDE -> symbol "~"+ HAT -> symbol "^"+ STAR -> symbol "*"+ UNDERSCORE -> symbol "_"+ MINUS -> symbol "-"+ PLUS -> symbol "+"+ EQUAL -> symbol "="+ LESS -> symbol "<"+ GREATER -> symbol ">"+ EOF -> "end of file"+ FORALL -> symbol "∀"+ EXISTS -> symbol "∃"+ LAND -> symbol "∧"+ LOR -> symbol "∨"+ LNOT -> symbol "¬"+ APPROX -> symbol "≈"+ DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"+ where+ identifier i = "identifier `" ++ i ++ "'"+ txt (TextBegin t) = "start of `" ++ t ++ "'"+ txt (TextContent t) = "text `" ++ t ++ "'"+ txt (TextEnd) = "start of text"+ symbol s = "symbol `" ++ s ++ "'"+ keyword s = "keyword `" ++ s ++ "'"++-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- The input type++type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Word8], -- remaining bytes of current char+ String) -- current input string++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (p,c,bs,s) = c++alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (p,c,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ (b:bs) = UTF8.encodeChar c+ in p' `seq` Just (b, (p', c, bs, s))++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text. It has three+-- fields: the address (number of chacaters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.++data AlexPosn = AlexPn !Int !Int !Int+ deriving (Eq)++instance Show AlexPosn where+ show (AlexPn _ l c) = "line "++show l++" column "++show c++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)+alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+++-- -----------------------------------------------------------------------------+-- Default monad+++data AlexState = AlexState {+ alex_pos :: !AlexPosn, -- position at current input location+ alex_inp :: String, -- the current input+ alex_chr :: !Char, -- the character before the input+ alex_scd :: !Int, -- the current startcode+ alex_ocd :: !Int, -- the old startcode before the comment started+ alex_cmt :: [String] -- stack of begin comment identifiers+ }++-- Compile with -funbox-strict-fields for best results!++runAlex :: String -> Alex a -> Either String a+runAlex input (Alex f)+ = case f (AlexState {alex_pos = alexStartPos,+ alex_inp = input,+ alex_chr = '\n',+ alex_scd = 0,+ alex_ocd = 0,+ alex_cmt = []+ }) of+ Left msg -> Left msg+ Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap = liftM++instance Applicative Alex where+ pure = return+ (<*>) = ap++instance Monad Alex where+ m >>= k = Alex $ \s -> case unAlex m s of+ Left msg -> Left msg+ Right (s',a) -> unAlex (k a) s'+ return a = Alex $ \s -> Right (s,a)++alexGetPos :: Alex AlexPosn+alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)++alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} ->+ Right (s, (pos,c,[],inp))++alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,_,inp)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of+ s@(AlexState{}) -> Right (s, ())++alexError :: String -> Alex a+alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)++alexGetStartCode :: Alex Int+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)++alexSetStartCode :: Int -> Alex ()+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())++alexGetOldStartCode :: Alex Int+alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)++alexSetOldStartCode :: Int -> Alex ()+alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())++alexGetComments :: Alex [String]+alexGetComments = Alex $ \s -> Right (s, alex_cmt s)++alexSetComments :: [String] -> Alex ()+alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())++alexMonadScan = do+ inp <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp sc of+ AlexEOF -> alexEOF+ AlexError inp' -> alexError "lexical error"+ AlexSkip inp' len -> do+ alexSetInput inp'+ alexMonadScan+ AlexToken inp' len action -> do+ alexSetInput inp'+ action inp len++-- -----------------------------------------------------------------------------+-- Useful token actions++type AlexAction result = AlexInput -> Int -> Alex result++-- just ignore this token and scan another one+skip :: AlexAction Keyword+skip input len = alexMonadScan++-- ignore this token, but set the start code to a new value+begin :: Int -> AlexAction Keyword+begin code input len = do alexSetStartCode code; alexMonadScan++-- | Begin a text starting of the given type.+beginText :: String -> Int -> AlexAction Keyword+beginText ty code _ _ = do+ alexSetStartCode code+ return $ TEXT $ TextBegin ty++-- | End a text.+endText :: Int -> AlexAction Keyword+endText code _ _ = do+ alexSetStartCode code+ return $ TEXT TextEnd++-- | Begin a comment starting with the given sign.+beginComment :: String -> Int -> AlexAction Keyword+beginComment cmtBegin code input len = do+ cmts <- alexGetComments+ alexSetComments $ cmtBegin : cmts+ if null cmts+ then alexGetStartCode >>= alexSetOldStartCode+ else return ()+ alexSetStartCode code+ alexMonadScan++-- | End a comment that started with the given begin comment sign.+endComment :: String -> AlexAction Keyword+endComment cmtBegin input len = do+ cmts <- alexGetComments+ case cmts of+ [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."+ (cmt:cmts') -> do+ if cmt == cmtBegin+ then do+ alexSetComments cmts'+ if null cmts'+ then alexGetOldStartCode >>= alexSetStartCode+ else return ()+ else return ()+ alexMonadScan++-- perform an action for this token, and set the start code to a new value+-- andBegin :: AlexAction result -> Int -> AlexAction result+(action `andBegin` code) input len = do alexSetStartCode code; action input len++alexEOF :: Alex Keyword+alexEOF = return EOF++++++comment,text :: Int+comment = 1+text = 2+alex_action_2 = beginComment "(*" comment +alex_action_3 = beginComment "(*" comment +alex_action_4 = beginComment "(*" comment +alex_action_5 = endComment "(*" +alex_action_6 = beginComment "/*" comment +alex_action_7 = beginComment "/*" comment +alex_action_8 = beginComment "/*" comment +alex_action_9 = endComment "/*" +alex_action_10 = skip +alex_action_11 = beginText "text" text +alex_action_12 = beginText "section" text +alex_action_13 = beginText "subsection" text +alex_action_14 = endText 0+alex_action_15 = scanString (TEXT . TextContent) +alex_action_16 = keyword FORALL +alex_action_17 = keyword EXISTS +alex_action_18 = keyword LAND +alex_action_19 = keyword LOR +alex_action_20 = keyword LNOT +alex_action_21 = keyword APPROX +alex_action_22 = keyword COMMA +alex_action_23 = keyword LPAREN +alex_action_24 = keyword RPAREN +alex_action_25 = keyword LBRACKET +alex_action_26 = keyword RBRACKET +alex_action_27 = keyword LBRACE +alex_action_28 = keyword RBRACE +alex_action_29 = keyword SLASH +alex_action_30 = keyword BACKSLASH +alex_action_31 = keyword SQUOTE +alex_action_32 = keyword DQUOTE +alex_action_33 = keyword TILDE +alex_action_34 = keyword HAT +alex_action_35 = keyword EQUAL +alex_action_36 = keyword COLON +alex_action_37 = keyword DOLLAR +alex_action_38 = keyword AT +alex_action_39 = keyword SHARP +alex_action_40 = keyword STAR +alex_action_41 = keyword LESS +alex_action_42 = keyword GREATER +alex_action_43 = keyword QUESTIONMARK +alex_action_44 = keyword BANG +alex_action_45 = keyword AND +alex_action_46 = keyword MID +alex_action_47 = keyword DOT +alex_action_48 = keyword UNDERSCORE +alex_action_49 = keyword MINUS +alex_action_50 = keyword PLUS +alex_action_51 = keyword RIGHTARROW +alex_action_52 = keyword LEFTARROW +alex_action_53 = keyword LONGRIGHTARROW +alex_action_54 = keyword LONGLEFTARROW +alex_action_55 = scanString IDENT+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+ narrow16Int# i+ where+ i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+ high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ low = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 2#+#else+ indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+ narrow32Int# i+ where+ i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+ (b2 `uncheckedShiftL#` 16#) `or#`+ (b1 `uncheckedShiftL#` 8#) `or#` b0)+ b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+ b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+ b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ b0 = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 4#+#else+ indexInt32OffAddr# arr off+#endif+++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+ = AlexEOF+ | AlexError !AlexInput+ | AlexSkip !AlexInput !Int+ | AlexToken !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+ = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+ = case alex_scan_tkn user input 0# input sc AlexNone of+ (AlexNone, input') ->+ case alexGetByte input of+ Nothing -> ++++ AlexEOF+ Just _ ->++++ AlexError input'++ (AlexLastSkip input'' len, _) ->++++ AlexSkip input'' len++ (AlexLastAcc k input''' len, _) ->++++ AlexToken input''' len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+ input `seq` -- strict in the input+ let + new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+ in+ new_acc `seq`+ case alexGetByte input of+ Nothing -> (new_acc, input)+ Just (c, new_input) -> ++++ case fromIntegral c of { (I# (ord_c)) ->+ let+ base = alexIndexInt32OffAddr alex_base s+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset+ + new_s = if GTE(offset,0#) && EQ(check,ord_c)+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in+ case new_s of+ -1# -> (new_acc, input)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+ new_input new_s new_acc+ }+ where+ check_accs (AlexAccNone) = last_acc+ check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))+++data AlexLastAcc a+ = AlexNone+ | AlexLastAcc a !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++instance Functor AlexLastAcc where+ fmap f AlexNone = AlexNone+ fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z+ fmap f (AlexLastSkip x y) = AlexLastSkip x y++data AlexAcc a user+ = AlexAccNone+ | AlexAcc a+ | AlexAccSkip+++-- used by wrappers+iUnbox (I# (i)) = i+
scyther-proof.cabal view
@@ -1,6 +1,6 @@ build-type: Simple name: scyther-proof-version: 0.8.0.0+version: 0.10.0.0 license: GPL license-file: LICENSE category: Security, Theorem Provers@@ -86,7 +86,6 @@ isabelle/Makefile isabelle/README isabelle/ROOT- isabelle/src/isar-keywords.el isabelle/src/*.thy isabelle/src/ESPLogic/*.thy isabelle/src/ESPLogic/*.ML@@ -96,7 +95,7 @@ extra-source-files: .ghci interactive-only-src/Paths_scyther_proof.hs- src/Scyther/Theory/Lexer.x_src_only+ src/Scyther/Theory/Lexer.x README.md CHANGES @@ -108,8 +107,8 @@ executable scyther-proof build-depends: base == 4.* ,- array >= 0.3 && < 0.5 ,- containers >= 0.4.2 && < 0.5 ,+ array >= 0.3 && < 0.6 ,+ containers >= 0.4.2 && < 0.6 , safe >= 0.2 && < 0.4 , mtl >= 2.1 && < 3.0,@@ -117,15 +116,18 @@ cmdargs >= 0.10.7 , filepath >= 1.2 && < 1.4 , directory >= 1.0 && < 1.3 ,- process == 1.1.* ,- time >= 1.1 && < 1.3 ,+ process >= 1.1 && < 1.3 ,+ time >= 1.1 && < 1.5 , parsec == 3.1.* , pretty >= 1.0 && < 1.2 ,- tagsoup == 0.12.* ,+ tagsoup >= 0.12 && < 0.14 , json == 0.5.* ,- uniplate == 1.6.*+ uniplate == 1.6.* ,+ utf8-string >= 0.3.7 + build-tools:+ alex >= 3.0 && < 3.2 if flag(threaded) ghc-options: -threaded
src/Control/Monad/BoundedDFS.hs view
@@ -23,6 +23,7 @@ ) where +import Control.Applicative import Control.Monad import Control.Monad.State import Control.Monad.Reader@@ -41,11 +42,15 @@ -- | An unbounded depth-first search monad for searches formulated using -- MonadPlus. newtype UnboundedDFS c a = UnboundedDFS { runUnboundedDFS :: Maybe a }- deriving( Monad )+ deriving( Functor, Applicative, Monad ) instance MonadCost c (UnboundedDFS c) where updateCost _ = return () +instance Alternative (UnboundedDFS c) where+ empty = mzero+ (<|>) = mplus+ instance MonadPlus (UnboundedDFS c) where mzero = UnboundedDFS $ mzero (UnboundedDFS m1) `mplus` (UnboundedDFS m2) = UnboundedDFS $ m1 `mplus` m2@@ -55,7 +60,7 @@ -- All choices are handled committing and there is no differentiation between -- failure due to cost overrun and other failures. newtype BoundedDFS c a = BoundedDFS { unBoundedDFS :: ReaderT (c -> Bool) (StateT c Maybe) a }- deriving( Monad )+ deriving( Functor, Applicative, Monad ) instance MonadCost c (BoundedDFS c) where updateCost f = BoundedDFS $ do@@ -65,6 +70,10 @@ guard (cond b') put b' +instance Alternative (BoundedDFS c) where+ empty = mzero+ (<|>) = mplus+ instance MonadPlus (BoundedDFS c) where mzero = BoundedDFS mzero m `mplus` _ = m@@ -86,7 +95,7 @@ BranchAndBound { unBranchAndBound :: ReaderT (c -> Bool) (StateT c Maybe) a }- deriving( Monad )+ deriving( Functor, Applicative, Monad ) -- | Run a branch and bound search. runBranchAndBound :: Cost c => BranchAndBound c a -> c -> Maybe (a, c)@@ -156,5 +165,8 @@ `mplus` -- m1 didn't do it, try m2 unBranchAndBound m2)- ++instance Cost c => Alternative (BranchAndBound c) where+ empty = mzero+ (<|>) = mplus
src/Main.hs view
@@ -151,8 +151,8 @@ , " The '--html' flag requires the 'dot' tool from GraphViz available at:" , " " ++ "http://www.graphviz.org/" , " "- , " The '--isabelle' flag requires the 'Isabelle2013-2' release of Isabelle/HOL:"- , " " ++ "http://isabelle.in.tum.de/website-Isabelle2013-2/"+ , " The '--isabelle' flag requires the 'Isabelle2014' release of Isabelle/HOL:"+ , " " ++ "http://isabelle.in.tum.de/website-Isabelle2014/" , "" , " Check the '" ++ readmePath ++ "' file for instructions on how to load the generated theory files in Isabelle's interactive mode." ]@@ -734,8 +734,8 @@ putStrLn "" where check _ err- | "Graphviz" `isInfixOf` err = Right $ init err ++ ". OK."- | otherwise = Left $ unlines $+ | "graphviz" `isInfixOf` map toLower err = Right $ init err ++ ". OK."+ | otherwise = Left $ unlines $ [ "WARNING:" , "" , " The dot tool seems not to be provided by Graphviz."@@ -752,40 +752,16 @@ ensureIsabelleESPL isabelle = do putStrLn $ "checking suitability of Isabelle tool: '" ++ isabelle ++ "'" _ <- testProcess checkVersion " version: " isabelle ["version"] ""- success <- testProcess checkLogics " installed logics: " isabelle ["findlogics"] ""- unless success buildESPL putStrLn "" where checkVersion out _- | "Isabelle2013-2" `isInfixOf` out = Right $ init out ++ ". OK."+ | "Isabelle2014" `isInfixOf` out = Right $ init out ++ ". OK." | otherwise = Left $ unlines $ [ "WARNING:" , ""- , " " ++ programName ++ " requires Isabelle2013-2."+ , " " ++ programName ++ " requires Isabelle2014." , " Proof checking is likely not to work."- , " Please download Isabelle2013-2 from:"- , " http://isabelle.in.tum.de/website-Isabelle2013-2/"+ , " Please download Isabelle2014 from:"+ , " http://isabelle.in.tum.de/website-Isabelle2014/" ]-- checkLogics out _- | "ESPL" `isInfixOf` out = Right $ init out ++ ". OK."- | otherwise = Left $ init out ++ ". WARNING: ESPL logic not installed."--- buildESPL = do- putStrLn "---"- putStrLn "Attempting to build ESPL logic (this may take several minutes):"- theoryDir <- esplTheoryDir- let isamake args =- runProcess isabelle ("build" : "-d" : theoryDir : args) (Just theoryDir) Nothing Nothing Nothing Nothing- >>= waitForProcess- exitCode <- isamake ["-b", "ESPL"]- case exitCode of- ExitSuccess -> putStrLn "Sucess! :-)\n---"- ExitFailure code -> putStrLn $ unlines- [ " Logic building failed with code: " ++ show code- , " Proof checking is likely not to work."- , " To investigate the problem try manually loading/building the theories in"- , " '" ++ theoryDir ++ "'"- ]
src/Scyther/Equalities.hs view
@@ -9,6 +9,7 @@ , MVarEq , MsgEq , AnyEq(..)+ , Inequality(..) , arbmEqToMsgEq , mvarEqToMsgEq@@ -31,6 +32,9 @@ , getPostEqs , toAnyEqs , anyEqTIDs+ , anyEqAMIDs+ , inequalityTIDs+ , inequalityAMIDs -- ** Substitution , substTID@@ -40,12 +44,14 @@ , substAMID , substMsg , substAnyEq+ , substInequality -- ** Additional Queries , threadRole , maxMappedTID , maxMappedArbMsgId , reflexive+ , falseIneq , null -- * Mapping Logical Variables@@ -60,10 +66,12 @@ -- * Pretty Printing , sptAnyEq+ , sptInequality ) where import Prelude hiding (null) +import qualified Data.List as L import qualified Data.Map as M import qualified Data.UnionFind as U import Data.Data@@ -124,12 +132,16 @@ TIDEq !TIDEq | TIDRoleEq !TIDRoleEq | RoleEq !RoleEq- | ArbMsgEq !ArbMsgEq+ | ArbMsgEq !ArbMsgEq | AVarEq !AVarEq | MVarEq !MVarEq | MsgEq !MsgEq deriving( Eq, Ord, Show, Data, Typeable ) +-- | An inequality. Bound logical variables are universally quantified.+newtype Inequality = Inequality { getInequality :: AnyEq }+ deriving( Eq, Ord, Show, Data, Typeable )+ -- | A conjunction of equality facts. -- -- Invariants for a value @eqs = Equalities tideqs roleeqs avareqs mvareqs arbmeqs@:@@ -275,7 +287,11 @@ MVarEq eq -> MsgEq $ substMVarEq eqs eq MsgEq eq -> MsgEq $ substMsgEq eqs eq +-- | Substitute both sides of an inequality.+substInequality :: Equalities -> Inequality -> Inequality+substInequality eqs = Inequality . substAnyEq eqs . getInequality + -- Checking for reflexivity --------------------------- @@ -298,6 +314,7 @@ MVarEq eq -> reflexive . MsgEq $ mvarEqToMsgEq eq MsgEq eq -> uncurry (==) eq + -- Deconstruction ----------------- @@ -352,7 +369,26 @@ MVarEq (v, m) -> return (mvarTID v) `mplus` msgTIDs m MsgEq (m1, m2) -> msgTIDs m1 `mplus` msgTIDs m2 +-- | The logical message variables occuring in an equality.+anyEqAMIDs :: AnyEq -> [ArbMsgId]+anyEqAMIDs eq = case eq of+ TIDEq _ -> mzero+ TIDRoleEq _ -> mzero+ RoleEq _ -> mzero+ ArbMsgEq (a, m) -> a : msgAMIDs m+ AVarEq _ -> mzero+ MVarEq (_, m) -> msgAMIDs m+ MsgEq (m1, m2) -> msgAMIDs m1 `mplus` msgAMIDs m2 +-- | The threads occurring in an inequality.+inequalityTIDs :: Inequality -> [TID]+inequalityTIDs = anyEqTIDs . getInequality++-- | The logical message variables occuring in an inequality.+inequalityAMIDs :: Inequality -> [ArbMsgId]+inequalityAMIDs = anyEqAMIDs . getInequality++ -- Unification -------------- @@ -574,12 +610,34 @@ maxMappedArbMsgId :: Equalities -> Maybe ArbMsgId maxMappedArbMsgId = fmap (fst . fst) . M.maxViewWithKey . arbmEqs - -- | Retrieve the role of a thread. threadRole :: TID -> Equalities -> Maybe Role threadRole tid eqs = M.lookup (substTID eqs tid) $ roleEqs eqs +-- | Test whether the equalities impose constraints on bound variables only.+onlyLocalConstraints :: Equalities -> Bool+onlyLocalConstraints eqs =+ M.null (tidEqs eqs) &&+ M.null (roleEqs eqs) &&+ M.null (avarEqs eqs) &&+ all isBoundVarMsg (map snd $ M.toList $ mvarEqs eqs) &&+ all isBoundVarEq (M.toList $ arbmEqs eqs) &&+ L.null (U.toList (postEqs eqs))+ where+ isBoundVar (BoundVarId _) = True+ isBoundVar _ = False + isBoundVarMsg (MArbMsg v) = isBoundVar v+ isBoundVarMsg _ = False++ isBoundVarEq (lhs, rhs) = isBoundVar lhs || isBoundVarMsg rhs++-- | Check if an inequality is trivially false, i.e., there exists an+-- substitution of bound logical variables which makes it reflexive.+falseIneq :: Inequality -> Bool+falseIneq ineq = maybe False onlyLocalConstraints $ solve [getInequality ineq] empty++ ------------------------------------------------------------------------------- -- Abusing equalities to represent mappings of logical variables -------------------------------------------------------------------------------@@ -641,42 +699,73 @@ -- Helper functions for pretty printing --------------------------------------- -ppEq :: (a -> Doc) -> (b -> Doc) -> (a, b) -> Doc-ppEq pp1 pp2 (x1, x2) = pp1 x1 <-> char '=' <-> pp2 x2+ppEq :: Doc -> (a -> Doc) -> (b -> Doc) -> (a, b) -> Doc+ppEq sym pp1 pp2 (x1, x2) = pp1 x1 <-> sym <-> pp2 x2 -ppEq' :: (a -> Doc) -> (a, a) -> Doc-ppEq' pp = ppEq pp pp+ppEq' :: Doc -> (a -> Doc) -> (a, a) -> Doc+ppEq' sym pp = ppEq sym pp pp +filterBoundVars :: [ArbMsgId] -> [ArbMsgId]+filterBoundVars = filter p+ where+ p (BoundVarId _) = True+ p (FreeVarId _) = False+ -- Isar ------- +ppIsarEq :: Doc -> IsarConf -> AnyEq -> Doc+ppIsarEq sym conf eq0 = case eq0 of+ TIDEq eq -> ppEq' sym ppIsar eq+ RoleEq eq -> ppEq' sym (text . roleName) eq+ TIDRoleEq (tid, role) ->+ text "roleMap r" <-> ppIsar tid <-> sym <-> text ("Some " ++ roleName role)+ ArbMsgEq eq -> ppEq sym ppIsar ppIsar eq+ AVarEq eq -> ppEq' sym ppIsar eq+ MVarEq eq -> ppEq sym ppIsar ppIsar eq+ MsgEq eq -> ppEq' sym ppIsar eq+ where+ ppIsar :: Isar a => a -> Doc+ ppIsar = isar conf+ instance Isar AnyEq where- isar conf eq0 = case eq0 of- TIDEq eq -> ppEq' ppIsar eq- RoleEq eq -> ppEq' (text . roleName) eq- TIDRoleEq (tid, role) -> - text "roleMap r" <-> ppIsar tid <-> text ("= Some " ++ roleName role)- ArbMsgEq eq -> ppEq ppIsar ppIsar eq- AVarEq eq -> ppEq' ppIsar eq- MVarEq eq -> ppEq ppIsar ppIsar eq- MsgEq eq -> ppEq' ppIsar eq+ isar = ppIsarEq (char '=')++instance Isar Inequality where+ isar conf eq = if L.null boundVars+ then ineq+ else parens $ quantifiers <-> ineq where- ppIsar :: Isar a => a -> Doc- ppIsar = isar conf+ boundVars = map (isar conf) $ filterBoundVars $ inequalityAMIDs eq+ ineq = ppIsarEq (isaNotEq conf) conf (getInequality eq)+ quantifiers = foldl (<->) (isaForall conf) boundVars <> char '.' + -- SP Theory ------------ +ppSPTEq :: Doc -> AnyEq -> Doc+ppSPTEq sym eq0 = case eq0 of+ TIDEq eq -> ppEq' sym sptTID eq+ RoleEq eq -> ppEq' sym (text . roleName) eq+ TIDRoleEq (tid, role) ->+ text "role(" <-> sptTID tid <-> char ')' <-> sym <-> text (roleName role)+ ArbMsgEq eq -> ppEq sym sptArbMsgId sptMessage eq+ AVarEq eq -> ppEq' sym sptAVar eq+ MVarEq eq -> ppEq sym sptMVar sptMessage eq+ MsgEq eq -> ppEq' sym sptMessage eq+ sptAnyEq :: AnyEq -> Doc-sptAnyEq eq0 = case eq0 of- TIDEq eq -> ppEq' sptTID eq- RoleEq eq -> ppEq' (text . roleName) eq- TIDRoleEq (tid, role) -> - text "role(" <-> sptTID tid <-> text (") = " ++ roleName role)- ArbMsgEq eq -> ppEq sptArbMsgId sptMessage eq- AVarEq eq -> ppEq' sptAVar eq- MVarEq eq -> ppEq sptMVar sptMessage eq- MsgEq eq -> ppEq' sptMessage eq+sptAnyEq = ppSPTEq (char '=')++sptInequality :: Inequality -> Doc+sptInequality eq = if L.null boundVars+ then ineq+ else parens $ quantifiers <-> ineq+ where+ boundVars = map sptArbMsgId $ filterBoundVars $ inequalityAMIDs eq+ ineq = ppSPTEq (text "!=") (getInequality eq)+ quantifiers = foldl (<->) (char '!') boundVars <> char '.' {-
src/Scyther/Facts.hs view
@@ -87,7 +87,7 @@ import qualified Scyther.Typing as T import Scyther.Typing hiding (substTypeAnn) import qualified Scyther.Equalities as E-import Scyther.Equalities hiding (solve, substTID, threadRole, substMVar, substAVar, substMsg, substAnyEq, substAMID, empty, null)+import Scyther.Equalities hiding (solve, substTID, threadRole, substMVar, substAVar, substMsg, substAnyEq, substInequality, substAMID, empty, null) import Scyther.Event hiding (substEv, substEvOrd) import qualified Scyther.Event as E import Scyther.Formula hiding (substAtom)@@ -126,6 +126,7 @@ , compromised :: S.Set Message -- ^ Statements about agents being compromised. , uncompromised :: S.Set Message -- ^ Statements about agents being uncompromised. , equalities :: E.Equalities -- ^ All equalities that must hold.+ , inequalities :: S.Set Inequality -- ^ All inequalities that must hold. , tidQuantifiers :: S.Set TID -- ^ All thread IDs occurring in the facts. , amQuantifiers :: S.Set ArbMsgId -- ^ All arbitrary-message IDs ocurring in the facts. , optTyping :: Maybe Typing -- ^ The typing if there is any that the@@ -135,6 +136,8 @@ , covered :: S.Set Message -- ^ The messages that have already been used in a -- case distinction.+ , failedEqs :: S.Set AnyEq -- ^ All equalities which could not be solved.+ -- A non-empty set implies false. , protocol :: Protocol -- ^ The protocol that the current state -- is a reachable state of. }@@ -154,7 +157,9 @@ S.null (compromised facts) && S.null (uncompromised facts) && S.null (typeAnns facts) &&- E.null (equalities facts)+ E.null (equalities facts) &&+ S.null (inequalities facts) &&+ S.null (failedEqs facts) ------------------------------------------------------------------------------ -- Construction@@ -162,7 +167,8 @@ -- | Empty set of facts; logically equivalent to true. empty :: Protocol -> Facts-empty = Facts S.empty S.empty S.empty S.empty E.empty S.empty S.empty Nothing S.empty S.empty+empty = Facts+ S.empty S.empty S.empty S.empty E.empty S.empty S.empty S.empty Nothing S.empty S.empty S.empty -- | Set the protocol. --@@ -267,7 +273,8 @@ -- | Check if a agent id is quantified in these facts arbMsgIdQuantified :: Facts -> ArbMsgId -> CertResult-arbMsgIdQuantified facts aid =+arbMsgIdQuantified _facts (BoundVarId _) = certSuccess+arbMsgIdQuantified facts aid@(FreeVarId _) = certErrorIf (aid `S.notMember` amQuantifiers facts) $ "unquantified aid: " ++ show aid @@ -314,11 +321,16 @@ E.MVarEq (mv, m) -> mvarQuantified facts mv >< msgQuantified facts m E.MsgEq (m1, m2) -> msgQuantified facts m1 >< msgQuantified facts m2 +-- | Check if an inequality contains only quantified logical variables.+ineqQuantified :: Facts -> E.Inequality -> CertResult+ineqQuantified facts = anyEqQuantified facts . getInequality+ -- | Check if an atom contains only quantified logical variables. atomQuantified :: Facts -> Atom -> CertResult atomQuantified facts atom = case atom of ABool _ -> certSuccess AEq eq -> anyEqQuantified facts eq+ AIneq eq -> ineqQuantified facts eq AEv ev -> evQuantified facts ev AEvOrd ord -> evOrdQuantified facts ord ACompr m -> msgQuantified facts m@@ -365,6 +377,10 @@ certAnyEq :: Facts -> E.AnyEq -> Cert E.AnyEq certAnyEq = certify anyEqQuantified substAnyEq +-- | Certify an inequality.+certInequality :: Facts -> Inequality -> Cert Inequality+certInequality = certify ineqQuantified substInequality+ -- | Certify an atom: All logical variables are quantified under the given -- facts and all values are invariant under the equalities associated with the -- facts.@@ -413,6 +429,10 @@ substAnyEq :: Facts -> E.AnyEq -> E.AnyEq substAnyEq = liftSubst E.substAnyEq +-- | Substitute an inequality.+substInequality :: Facts -> Inequality -> Inequality+substInequality = liftSubst E.substInequality+ -- | Substitute an atom. substAtom :: Facts -> Atom -> Atom substAtom = liftSubst F.substAtom@@ -458,10 +478,12 @@ , compromised = S.map (E.substMsg eqs) (compromised facts) , uncompromised = S.map (E.substMsg eqs) (uncompromised facts) , equalities = eqs+ , inequalities = S.map (E.substInequality eqs) (inequalities facts) , tidQuantifiers = tidQuantifiers facts , amQuantifiers = amQuantifiers facts , typeAnns = S.map (T.substTypeAnn eqs) (typeAnns facts) , covered = S.map (E.substMsg eqs) (covered facts)+ , failedEqs = S.map (E.substAnyEq eqs) (failedEqs facts) } @@ -521,6 +543,16 @@ insertTypeAnn tya prems = prems { typeAnns = S.insert (certified tya) (typeAnns prems) } +-- | Insert an inequality.+insertInequality :: Cert Inequality -> Facts -> Facts+insertInequality ineq facts =+ facts { inequalities = S.insert (certified ineq) (inequalities facts) }++-- | Insert a failed equation.+insertFailedEq :: Cert E.AnyEq -> Facts -> Facts+insertFailedEq eq facts =+ facts { failedEqs = S.insert (certified eq) (failedEqs facts) }+ -- | Build the conjunction of the atoms and the facts; a result of 'Nothing' -- means that the conjunction is logically equivalent to False. This will occur -- in case 'AFalse' is conjoined or an equality that cannot be unified.@@ -538,6 +570,7 @@ -- FIXME: repeated calls to solve may be a bit expensive due to duplicated -- work of 'removeTrivialFacts'. AEq eq -> return $ solve [Cert eq] facts+ AIneq eq -> return . Just $ insertInequality (Cert eq) facts AEv ev -> return . Just $ insertEvNonTrivial (Cert ev) facts AEvOrd ord -> return . Just $ insertEvOrdNonTrivial (Cert ord) facts ACompr m -> return . Just $ compromise m facts@@ -573,16 +606,22 @@ insertLearnBefore to p m = insertEvOrdAndEvs (Cert (Learn m, to)) p -- | Insert an executed role step and all non-trivial facts implied by the--- Input rule.-insertStepInputClosed :: Cert (TID, RoleStep) -> Facts -> Facts-insertStepInputClosed s prems = case certified s of- (tid, step@(Recv _ pt)) ->- let m = substMsg prems (inst tid pt) in- insertEvOrdNonTrivial (Cert (Learn m, Step tid step)) prems- (tid, step@(Send _ _)) -> insertEv (Cert (Step tid step)) prems+-- Input, MatchEq, and NotMatch rules.+insertStepClosed :: Cert (TID, RoleStep) -> Facts -> Facts+insertStepClosed s prems = case certified s of+ (tid, step@(Recv _ pt)) ->+ let m = substMsg prems (inst tid pt)+ in insertEvOrdNonTrivial (Cert (Learn m, Step tid step)) prems+ (tid, step@(Match _ True v pt)) ->+ let eq = certAnyEq prems $ MsgEq (instVar tid v, inst tid pt)+ in insertEv (Cert (Step tid step)) . maybe (insertFailedEq eq prems) id $ solve [eq] prems+ (tid, step@(Match _ False v pt)) ->+ let ineq = certInequality prems . Inequality $ MsgEq (instVar tid v, inst tid pt)+ in insertEv (Cert (Step tid step)) $ insertInequality ineq prems+ (tid, step) -> insertEv (Cert (Step tid step)) prems -- | Insert an executed role step and all non-trivial facts implied by the--- Input and Role rules.+-- Input, MatchEq, NotMatch, and Role rules. insertStepPrefixClosed :: Cert (TID, RoleStep) -> Facts -> Facts insertStepPrefixClosed s = case certified s of (tid, step) -> execState $ do@@ -590,11 +629,11 @@ role <- gets (fromMaybe err . threadRole tid) let prefix = takeWhile (/= step) (roleSteps role) ++ [step] insertStepOrd = modify . insertEvOrdAndEvs . Cert . (Step tid *** Step tid)- mapM_ (modify . insertStepInputClosed . (Cert . ((,) tid))) prefix+ mapM_ (modify . insertStepClosed . (Cert . ((,) tid))) prefix mapM_ insertStepOrd $ zip prefix (tail prefix) --- | Insert an event an all non-trivial facts implied by the Input and Role--- rules.+-- | Insert an event an all non-trivial facts implied by the Input, MatchEq,+-- and Role rules. insertEvSaturated :: Cert Event -> Facts -> Facts insertEvSaturated ev = case certified ev of (Learn _ ) -> insertEvNonTrivial ev@@ -663,7 +702,10 @@ -- | The next free agent identifier nextArbMsgId :: Facts -> ArbMsgId-nextArbMsgId = maybe 0 (succ . fst) . S.maxView . amQuantifiers+nextArbMsgId = FreeVarId . maybe 0 (next . fst) . S.maxView . amQuantifiers+ where+ next (FreeVarId aid) = succ aid+ next (BoundVarId bid) = error ("nextArbMsgId: amQuantifiers contains BoundVarId " ++ show bid) -- | Try to retrieve the typing; equal to 'mzero' if there is none. getTyping :: MonadPlus m => Facts -> m Typing@@ -675,9 +717,11 @@ -- premises. The checks are separated due to efficiency reasons. proveFalse :: Facts -> Bool proveFalse prems =+ not (S.null (failedEqs prems)) || not (S.null (compromised prems `S.intersection` uncompromised prems)) || any noAgent (S.toList (compromised prems)) ||- cyclic (eventOrd prems)+ cyclic (eventOrd prems) ||+ any falseIneq (S.toList (inequalities prems)) where noAgent (MMVar _) = False noAgent (MAVar _) = False@@ -697,6 +741,9 @@ checkAtom atom = case atom of ABool b -> b AEq eq -> E.reflexive eq+ -- NOTE (SM): inequalities typically contain variables. It is therefore+ -- not much use to try hard to prove inequalities.+ AIneq _eq -> False AEv (Learn m) -> all checkLearn (splitNonTrivial m) AEv ev -> ev `S.member` events facts AEvOrd (Learn m, e2) -> all (checkLearnBefore e2) (splitNonTrivial m)@@ -756,6 +803,7 @@ where prove mapping (FAtom atom) = proveAtom facts (F.substAtom (getMappingEqs mapping) atom) prove mapping (FConj f1 f2) = prove mapping f1 && prove mapping f2+ prove mapping (FDisj f1 f2) = prove mapping f1 || prove mapping f2 prove mapping (FExists v f) = any (\mk -> prove (mk mapping) f) (mkMappings v) -- the mappings assign witnesses to the existentially quantified variables. mkMappings (Left tid) = map (E.addTIDMapping tid) (S.toList $ tidQuantifiers facts)@@ -783,9 +831,12 @@ ----------------- -- | Represent the facts as a set of atoms.+--+-- TODO: non-empty failedEqs imply False? toAtoms :: Facts -> [Atom] toAtoms facts = mconcat [ AEq <$> E.toAnyEqs (equalities facts)+ , AIneq <$> S.toList (inequalities facts) , AUncompr <$> S.toList (uncompromised facts) , ACompr <$> S.toList (compromised facts) , AEv <$> S.toList (events facts)@@ -1072,21 +1123,23 @@ msum . map stepChains $ roleSteps role where stepChains :: RoleStep -> ChainRuleM ()- stepChains (Recv _ _) = mzero+ stepChains (Recv _ _) = mzero+ stepChains (Match _ _ _ _) = mzero stepChains step@(Send _ pt) = do -- trace ("stepChains: " ++ roleName role ++"_"++getLabel l) (return ()) modifyFacts $ insertStepPrefixClosed (Cert (tid, step)) addCaseFragment $ stepLabel step- mapM_ annotateMVarType $ S.toList $ patFMV pt+ subst <- getsFacts substMsg+ mapM_ annotateMVarType . nub . msgFMV . subst $ inst tid pt msgChains [(Step tid step)] (inst tid pt) where -- annotating message variables with their type- annotateMVarType mv =- case M.lookup (mv, role) typ of- Nothing -> error $ "stepChains: no type provided for '"++show v++"'"- Just ty -> addExpandedTypeAnn (v, ty, tid)- where- v = MMVar (MVar (LocalId (mv, tid)))+ annotateMVarType mv@(MVar (LocalId (v, tid')))+ | tid' == tid = case M.lookup (v, role) typ of+ Nothing -> error $ "stepChains: no type provided for '"++show v+++ "' of role "++roleName role+ Just ty -> addExpandedTypeAnn (MMVar mv, ty, tid)+ | otherwise = return () -- case naming msgName (MConst i) = getId i@@ -1274,6 +1327,7 @@ ( ppSet (isar conf) (tidQuantifiers facts) ++ ppSet (isar conf) (amQuantifiers facts) , map (isar conf) reprEqs +++ ppSet (isar conf) (inequalities facts) ++ ppSet (isaUncompr conf) (uncompromised facts) ++ ppSet (isaCompr conf) (compromised facts) ++ ppSet (isaEventOrd conf (Mapping eqs)) (eventOrd facts) ++@@ -1296,6 +1350,7 @@ ( ppSet sptTID (tidQuantifiers facts) ++ ppSet sptArbMsgId (amQuantifiers facts) , map sptAnyEq reprEqs +++ ppSet sptInequality (inequalities facts) ++ ppComprInfo "uncompromised" (uncompromised facts) ++ ppComprInfo "compromised" (compromised facts) ++ (map (sptEventOrd (Mapping eqs)) $ transitiveChains $ S.toList $ eventOrd facts) ++
src/Scyther/Formula.hs view
@@ -10,8 +10,8 @@ -- ** Queries , hasQuantifiers- , conjuncts , conjunctionToAtoms+ , distributeOverDisj , isTypingFormula , destTypingFormula , atomTIDs@@ -51,6 +51,7 @@ data Atom = ABool Bool -- ^ 'False' and 'True' in Isabelle. | AEq AnyEq -- ^ An equality+ | AIneq Inequality -- ^ An inequality | AEv Event -- ^ An event must have happened. | AEvOrd (Event, Event) -- ^ An event order. | ACompr Message -- ^ A compromised agent variable.@@ -65,6 +66,7 @@ data Formula = FAtom Atom | FConj Formula Formula+ | FDisj Formula Formula | FExists (Either TID ArbMsgId) Formula deriving( Eq, Show, Ord, Data, Typeable ) @@ -87,6 +89,7 @@ where go (FAtom atom) = FAtom <$> ((substAtom . getMappingEqs) <$> ask <*> pure atom) go (FConj l r) = FConj <$> go l <*> go r+ go (FDisj l r) = FDisj <$> go l <*> go r go (FExists (Left tid) inner) = do tids <- get case tids of@@ -108,11 +111,13 @@ atomTIDs (AUncompr m) = msgTIDs m atomTIDs (AHasType tya) = typeAnnTIDs tya atomTIDs (AEq eq) = anyEqTIDs eq+atomTIDs (AIneq eq) = inequalityTIDs eq -- | Compute the free thread variables of the given formula. formulaTIDs :: Formula -> [TID] formulaTIDs (FAtom atom) = atomTIDs atom formulaTIDs (FConj f1 f2) = formulaTIDs f1 ++ formulaTIDs f2+formulaTIDs (FDisj f1 f2) = formulaTIDs f1 ++ formulaTIDs f2 formulaTIDs (FExists (Left tid) f) = filter (tid /=) $ formulaTIDs f formulaTIDs (FExists (Right _) f) = formulaTIDs f @@ -127,12 +132,13 @@ substAtom :: Equalities -> Atom -> Atom substAtom eqs atom = case atom of ABool _ -> atom- AEq eq -> AEq $ substAnyEq eqs eq- AEv ev -> AEv $ substEv eqs ev- AEvOrd ord -> AEvOrd $ substEvOrd eqs ord- ACompr m -> ACompr $ substMsg eqs m- AUncompr m -> AUncompr $ substMsg eqs m- AHasType tya -> AHasType $ substTypeAnn eqs tya+ AEq eq -> AEq $ substAnyEq eqs eq+ AIneq eq -> AIneq $ substInequality eqs eq+ AEv ev -> AEv $ substEv eqs ev+ AEvOrd ord -> AEvOrd $ substEvOrd eqs ord+ ACompr m -> ACompr $ substMsg eqs m+ AUncompr m -> AUncompr $ substMsg eqs m+ AHasType tya -> AHasType $ substTypeAnn eqs tya ATyping _ -> atom AReachable _ -> atom @@ -142,7 +148,10 @@ -- | True iff the formula does contain an existential quantifier. hasQuantifiers :: Formula -> Bool-hasQuantifiers = isNothing . conjunctionToAtoms+hasQuantifiers (FAtom _) = False+hasQuantifiers (FConj f1 f2) = hasQuantifiers f1 || hasQuantifiers f2+hasQuantifiers (FDisj f1 f2) = hasQuantifiers f1 || hasQuantifiers f2+hasQuantifiers (FExists _ _) = True -- | Convert a formula consisting of conjunctions only to a list of atoms. Uses -- 'fail' for error reporting.@@ -151,13 +160,26 @@ conjunctionToAtoms (FConj f1 f2) = (++) `liftM` conjunctionToAtoms f1 `ap` conjunctionToAtoms f2 conjunctionToAtoms _ =- fail "conjunctionToAtoms: existential quantifier encountered."+ fail "conjunctionToAtoms: existential quantifier or disjunction encountered." --- | Split all toplevel conjunctions.-conjuncts :: Formula -> [Formula]-conjuncts (FConj f1 f2) = conjuncts f1 ++ conjuncts f2-conjuncts f = pure f+-- | Produce a logically equivalent formula by pushing conjunctions and+-- quantifiers inside, i.e., apply their respective distributive laws over+-- disjunction. Obvious danger of exponential explosion!+distributeOverDisj :: Formula -> Formula+distributeOverDisj = go+ where+ go (FConj f1 f2) = distribConj (go f1) (go f2)+ go (FDisj f1 f2) = FDisj (go f1) (go f2)+ go (FExists v f) = distribEx v (go f)+ go f = f + distribConj f (FDisj f1 f2) = FDisj (distribConj f f1) (distribConj f f2)+ distribConj (FDisj f1 f2) f = FDisj (distribConj f1 f) (distribConj f2 f)+ distribConj f1 f2 = FConj f1 f2++ distribEx v (FDisj f1 f2) = FDisj (distribEx v f1) (distribEx v f2)+ distribEx v f = FExists v f+ -- | Find the first conjoined thread to role equality for this thread, if there -- is any. findRole :: TID -> Formula -> Maybe Role@@ -168,11 +190,23 @@ | otherwise = mzero go (FAtom _) = mzero go (FConj f1 f2) = go f1 `mplus` go f2+ go (FDisj f1 f2) = do+ r1 <- go f1+ r2 <- go f2+ guard (r1 == r2)+ return r1 go (FExists v f) | Left tid == v = mzero | otherwise = go f +-- | Add all thread to role equalities which are (immediate) conjuncts of a+-- formula to a mapping.+addRoles :: Formula -> Mapping -> Mapping+addRoles (FAtom (AEq (TIDRoleEq (tid, role)))) = addTIDRoleMapping tid role+addRoles (FConj f1 f2) = addRoles f1 . addRoles f2+addRoles _ = id + ------------------------------------------------------------------------------ -- Pretty Printing ------------------------------------------------------------------------------@@ -199,6 +233,7 @@ ABool False -> text "False" ABool True -> text "True" AEq eq -> ppIsar eq+ AIneq eq -> ppIsar eq AEv ev -> isaEvent conf mapping ev AEvOrd ord -> isaEventOrd conf mapping ord ACompr av -> isaCompr conf av@@ -220,6 +255,7 @@ ABool False -> text "False" ABool True -> text "True" AEq eq -> sptAnyEq eq+ AIneq eq -> sptInequality eq AEv ev -> sptEvent mapping ev AEvOrd (e1,e2) -> sptEventOrd mapping [e1,e2] ACompr av -> sptCompr av@@ -237,28 +273,34 @@ ppIsar = isar conf pp m (FAtom atom) = isaAtom conf m atom- pp m (FConj f1 f2) = sep [pp m f1 <-> isaAnd conf, pp m f2]+ pp m (FConj f1 f2) = sep [ppConjunct m f1 <-> isaAnd conf, ppConjunct m f2]+ pp m (FDisj f1 f2) =+ sep [ppDisjunct (addRoles f1 m) f1 <-> isaOr conf, ppDisjunct (addRoles f2 m) f2] pp m (FExists v f) = parens $ sep [ isaExists conf <-> (either ppIsar ppIsar v) <> char '.'- , nest 2 $ pp m' f+ , nest 2 $ pp (addRoles f m) f ]- where- m' = case v of- Left tid -> maybe id (addTIDRoleMapping tid) (findRole tid f) m- Right _ -> m + ppConjunct m f@(FDisj _ _) = parens $ pp m f+ ppConjunct m f = pp m f+ ppDisjunct m f@(FConj _ _) = parens $ pp m f+ ppDisjunct m f = pp m f++ -- | A formula in security protocol theory format. sptFormula :: Mapping -> Formula -> Doc sptFormula = pp where pp m (FAtom atom) = sptAtom m atom- pp m (FConj f1 f2) = sep [pp m f1 <-> char '&', pp m f2]+ pp m (FConj f1 f2) = sep [ppConjunct m f1 <-> char '&', ppConjunct m f2]+ pp m (FDisj f1 f2) =+ sep [ppDisjunct (addRoles f1 m) f1 <-> char '|', ppDisjunct (addRoles f2 m) f2] pp m (FExists v f) = parens $ sep [ char '?' <-> (either sptTID sptArbMsgId v) <> char '.'- , nest 2 $ pp m' f+ , nest 2 $ pp (addRoles f m) f ]- where- m' = case v of- Left tid -> maybe id (addTIDRoleMapping tid) (findRole tid f) m- Right _ -> m + ppConjunct m f@(FDisj _ _) = parens $ pp m f+ ppConjunct m f = pp m f+ ppDisjunct m f@(FConj _ _) = parens $ pp m f+ ppDisjunct m f = pp m f
src/Scyther/GoalFlow.hs view
@@ -129,10 +129,10 @@ -} firstRecvs :: Role -> RoleStep -> S.Set Id-firstRecvs _ (Send _ _) = S.empty firstRecvs role recv@(Recv _ pt) = patFMV pt `S.difference` (S.unions . map (patFMV . stepPat) $ takeWhile (/= recv) (roleSteps role))+firstRecvs _ _ = S.empty -- | The role steps of a protocol. protoSteps :: Protocol -> [(Role, RoleStep)]
src/Scyther/Message.hs view
@@ -12,6 +12,7 @@ , MVar(..) , ArbMsgId(..) , Message(..)+ -- ** Queries , lidId , lidTID@@ -31,6 +32,7 @@ , mapAVar , mapMVar , inst+ , instVar , normMsg , splitNonTrivial @@ -44,6 +46,7 @@ ) where import Control.Monad+import Control.Monad.State import Control.Applicative import Data.Data@@ -65,8 +68,7 @@ -- Messages ------------------------------------------------------------------------------ --- | A logical variable for a thread identifier. Note that these are the only--- free logical variables being used during proofs. Depending on their context+-- | A logical variable for a thread identifier. Depending on their context -- they are either universally or existentially quantified. newtype TID = TID { getTID :: Int } deriving( Eq, Ord, Enum, Num, Data, Typeable {-! NFData !-})@@ -74,13 +76,16 @@ instance Show TID where show (TID tid) = '#':show tid --- | An agent name identifier-newtype ArbMsgId = ArbMsgId { arbMsgId :: Int }- deriving( Eq, Ord, Enum, Num, Data, Typeable )+-- | A logical message variable. There are two namespaces: Free variables have+-- global scope. Bound variables are used for inequalities with implicit local+-- quantification.+data ArbMsgId = FreeVarId !Int+ | BoundVarId !Int+ deriving( Eq, Ord, Data, Typeable ) instance Show ArbMsgId where- show (ArbMsgId aid) = 'a':show aid-+ show (FreeVarId aid) = 'a':show aid+ show (BoundVarId bid) = 'b':show bid -- | A local identifier. newtype LocalId = LocalId { getLocalId :: (Id, TID) }@@ -152,7 +157,7 @@ msgTIDs (MFresh f) = pure . lidTID . getFresh $ f msgTIDs (MAVar v) = pure . avarTID $ v msgTIDs (MMVar v) = pure . mvarTID $ v-msgTIDs (MArbMsg _) = empty+msgTIDs (MArbMsg _) = empty msgTIDs (MHash m) = msgTIDs m msgTIDs (MTup m1 m2) = msgTIDs m1 `mappend` msgTIDs m2 msgTIDs (MEnc m1 m2) = msgTIDs m1 `mappend` msgTIDs m2@@ -168,7 +173,7 @@ msgAMIDs (MFresh _) = empty msgAMIDs (MAVar _) = empty msgAMIDs (MMVar _) = empty-msgAMIDs (MArbMsg a) = pure a+msgAMIDs (MArbMsg a) = pure a msgAMIDs (MHash m) = msgAMIDs m msgAMIDs (MTup m1 m2) = msgAMIDs m1 `mappend` msgAMIDs m2 msgAMIDs (MEnc m1 m2) = msgAMIDs m1 `mappend` msgAMIDs m2@@ -258,20 +263,32 @@ -- symbolically. The resulting message is guaranteed to be normalized w.r.t -- `normMsg`. inst :: TID -> Pattern -> Message-inst _ (PConst i) = MConst i-inst tid (PFresh i) = MFresh (Fresh (LocalId (i, tid)))-inst tid (PAVar i) = MAVar (AVar (LocalId (i, tid)))-inst tid (PMVar i) = MMVar (MVar (LocalId (i, tid)))-inst tid (PHash pt) = MHash (inst tid pt)-inst tid (PTup pt1 pt2) = MTup (inst tid pt1) (inst tid pt2)-inst tid (PEnc pt1 pt2) = MEnc (inst tid pt1) (inst tid pt2)-inst tid (PSign pt1 pt2) = MTup m1 (MEnc m1 (normMsg $ MInvKey (inst tid pt2)))- where m1 = inst tid pt1-inst tid (PSymK pt1 pt2) = MSymK (inst tid pt1) (inst tid pt2)-inst tid (PShrK pt1 pt2) = MShrK (inst tid pt1) (inst tid pt2)-inst tid (PAsymPK pt) = MAsymPK (inst tid pt)-inst tid (PAsymSK pt) = MAsymSK (inst tid pt)+inst tid pattern = evalState (go pattern) 0+ where+ go :: Pattern -> State Int Message+ go (PConst i) = return $ MConst i+ go (PFresh i) = return $ MFresh (Fresh (LocalId (i, tid)))+ go (PAVar i) = return $ MAVar (AVar (LocalId (i, tid)))+ go (PMVar i) = return $ MMVar (MVar (LocalId (i, tid)))+ go (PHash pt) = MHash <$> go pt+ go (PTup pt1 pt2) = MTup <$> go pt1 <*> go pt2+ go (PEnc pt1 pt2) = MEnc <$> go pt1 <*> go pt2+ go (PSign pt1 pt2) = do m1 <- go pt1+ m2 <- go pt2+ return $ MTup m1 (MEnc m1 (normMsg $ MInvKey m2))+ go (PSymK pt1 pt2) = MSymK <$> go pt1 <*> go pt2+ go (PShrK pt1 pt2) = MShrK <$> go pt1 <*> go pt2+ go (PAsymPK pt) = MAsymPK <$> go pt+ go (PAsymSK pt) = MAsymSK <$> go pt+ go (PAny) = do bid <- get+ put (bid + 1)+ return $ MArbMsg (BoundVarId bid) +-- | Instantiate a generic specification variable.+instVar :: TID -> VarId -> Message+instVar tid (SAVar i) = MAVar (AVar (LocalId (i, tid)))+instVar tid (SMVar i) = MMVar (MVar (LocalId (i, tid)))+ -- | Normalize a message; i.e., apply key-inversion if possible and swap shared -- key arguments, if required. normMsg :: Message -> Message@@ -326,7 +343,8 @@ isar _ tid = text "tid" <> int (getTID tid) instance Isar ArbMsgId where- isar _ aid = text "a" <> int (arbMsgId aid)+ isar _ (FreeVarId aid) = text "a" <> int aid+ isar _ (BoundVarId bid) = text "b" <> int bid instance Isar LocalId where isar conf (LocalId (i, tid)) = isar conf i <-> isar conf tid@@ -376,7 +394,8 @@ sptTID = text . show sptArbMsgId :: ArbMsgId -> Doc-sptArbMsgId = (char 'a' <>) . int . arbMsgId+sptArbMsgId (FreeVarId aid) = char 'a' <> int aid+sptArbMsgId (BoundVarId bid) = char 'b' <> int bid sptLocalId :: LocalId -> Doc sptLocalId (LocalId (i, tid)) = sptId i <> sptTID tid
src/Scyther/Protocol.hs view
@@ -5,6 +5,7 @@ -- * Types Id(..)+ , VarId(..) , Pattern(..) , Label(..) , RoleStep(..)@@ -14,6 +15,9 @@ -- * Queries + -- ** Generic variables+ , variable+ -- ** Patterns , patFMV , patFAV@@ -26,6 +30,8 @@ , stepLabel , stepFMV , stepFAV+ , stepUsedMV+ , stepBoundMV -- ** Roles , roleFMV@@ -46,6 +52,9 @@ , wfProto , sptProtoIllformedness +-- * Construction+ , patMapFMV+ -- * Output , isaRoleStep , sptId @@ -76,6 +85,12 @@ instance Show Id where show (Id i) = i +-- | Either an agent or message variable. Currently only used for 'Match' steps.+data VarId =+ SAVar Id -- ^ An agent variable.+ | SMVar Id -- ^ A message variable.+ deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )+ -- | A message pattern. data Pattern = PConst Id -- ^ A global constant.@@ -90,6 +105,7 @@ | PShrK Pattern Pattern -- ^ A long-term bi-directional symmetric key. | PAsymPK Pattern -- ^ A long-term public key. | PAsymSK Pattern -- ^ A long-term private key+ | PAny -- ^ A wildcard (anonymous logical variable). deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} ) -- | A label of a role step.@@ -98,8 +114,9 @@ -- | A role step. data RoleStep = - Send Label Pattern -- ^ A send step.- | Recv Label Pattern -- ^ A receive step.+ Send Label Pattern -- ^ A send step.+ | Recv Label Pattern -- ^ A receive step.+ | Match Label Bool VarId Pattern -- ^ A match or not-match step. deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} ) -- | A role of a protocol. Its name has no operational meaning, but is carried@@ -131,15 +148,25 @@ lookupRoleStep :: String -> Role -> Maybe RoleStep lookupRoleStep lbl = find ((== lbl) . stepLabel) . roleSteps --- | Pattern of of a role step+-- | Case distinction for specification variables.+variable :: (Id -> a) -- ^ Function to apply for an agent variable.+ -> (Id -> a) -- ^ Function to apply for a message variable.+ -> VarId+ -> a+variable agent _ (SAVar a) = agent a+variable _ msg (SMVar m) = msg m++-- | Pattern of a role step. stepPat :: RoleStep -> Pattern-stepPat (Send _ pt) = pt-stepPat (Recv _ pt) = pt+stepPat (Send _ pt) = pt+stepPat (Recv _ pt) = pt+stepPat (Match _ _ _ pt) = pt -- | The string label of a role step. stepLabel :: RoleStep -> String-stepLabel (Send l _) = getLabel l-stepLabel (Recv l _) = getLabel l+stepLabel (Send l _) = getLabel l+stepLabel (Recv l _) = getLabel l+stepLabel (Match l _ _ _) = getLabel l -- | Pattern subterms. subpatterns :: Pattern -> S.Set Pattern@@ -181,11 +208,12 @@ -- | Frees message variables of a role step. stepFMV :: RoleStep -> S.Set Id-stepFMV = patFMV . stepPat+stepFMV (Match _ _ (SMVar v) pt) = v `S.insert` patFMV pt+stepFMV step = patFMV $ stepPat step -- | Free message variables of a role. roleFMV :: Role -> S.Set Id-roleFMV = S.unions . map (patFMV . stepPat) . roleSteps+roleFMV = S.unions . map stepFMV . roleSteps -- | Free agent variables of a pattern. patFAV :: Pattern -> S.Set Id@@ -200,21 +228,40 @@ patFAV (PAsymSK pt) = patFAV pt patFAV _ = S.empty - -- | Frees agent variables of a role step. stepFAV :: RoleStep -> S.Set Id-stepFAV = patFAV . stepPat+stepFAV (Match _ _ (SAVar a) pt) = a `S.insert` patFAV pt+stepFAV step = patFAV $ stepPat step -- | Free agent variables of a role. roleFAV :: Role -> S.Set Id-roleFAV = S.unions . map (patFAV . stepPat) . roleSteps+roleFAV = S.unions . map stepFAV . roleSteps +-- | Semantically used message variables of a role step.+stepUsedMV :: RoleStep -> S.Set Id+stepUsedMV (Send _ pt) = patFMV pt+stepUsedMV (Recv _ _) = S.empty+stepUsedMV (Match _ eq v pt)+ | eq = matched+ | otherwise = matched `S.union` patFMV pt+ where+ matched = case v of+ SAVar _ -> S.empty+ SMVar m -> S.singleton m++-- | Message variables of a role step which are bound there at the latest.+stepBoundMV :: RoleStep -> S.Set Id+stepBoundMV (Recv _ pt) = patFMV pt+stepBoundMV (Match _ True _ pt) = patFMV pt+stepBoundMV _ = S.empty++ -- Well-formedness of protocols and roles ----------------------------------------- data ProtoIllformedness = NonUnique Role- | SendBeforeReceive Role RoleStep Id+ | UseBeforeBind Role RoleStep Id | AccessibleLongTermKey Role RoleStep Pattern deriving( Eq, Ord, Show ) @@ -223,21 +270,19 @@ -- contain long-term-keys in accessible positions. wfRole :: Role -> [ProtoIllformedness] wfRole role = msum- [ do guard (unique $ roleSteps role)+ [ do guard (not . unique $ roleSteps role) return $ NonUnique role- , recv_before_send S.empty (roleSteps role)+ , use_before_bind S.empty (roleSteps role) , msum . map accessibleLongTermKeys $ roleSteps role ] where- recv_before_send _ [] = mzero- recv_before_send received (step@(Send _ pt) : rs) = - do v <- S.toList $ patFMV pt- guard (v `S.member` received)- return $ SendBeforeReceive role step v+ use_before_bind _ [] = mzero+ use_before_bind bound (step : rs) =+ do v <- S.toList $ stepUsedMV step+ guard (not (v `S.member` bound))+ return $ UseBeforeBind role step v `mplus`- recv_before_send received rs- recv_before_send received (Recv _ pt : rs) = - recv_before_send (patFMV pt `S.union` received) rs+ use_before_bind (stepBoundMV step `S.union` bound) rs accessibleLongTermKeys step = do m <- S.toList . patternparts $ stepPat step@@ -256,10 +301,10 @@ sptProtoIllformedness pif = case pif of NonUnique role -> text $ "role '" ++ roleName role ++ "' contains duplicate steps."- SendBeforeReceive role step v ->+ UseBeforeBind role step v -> text (roleName role) <> colon <-> sptRoleStep Nothing step <> colon <->- text "message variable" <-> quotes (sptId v) <-> text "sent before received."+ text "message variable" <-> quotes (sptId v) <-> text "used before bound." AccessibleLongTermKey role step _ -> text (roleName role) <> colon <-> sptRoleStep Nothing step <> colon <->@@ -278,7 +323,7 @@ where steps = zip (roleSteps role) (repeat role) --- | The order of role steps in the protocol such that every send step is+-- | The order of role steps in the protocol such that every send step -- occurs before every receive step having the same label. labelOrd :: Protocol -> RoleStepOrder labelOrd proto = @@ -292,6 +337,26 @@ protoOrd proto = labelOrd proto ++ concatMap roleOrd (protoRoles proto) +-- Construction+---------------++-- | Apply a function to the free message variables of a pattern, replacing+-- them by a subpattern.+patMapFMV :: (Id -> Pattern) -> Pattern -> Pattern+patMapFMV f = go+ where+ go (PMVar i) = f i+ go (PHash pt) = PHash (go pt)+ go (PTup pt1 pt2) = PTup (go pt1) (go pt2)+ go (PEnc pt1 pt2) = PEnc (go pt1) (go pt2)+ go (PSign pt1 pt2) = PSign (go pt1) (go pt2)+ go (PSymK pt1 pt2) = PSymK (go pt1) (go pt2)+ go (PShrK pt1 pt2) = PShrK (go pt1) (go pt2)+ go (PAsymPK pt) = PAsymPK (go pt)+ go (PAsymSK pt) = PAsymSK (go pt)+ go pt = pt++ ------------------------------------------------------------------------------ -- ISAR Output ------------------------------------------------------------------------------@@ -312,16 +377,17 @@ case optRole of Just role | step `elem` roleSteps role -> -- abbreviate text $ roleName role ++ "_" ++ stepLabel step- _ ->- text name <-> isar conf (Label $ stepLabel step) <-> ppPat (stepPat step) - where- name = case step of Send _ _ -> "Send"; Recv _ _ -> "Recv"- ppPat pt@(PTup _ _) = isar conf pt- ppPat pt = nestShort' "(" ")" (isar conf pt)+ _ -> isar conf step instance Isar Id where isar _ (Id i) = text $ "''"++i++"''" +instance Isar VarId where+ isar conf = nestShort' "(" ")" . variable ppAgent ppMsg+ where+ ppAgent a = text "AVar" <-> isar conf a+ ppMsg m = text "MVar" <-> isar conf m+ instance Isar Label where isar _ (Label l) = text $ "''"++l++"''" @@ -342,6 +408,7 @@ (PAsymPK a) -> text "PAsymPK" <-> ppTup a (PAsymSK (PAVar a)) -> text "sSK" <-> isar conf a (PAsymSK a) -> text "PAsymSK" <-> ppTup a+ (PAny) -> text "PAny" where -- pretty print a tuple as right associate list ppTup pt@(PTup _ _) = nestShort n left right (fsep $ punctuate comma $ map (isar conf) $ split pt)@@ -360,7 +427,16 @@ instance Isar RoleStep where- isar conf = isaRoleStep conf Nothing+ isar conf step = case step of+ Send _ _ -> text "Send" <-> label <-> pattern+ Recv _ _ -> text "Recv" <-> label <-> pattern+ Match _ True v _ -> text "MatchEq" <-> label <-> isar conf v <-> pattern+ Match _ False v _ -> text "NotMatch" <-> label <-> isar conf v <-> pattern+ where+ label = isar conf (Label $ stepLabel step)+ pattern = ppPat (stepPat step)+ ppPat pt@(PTup _ _) = isar conf pt+ ppPat pt = nestShort' "(" ")" (isar conf pt) instance Isar Role where isar conf (Role name steps) = @@ -407,6 +483,7 @@ (PShrK a b) -> fcat [text "k[", sptPattern a, comma, sptPattern b, text "]"] (PAsymPK a) -> text "pk" <> ppBetween 1 "(" ")" a (PAsymSK a) -> text "sk" <> ppBetween 1 "(" ")" a+ (PAny) -> char '_' where -- pretty print a tuple as right associate list ppBetween n lead finish pt@(PTup _ _) = @@ -423,12 +500,20 @@ case optRole of Just role | step `elem` roleSteps role -> -- abbreviate text $ roleName role ++ "_" ++ stepLabel step- _ ->- (text $ name ++ "_" ++ stepLabel step) <> ppPat (stepPat step) + _ -> case step of+ Send _ _ -> labeled "Send" <> pattern+ Recv _ _ -> labeled "Recv" <> pattern+ Match _ True v pt -> labeled "Match" <> matching "->" v pt+ Match _ False v pt -> labeled "Match" <> matching "#" v pt where- name = case step of Send _ _ -> "Send"; Recv _ _ -> "Recv"- ppPat pt@(PTup _ _) = sptPattern pt- ppPat pt = nestShort' "(" ")" (sptPattern pt)+ labeled name = text $ name ++ "_" ++ stepLabel step+ matching sym v pt = nestShort' "(" ")" $ ppVar v <-> text sym <-> sptPattern pt+ pattern = ppPat (stepPat step)++ ppVar (SAVar a) = sptId a+ ppVar (SMVar v) = char '?' <> sptId v+ ppPat pt@(PTup _ _) = sptPattern pt+ ppPat pt = nestShort' "(" ")" (sptPattern pt) -- | Pretty print a role in SP theory format. sptRole :: Role -> Doc
src/Scyther/Sequent.hs view
@@ -102,31 +102,37 @@ proveRecvs S.empty (roleSteps role) where proveRecvs _ [] = []- proveRecvs recv ( Send _ _ : steps) = proveRecvs recv steps+ proveRecvs recv (Send _ _ : steps) = proveRecvs recv steps+ proveRecvs recv (Match _ False _ _ : steps) = proveRecvs recv steps proveRecvs recv ((Recv _ (PMVar lid)) : steps) = -- don't prove single reiceves as they are handled directly by the tactic -- on the Isabelle side. proveRecvs (S.insert lid recv) steps proveRecvs recv (step@(Recv _ pt) : steps) = let mvars = patFMV pt- in (S.toList mvars >>= proveVar) `mplus`+ in (S.toList mvars >>= proveVar recv step) `mplus` (proveRecvs (recv `S.union` mvars) steps)+ -- TODO: Merge? Special cases?+ proveRecvs recv (step@(Match _ True _ pt) : steps) =+ let mvars = patFMV pt+ in (S.toList mvars >>= proveVar recv step) `mplus`+ (proveRecvs (recv `S.union` mvars) steps)++ proveVar recv step v+ | v `S.member` recv = fail "proveVar: not first receive"+ | otherwise = return (name, Sequent prem concl Standard) where- proveVar v- | v `S.member` recv = fail "proveVar: not first receive"- | otherwise = return (name, Sequent prem concl Standard)- where- name = roleName role ++ "_" ++ stepLabel step ++ "_" ++ getId v- (tid, prem0) = freshTID (sePrem se)- mv = MVar (LocalId (v, tid))- premErr = error $ "wellTypedCases: could not add thread " ++ show tid ++ ". This should not happen."- prem1 = maybe premErr saturateFacts . join $- conjoinAtoms [AEv (Step tid step), AEq (E.TIDRoleEq (tid, role))] prem0- prem = fromMaybe (error "failed to set typing") $ setTyping typ prem1- concl = FAtom $ case M.lookup (v, role) typ of- Just ty -> AHasType (MMVar mv, ty, tid)- Nothing -> error $- "wellTypedCases: no type given for '"++show v++"' in role '"++roleName role++"'"+ name = roleName role ++ "_" ++ stepLabel step ++ "_" ++ getId v+ (tid, prem0) = freshTID (sePrem se)+ mv = MVar (LocalId (v, tid))+ premErr = error $ "wellTypedCases: could not add thread " ++ show tid ++ ". This should not happen."+ prem1 = maybe premErr saturateFacts . join $+ conjoinAtoms [AEv (Step tid step), AEq (E.TIDRoleEq (tid, role))] prem0+ prem = fromMaybe (error "failed to set typing") $ setTyping typ prem1+ concl = FAtom $ case M.lookup (v, role) typ of+ Just ty -> AHasType (MMVar mv, ty, tid)+ Nothing -> error $+ "wellTypedCases: no type given for '"++show v++"' in role '"++roleName role++"'" wellTypedCases _ = mzero
src/Scyther/Theory.hs view
@@ -309,6 +309,9 @@ -- | True, if the sequents conclusion contains an existentially quantified -- thread.+ --+ -- TODO: Does this describe authentication properties precisely if disjunction+ -- is present? isExistsStructureProp :: Sequent -> Bool isExistsStructureProp = hasQuantifiers . seConcl
src/Scyther/Theory/Dot.hs view
@@ -56,6 +56,7 @@ getColorWithDefault :: TID -> M.Map (Maybe TID) v -> v getColorWithDefault tid m = M.findWithDefault (m M.! Nothing) (Just tid) m + ----------------------------------------------------------------------------- -- DOT Graph Generation -----------------------------------------------------------------------------@@ -65,6 +66,8 @@ type TIDMap = M.Map TID (Maybe Role) +-- If a thread identifier may correspond to different roles, only one role gets+-- mapped. extractTIDMap :: Sequent -> TIDMap extractTIDMap se = formulaMap (seConcl se) (M.fromList fromPrem) where@@ -76,6 +79,7 @@ (FExists (Left tid) prop) -> formulaMap prop . M.insert tid Nothing (FExists (Right _ ) prop) -> formulaMap prop (FConj lprop rprop) -> formulaMap lprop . formulaMap rprop+ (FDisj lprop rprop) -> formulaMap lprop . formulaMap rprop (FAtom (AEq (E.TIDRoleEq (tid, role)))) -> M.insert tid (Just role) _ -> id @@ -334,10 +338,11 @@ tryNoteRole tid (Just role) env = env { threadMapping = E.addTIDRoleMapping tid role (threadMapping env) } --- | Produce the dot code of the formula.+-- | Produce the dot code of a formula without disjunctions. dotFormula :: Formula -> MyDot () dotFormula (FAtom atom) = dotAtom atom dotFormula (FConj f1 f2) = dotFormula f1 >> dotFormula f2+dotFormula (FDisj _f1 _f2) = error "dotFormula: disjunction encountered." dotFormula (FExists (Left tid) inner) = do localThreadInfo tid (findRole tid inner) $ do dotFormula inner@@ -347,14 +352,31 @@ _ <- liftDot $ node [("label", "some agent " ++ show aid)] dotFormula inner --- | Produce the dot code for a formula that is a conclusion of a sequent. This--- takes care of handling the quantifiers stemming from the premises.-dotConclusion :: Formula -> MyDot ()-dotConclusion formula = do+-- | Produce the dot code for a formula that is a single alternative of a+-- conclusion. This takes care of handling the quantifiers stemming from the+-- premises.+dotConclusionAlt :: Formula -> MyDot ()+dotConclusionAlt formula = do resetThreadAtoms [] dotFormula formula dotThreads False +-- | Produce the dot code for a formula that is a conclusion of a sequent.+-- Quantifiers and conjunctions are first pushed inside. The resulting+-- alternatives are put into separate clusters.+dotConclusion :: Formula -> MyDot ()+dotConclusion concl = case distributeOverDisj concl of+ f@(FDisj _ _) -> clusterAlts f+ f -> dotConclusionAlt f -- no extra cluster for single alternative+ where+ clusterAlts (FDisj f1 f2) = clusterAlts f1 >> clusterAlts f2+ clusterAlts f = do+ s <- get+ _ <- myCluster $ do+ liftDot $ attribute ("label","alternative")+ dotConclusionAlt f+ put s+ -- | Dot a sequent with two separate clusters for premise and conclusion. dotSequent :: Sequent -> MyDot () dotSequent se = do@@ -406,10 +428,10 @@ dotStep (role, step) = mkNode (render $ sptRoleStep Nothing step) (getRoleColor role) [] - dotSend _ (_, Recv _ _) = return () dotSend stepMap send@(_, Send l _) = sequence_ [ edge (findShowError send stepMap) (findShowError recv stepMap) [] | recv@(_, Recv l' _) <- steps, l == l' ]+ dotSend _ _ = return () dotRole stepMap role = do roleId <- mkNode ("role "++roleName role) (getRoleColor $ roleName role) [("peripheries","2")]
− src/Scyther/Theory/Lexer.hs
@@ -1,612 +0,0 @@-{-# LANGUAGE BangPatterns, CPP, MagicHash #-}-{-# LINE 1 "Theory/Lexer.x" #-}--{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-matches -fno-warn-unused-binds -fno-warn-missing-signatures #-}-module Scyther.Theory.Lexer where---#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Char (ord)-import Data.Array.Base (unsafeAt)-#else-import Array-import Char (ord)-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif-alex_base :: AlexAddr-alex_base = AlexA# "\x01\x00\x00\x00\xdb\x00\x00\x00\x51\x01\x00\x00\x28\x00\x00\x00\x2d\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\x00\x00\x70\x02\x00\x00\x40\x03\x00\x00\x10\x04\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\xe0\x04\x00\x00\xb0\x05\x00\x00\x80\x06\x00\x00\x50\x07\x00\x00\x20\x08\x00\x00\xf0\x08\x00\x00\xc0\x09\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x90\x0a\x00\x00\x60\x0b\x00\x00\x30\x0c\x00\x00\x00\x0d\x00\x00\xd0\x0d\x00\x00\xa0\x0e\x00\x00\x70\x0f\x00\x00\x40\x10\x00\x00\x10\x11\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\xce\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x11\x00\x00\xd2\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x12\x00\x00\x00\x00\x00\x00\xcc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x80\x13\x00\x00\x50\x14\x00\x00\x20\x15\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x51\x00\x45\x00\x4c\x00\x4a\x00\xff\xff\x52\x00\x44\x00\x09\x00\x3f\x00\x4d\x00\x57\x00\x3e\x00\x56\x00\x54\x00\x07\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x49\x00\xff\xff\x4e\x00\x48\x00\x4f\x00\x50\x00\x4b\x00\xff\xff\xff\xff\x10\x00\x08\x00\x0a\x00\x0c\x00\x04\x00\x05\x00\x0e\x00\x31\x00\x11\x00\x04\x00\x13\x00\x17\x00\x15\x00\x1d\x00\x34\x00\x26\x00\x3c\x00\x37\x00\x5a\x00\x59\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x40\x00\xff\xff\x41\x00\x47\x00\x55\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x18\x00\x00\x00\x00\x00\x00\x00\x38\x00\x39\x00\x00\x00\x42\x00\x53\x00\x43\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x0b\x00\x16\x00\x0f\x00\x16\x00\x16\x00\x16\x00\x16\x00\x12\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x0d\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x14\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x19\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1a\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1b\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x1f\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x27\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x20\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x21\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x22\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x23\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x24\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x28\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x29\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x2a\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x2b\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x2c\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x2d\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x2e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x2f\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x00\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00\x5e\x00"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x0a\x00\x0a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x20\x00\x2f\x00\x29\x00\x7d\x00\x2a\x00\x20\x00\x2a\x00\x2a\x00\x2f\x00\x2a\x00\x80\x00\x2a\x00\x88\x00\x83\x00\x3e\x00\x2d\x00\x2d\x00\x2d\x00\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xa7\x00\xa8\x00\xff\xff\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xff\xff\xc2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd7\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf7\x00\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x88\x00\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xff\xff\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xff\xff\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,95) [[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_53))],[],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_21))],[],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_53))]]-{-# LINE 81 "Theory/Lexer.x" #-}----- | Lex a keyword-keyword :: Keyword -> AlexAction Keyword-keyword kw input len = return kw---- | Wrap a string into a keyword-scanString :: (String -> Keyword) -> AlexAction Keyword-scanString kw (_,_,input) len = return $ kw (take len input)--{---- | Scan a string until EOF is encountered.-alexScanTokens :: String -> Either String [Keyword]-alexScanTokens inp = runAlex inp gather- where- gather = do- t <- alexMonadScan- case trace (show t) t of- EOF -> return [EOF]- _ -> (t:) `liftM` gather---- | Scan a file.-scanFile f = do- inp <- readFile f- return $ alexScanTokens inp--}---- | Formal text types.-data TextType = - TextBegin String - | TextContent String - | TextEnd- deriving( Eq, Ord, Show )---- | Lexable Keywords-data Keyword =- IDENT String- | TEXT TextType - | SQUOTE- | DQUOTE- | RIGHTARROW- | LEFTARROW- | LONGRIGHTARROW- | LONGLEFTARROW- | COMMA- | DOT- | COLON- | QUESTIONMARK- | BANG- | AND- | MID- | DOLLAR- | AT- | SHARP- | LPAREN- | RPAREN- | LBRACKET- | RBRACKET- | LBRACE - | RBRACE- | TILDE- | HAT- | STAR- | UNDERSCORE- | MINUS- | PLUS- | EQUAL- | LESS- | GREATER- | EOF- | FORALL- | EXISTS- | LAND- | LOR- | LNOT- | APPROX- -- dummy keyword to get rid of overlapping pattern matches- | DUMMY_KEYWORD- deriving( Eq )--instance Show Keyword where- show kw = case kw of - IDENT i -> identifier i- TEXT t -> txt t- SQUOTE -> symbol "'"- DQUOTE -> symbol "\""- RIGHTARROW -> symbol "->"- LEFTARROW -> symbol "<-"- LONGRIGHTARROW -> symbol "-->"- LONGLEFTARROW -> symbol "<--"- COMMA -> symbol ","- DOT -> symbol "."- COLON -> symbol ":"- QUESTIONMARK -> symbol "?"- BANG -> symbol "!"- AND -> symbol "&"- MID -> symbol "|"- DOLLAR -> symbol "$"- AT -> symbol "@"- SHARP -> symbol "#"- LPAREN -> symbol "("- RPAREN -> symbol ")"- LBRACKET -> symbol "["- RBRACKET -> symbol "]"- LBRACE -> symbol "{"- RBRACE -> symbol "}"- TILDE -> symbol "~"- HAT -> symbol "^"- STAR -> symbol "*"- UNDERSCORE -> symbol "_"- MINUS -> symbol "-"- PLUS -> symbol "+"- EQUAL -> symbol "="- LESS -> symbol "<"- GREATER -> symbol ">"- EOF -> "end of file"- FORALL -> symbol "∀" - EXISTS -> symbol "∃" - LAND -> symbol "∧" - LOR -> symbol "∨" - LNOT -> symbol "¬" - APPROX -> symbol "≈" - DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"- where- identifier i = "identifier `" ++ i ++ "'"- txt (TextBegin t) = "start of `" ++ t ++ "'"- txt (TextContent t) = "text `" ++ t ++ "'"- txt (TextEnd) = "start of text"- symbol s = "symbol `" ++ s ++ "'"- keyword s = "keyword `" ++ s ++ "'"---- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- The input type---type AlexInput = (AlexPosn, -- current position,- Char, -- previous char- String) -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar (p,c,[]) = Nothing-alexGetChar (p,_,(c:s)) = let p' = alexMove p c in p' `seq`- Just (c, (p', c, s))----- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text. It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.--data AlexPosn = AlexPn !Int !Int !Int- deriving (Eq)--instance Show AlexPosn where- show (AlexPn _ l c) = "line "++show l++" column "++show c--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1-alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)----- -------------------------------------------------------------------------------- Default monad---data AlexState = AlexState {- alex_pos :: !AlexPosn, -- position at current input location- alex_inp :: String, -- the current input- alex_chr :: !Char, -- the character before the input- alex_scd :: !Int, -- the current startcode- alex_ocd :: !Int, -- the old startcode before the comment started- alex_cmt :: [String] -- stack of begin comment identifiers- }---- Compile with -funbox-strict-fields for best results!--runAlex :: String -> Alex a -> Either String a-runAlex input (Alex f) - = case f (AlexState {alex_pos = alexStartPos,- alex_inp = input, - alex_chr = '\n',- alex_scd = 0,- alex_ocd = 0,- alex_cmt = []- }) of - Left msg -> Left msg- Right ( _, a ) -> Right a--newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }--instance Monad Alex where- m >>= k = Alex $ \s -> case unAlex m s of - Left msg -> Left msg- Right (s',a) -> unAlex (k a) s'- return a = Alex $ \s -> Right (s,a)--alexGetPos :: Alex AlexPosn-alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)--alexGetInput :: Alex AlexInput-alexGetInput- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} -> - Right (s, (pos,c,inp))--alexSetInput :: AlexInput -> Alex ()-alexSetInput (pos,c,inp)- = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of- s@(AlexState{}) -> Right (s, ())--alexError :: String -> Alex a-alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)--alexGetStartCode :: Alex Int-alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)--alexSetStartCode :: Int -> Alex ()-alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())--alexGetOldStartCode :: Alex Int-alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)--alexSetOldStartCode :: Int -> Alex ()-alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())--alexGetComments :: Alex [String]-alexGetComments = Alex $ \s -> Right (s, alex_cmt s)--alexSetComments :: [String] -> Alex ()-alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())--alexMonadScan = do- inp <- alexGetInput- sc <- alexGetStartCode- case alexScan inp sc of- AlexEOF -> alexEOF- AlexError inp' -> alexError "lexical error"- AlexSkip inp' len -> do- alexSetInput inp'- alexMonadScan- AlexToken inp' len action -> do- alexSetInput inp'- action inp len---- -------------------------------------------------------------------------------- Useful token actions--type AlexAction result = AlexInput -> Int -> Alex result---- just ignore this token and scan another one-skip :: AlexAction Keyword-skip input len = alexMonadScan---- ignore this token, but set the start code to a new value-begin :: Int -> AlexAction Keyword-begin code input len = do alexSetStartCode code; alexMonadScan---- | Begin a text starting of the given type.-beginText :: String -> Int -> AlexAction Keyword-beginText ty code _ _ = do- alexSetStartCode code- return $ TEXT $ TextBegin ty---- | End a text.-endText :: Int -> AlexAction Keyword-endText code _ _ = do- alexSetStartCode code- return $ TEXT TextEnd---- | Begin a comment starting with the given sign.-beginComment :: String -> Int -> AlexAction Keyword-beginComment cmtBegin code input len = do- cmts <- alexGetComments- alexSetComments $ cmtBegin : cmts- if null cmts- then alexGetStartCode >>= alexSetOldStartCode- else return ()- alexSetStartCode code- alexMonadScan---- | End a comment that started with the given begin comment sign.-endComment :: String -> AlexAction Keyword-endComment cmtBegin input len = do- cmts <- alexGetComments- case cmts of- [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."- (cmt:cmts') -> do- if cmt == cmtBegin - then do- alexSetComments cmts'- if null cmts' - then alexGetOldStartCode >>= alexSetStartCode - else return ()- else return ()- alexMonadScan---- perform an action for this token, and set the start code to a new value--- andBegin :: AlexAction result -> Int -> AlexAction result-(action `andBegin` code) input len = do alexSetStartCode code; action input len--alexEOF :: Alex Keyword-alexEOF = return EOF------comment,text :: Int-comment = 1-text = 2-alex_action_2 = beginComment "(*" comment -alex_action_3 = beginComment "(*" comment -alex_action_4 = beginComment "(*" comment -alex_action_5 = endComment "(*" -alex_action_6 = beginComment "/*" comment -alex_action_7 = beginComment "/*" comment -alex_action_8 = beginComment "/*" comment -alex_action_9 = endComment "/*" -alex_action_10 = skip -alex_action_11 = beginText "text" text -alex_action_12 = beginText "section" text -alex_action_13 = beginText "subsection" text -alex_action_14 = endText 0-alex_action_15 = scanString (TEXT . TextContent) -alex_action_16 = keyword FORALL -alex_action_17 = keyword EXISTS -alex_action_18 = keyword LAND -alex_action_19 = keyword LOR -alex_action_20 = keyword LNOT -alex_action_21 = keyword APPROX -alex_action_22 = keyword COMMA -alex_action_23 = keyword LPAREN -alex_action_24 = keyword RPAREN -alex_action_25 = keyword LBRACKET -alex_action_26 = keyword RBRACKET -alex_action_27 = keyword LBRACE -alex_action_28 = keyword RBRACE -alex_action_29 = keyword SQUOTE -alex_action_30 = keyword DQUOTE -alex_action_31 = keyword TILDE -alex_action_32 = keyword HAT -alex_action_33 = keyword EQUAL -alex_action_34 = keyword COLON -alex_action_35 = keyword DOLLAR -alex_action_36 = keyword AT -alex_action_37 = keyword SHARP -alex_action_38 = keyword STAR -alex_action_39 = keyword LESS -alex_action_40 = keyword GREATER -alex_action_41 = keyword QUESTIONMARK -alex_action_42 = keyword BANG -alex_action_43 = keyword AND -alex_action_44 = keyword MID -alex_action_45 = keyword DOT -alex_action_46 = keyword UNDERSCORE -alex_action_47 = keyword MINUS -alex_action_48 = keyword PLUS -alex_action_49 = keyword RIGHTARROW -alex_action_50 = keyword LEFTARROW -alex_action_51 = keyword LONGRIGHTARROW -alex_action_52 = keyword LONGLEFTARROW -alex_action_53 = scanString IDENT-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<eingebaut>" #-}-{-# LINE 1 "<Kommandozeile>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine--{-# LINE 35 "templates/GenericTemplate.hs" #-}--{-# LINE 45 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN- narrow16Int# i- where- i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)- high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- low = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 2#-#else- indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN- narrow32Int# i- where- i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`- (b2 `uncheckedShiftL#` 16#) `or#`- (b1 `uncheckedShiftL#` 8#) `or#` b0)- b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 4#-#else- indexInt32OffAddr# arr off-#endif------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a- = AlexEOF- | AlexError !AlexInput- | AlexSkip !AlexInput !Int- | AlexToken !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))- = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))- = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetChar input of- Nothing -> ---- AlexEOF- Just _ ->---- AlexError input'-- (AlexLastSkip input len, _) ->---- AlexSkip input len-- (AlexLastAcc k input len, _) ->---- AlexToken input len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =- input `seq` -- strict in the input- let - new_acc = check_accs (alex_accept `quickIndex` (I# (s)))- in- new_acc `seq`- case alexGetChar input of- Nothing -> (new_acc, input)- Just (c, new_input) -> ---- let- base = alexIndexInt32OffAddr alex_base s- !(I# (ord_c)) = ord c- offset = (base +# ord_c)- check = alexIndexInt16OffAddr alex_check offset- - new_s = if (offset >=# 0#) && (check ==# ord_c)- then alexIndexInt16OffAddr alex_table offset- else alexIndexInt16OffAddr alex_deflt s- in- case new_s of - -1# -> (new_acc, input)- -- on an error, we want to keep the input *before* the- -- character that failed, not after.- _ -> alex_scan_tkn user orig_input (len +# 1#) - new_input new_s new_acc-- where- check_accs [] = last_acc- check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))- check_accs (AlexAccPred a pred : rest)- | pred user orig_input (I# (len)) input- = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkipPred pred : rest)- | pred user orig_input (I# (len)) input- = AlexLastSkip input (I# (len))- check_accs (_ : rest) = check_accs rest--data AlexLastAcc a- = AlexNone- | AlexLastAcc a !AlexInput !Int- | AlexLastSkip !AlexInput !Int--data AlexAcc a user- = AlexAcc a- | AlexAccSkip- | AlexAccPred a (AlexAccPred user)- | AlexAccSkipPred (AlexAccPred user)--type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool---- -------------------------------------------------------------------------------- Predicates on a rule--alexAndPred p1 p2 user in1 len in2- = p1 user in1 len in2 && p2 user in1 len in2----alexPrevCharIsPred :: Char -> AlexAccPred _ -alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ -alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (I# (sc)) user _ _ input = - case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, _) -> False- _ -> True- -- TODO: there's no need to find the longest- -- match when checking the right context, just- -- the first match will do.---- used by wrappers-iUnbox (I# (i)) = i
+ src/Scyther/Theory/Lexer.x view
@@ -0,0 +1,430 @@+{+-- Ignore the slew of warnings from definitions generated by Alex.+-- NOTE: you should disable this line when working on this module to make sure+-- that you don't miss important warnings.+{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-unused-binds #-}+{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++module Scyther.Theory.Lexer where++import Control.Applicative+import Control.Monad+import Data.Word (Word8)+import qualified Codec.Binary.UTF8.String as UTF8+}++$digit = [0-9]+$letter = [a-zA-Z]+$others = [\192-\214\216-\246\248-\255]++@integer = $digit++@identifierFirst = ($letter | $digit | $others)+@identifierAfter = ($letter | $digit | "_" | $others)+@identifier = @identifierFirst @identifierAfter*+@comment = $printable | $white+@text = $printable | $white+@lineComment = "//".*++tokens :-+ <0> $white+ ;++ <0> @lineComment ;+ <0> "(*" { beginComment "(*" comment }+ <comment> "(*" { beginComment "(*" comment }+ <text> "(*" { beginComment "(*" comment }+ <comment> "*)" { endComment "(*" }+ <0> "/*" { beginComment "/*" comment }+ <comment> "/*" { beginComment "/*" comment }+ <text> "/*" { beginComment "/*" comment }+ <comment> "*/" { endComment "/*" }+ <comment> @comment { skip }++ <0> "text{*" { beginText "text" text }+ <0> "section{*" { beginText "section" text }+ <0> "subsection{*" { beginText "subsection" text }+ <text> "*}" { endText 0}+ <text> @text { scanString (TEXT . TextContent) }+++ <0> "∀" { keyword FORALL }+ <0> "∃" { keyword EXISTS }+ <0> "∧" { keyword LAND }+ <0> "∨" { keyword LOR }+ <0> "¬" { keyword LNOT }+ <0> "≈" { keyword APPROX }++ <0> "," { keyword COMMA }+ <0> "(" { keyword LPAREN }+ <0> ")" { keyword RPAREN }+ <0> "[" { keyword LBRACKET }+ <0> "]" { keyword RBRACKET }+ <0> "{" { keyword LBRACE }+ <0> "}" { keyword RBRACE }+ <0> "/" { keyword SLASH }+ <0> "\\" { keyword BACKSLASH }+ <0> "'" { keyword SQUOTE }+ <0> \" { keyword DQUOTE }+ <0> "~" { keyword TILDE }+ <0> "^" { keyword HAT }+ <0> "=" { keyword EQUAL }+ <0> ":" { keyword COLON }+ <0> "$" { keyword DOLLAR }+ <0> "@" { keyword AT }+ <0> "#" { keyword SHARP }+ <0> "*" { keyword STAR }+ <0> "<" { keyword LESS }+ <0> ">" { keyword GREATER }+ <0> "?" { keyword QUESTIONMARK }+ <0> "!" { keyword BANG }+ <0> "&" { keyword AND }+ <0> "|" { keyword MID }+ <0> "." { keyword DOT }+ <0> "_" { keyword UNDERSCORE }+ <0> "-" { keyword MINUS }+ <0> "+" { keyword PLUS }+ <0> "->" { keyword RIGHTARROW }+ <0> "<-" { keyword LEFTARROW }+ <0> "-->" { keyword LONGRIGHTARROW }+ <0> "<--" { keyword LONGLEFTARROW }+ <0> @identifier { scanString IDENT}+++{++-- | Lex a keyword+keyword :: Keyword -> AlexAction Keyword+keyword kw input len = return kw++-- | Wrap a string into a keyword+scanString :: (String -> Keyword) -> AlexAction Keyword+scanString kw (_,_,_,input) len = return $ kw (take len input)++{-+-- | Scan a string until EOF is encountered.+alexScanTokens :: String -> Either String [Keyword]+alexScanTokens inp = runAlex inp gather+ where+ gather = do+ t <- alexMonadScan+ case trace (show t) t of+ EOF -> return [EOF]+ _ -> (t:) `liftM` gather++-- | Scan a file.+scanFile f = do+ inp <- readFile f+ return $ alexScanTokens inp+-}++-- | Formal text types.+data TextType =+ TextBegin String+ | TextContent String+ | TextEnd+ deriving( Eq, Ord, Show )++-- | Lexable Keywords+data Keyword =+ IDENT String+ | TEXT TextType+ | SQUOTE+ | DQUOTE+ | RIGHTARROW+ | LEFTARROW+ | LONGRIGHTARROW+ | LONGLEFTARROW+ | COMMA+ | DOT+ | COLON+ | QUESTIONMARK+ | BANG+ | AND+ | MID+ | DOLLAR+ | AT+ | SHARP+ | LPAREN+ | RPAREN+ | LBRACKET+ | RBRACKET+ | LBRACE+ | RBRACE+ | SLASH+ | BACKSLASH+ | TILDE+ | HAT+ | STAR+ | UNDERSCORE+ | MINUS+ | PLUS+ | EQUAL+ | LESS+ | GREATER+ | EOF+ | FORALL+ | EXISTS+ | LAND+ | LOR+ | LNOT+ | APPROX+ -- dummy keyword to get rid of overlapping pattern matches+ | DUMMY_KEYWORD+ deriving( Eq )++instance Show Keyword where+ show kw = case kw of+ IDENT i -> identifier i+ TEXT t -> txt t+ SQUOTE -> symbol "'"+ DQUOTE -> symbol "\""+ RIGHTARROW -> symbol "->"+ LEFTARROW -> symbol "<-"+ LONGRIGHTARROW -> symbol "-->"+ LONGLEFTARROW -> symbol "<--"+ COMMA -> symbol ","+ DOT -> symbol "."+ COLON -> symbol ":"+ QUESTIONMARK -> symbol "?"+ BANG -> symbol "!"+ AND -> symbol "&"+ MID -> symbol "|"+ DOLLAR -> symbol "$"+ AT -> symbol "@"+ SHARP -> symbol "#"+ LPAREN -> symbol "("+ RPAREN -> symbol ")"+ LBRACKET -> symbol "["+ RBRACKET -> symbol "]"+ LBRACE -> symbol "{"+ RBRACE -> symbol "}"+ SLASH -> symbol "/"+ BACKSLASH -> symbol "\\"+ TILDE -> symbol "~"+ HAT -> symbol "^"+ STAR -> symbol "*"+ UNDERSCORE -> symbol "_"+ MINUS -> symbol "-"+ PLUS -> symbol "+"+ EQUAL -> symbol "="+ LESS -> symbol "<"+ GREATER -> symbol ">"+ EOF -> "end of file"+ FORALL -> symbol "∀"+ EXISTS -> symbol "∃"+ LAND -> symbol "∧"+ LOR -> symbol "∨"+ LNOT -> symbol "¬"+ APPROX -> symbol "≈"+ DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"+ where+ identifier i = "identifier `" ++ i ++ "'"+ txt (TextBegin t) = "start of `" ++ t ++ "'"+ txt (TextContent t) = "text `" ++ t ++ "'"+ txt (TextEnd) = "start of text"+ symbol s = "symbol `" ++ s ++ "'"+ keyword s = "keyword `" ++ s ++ "'"++-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- The input type++type AlexInput = (AlexPosn, -- current position,+ Char, -- previous char+ [Word8], -- remaining bytes of current char+ String) -- current input string++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (p,c,bs,s) = c++alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (p,c,[],[]) = Nothing+alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c+ (b:bs) = UTF8.encodeChar c+ in p' `seq` Just (b, (p', c, bs, s))++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text. It has three+-- fields: the address (number of chacaters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.++data AlexPosn = AlexPn !Int !Int !Int+ deriving (Eq)++instance Show AlexPosn where+ show (AlexPn _ l c) = "line "++show l++" column "++show c++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)+alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1+alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)+++-- -----------------------------------------------------------------------------+-- Default monad+++data AlexState = AlexState {+ alex_pos :: !AlexPosn, -- position at current input location+ alex_inp :: String, -- the current input+ alex_chr :: !Char, -- the character before the input+ alex_scd :: !Int, -- the current startcode+ alex_ocd :: !Int, -- the old startcode before the comment started+ alex_cmt :: [String] -- stack of begin comment identifiers+ }++-- Compile with -funbox-strict-fields for best results!++runAlex :: String -> Alex a -> Either String a+runAlex input (Alex f)+ = case f (AlexState {alex_pos = alexStartPos,+ alex_inp = input,+ alex_chr = '\n',+ alex_scd = 0,+ alex_ocd = 0,+ alex_cmt = []+ }) of+ Left msg -> Left msg+ Right ( _, a ) -> Right a++newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }++instance Functor Alex where+ fmap = liftM++instance Applicative Alex where+ pure = return+ (<*>) = ap++instance Monad Alex where+ m >>= k = Alex $ \s -> case unAlex m s of+ Left msg -> Left msg+ Right (s',a) -> unAlex (k a) s'+ return a = Alex $ \s -> Right (s,a)++alexGetPos :: Alex AlexPosn+alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)++alexGetInput :: Alex AlexInput+alexGetInput+ = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} ->+ Right (s, (pos,c,[],inp))++alexSetInput :: AlexInput -> Alex ()+alexSetInput (pos,c,_,inp)+ = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of+ s@(AlexState{}) -> Right (s, ())++alexError :: String -> Alex a+alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)++alexGetStartCode :: Alex Int+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)++alexSetStartCode :: Int -> Alex ()+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())++alexGetOldStartCode :: Alex Int+alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)++alexSetOldStartCode :: Int -> Alex ()+alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())++alexGetComments :: Alex [String]+alexGetComments = Alex $ \s -> Right (s, alex_cmt s)++alexSetComments :: [String] -> Alex ()+alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())++alexMonadScan = do+ inp <- alexGetInput+ sc <- alexGetStartCode+ case alexScan inp sc of+ AlexEOF -> alexEOF+ AlexError inp' -> alexError "lexical error"+ AlexSkip inp' len -> do+ alexSetInput inp'+ alexMonadScan+ AlexToken inp' len action -> do+ alexSetInput inp'+ action inp len++-- -----------------------------------------------------------------------------+-- Useful token actions++type AlexAction result = AlexInput -> Int -> Alex result++-- just ignore this token and scan another one+skip :: AlexAction Keyword+skip input len = alexMonadScan++-- ignore this token, but set the start code to a new value+begin :: Int -> AlexAction Keyword+begin code input len = do alexSetStartCode code; alexMonadScan++-- | Begin a text starting of the given type.+beginText :: String -> Int -> AlexAction Keyword+beginText ty code _ _ = do+ alexSetStartCode code+ return $ TEXT $ TextBegin ty++-- | End a text.+endText :: Int -> AlexAction Keyword+endText code _ _ = do+ alexSetStartCode code+ return $ TEXT TextEnd++-- | Begin a comment starting with the given sign.+beginComment :: String -> Int -> AlexAction Keyword+beginComment cmtBegin code input len = do+ cmts <- alexGetComments+ alexSetComments $ cmtBegin : cmts+ if null cmts+ then alexGetStartCode >>= alexSetOldStartCode+ else return ()+ alexSetStartCode code+ alexMonadScan++-- | End a comment that started with the given begin comment sign.+endComment :: String -> AlexAction Keyword+endComment cmtBegin input len = do+ cmts <- alexGetComments+ case cmts of+ [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."+ (cmt:cmts') -> do+ if cmt == cmtBegin+ then do+ alexSetComments cmts'+ if null cmts'+ then alexGetOldStartCode >>= alexSetStartCode+ else return ()+ else return ()+ alexMonadScan++-- perform an action for this token, and set the start code to a new value+-- andBegin :: AlexAction result -> Int -> AlexAction result+(action `andBegin` code) input len = do alexSetStartCode code; action input len++alexEOF :: Alex Keyword+alexEOF = return EOF++++}+++
− src/Scyther/Theory/Lexer.x_src_only
@@ -1,416 +0,0 @@-{-{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-matches -fno-warn-unused-binds -fno-warn-missing-signatures #-}-module Scyther.Theory.Lexer where---- Note that this file is not compatible with alex-3.0 and therefore we use--- the autogenerated file in the distributed version. Use this file together--- with a 2.x version of alex in case you have to modify the lexer.--}--$digit = [0-9]-$letter = [a-zA-Z]-$others = [\192-\214\216-\246\248-\255]--@integer = $digit+-@identifierFirst = ($letter | $digit | $others)-@identifierAfter = ($letter | $digit | "_" | $others)-@identifier = @identifierFirst @identifierAfter*-@comment = $printable | $white-@text = $printable | $white-@lineComment = "//".*--tokens :-- <0> $white+ ;-- <0> @lineComment ;- <0> "(*" { beginComment "(*" comment }- <comment> "(*" { beginComment "(*" comment }- <text> "(*" { beginComment "(*" comment }- <comment> "*)" { endComment "(*" } - <0> "/*" { beginComment "/*" comment }- <comment> "/*" { beginComment "/*" comment }- <text> "/*" { beginComment "/*" comment }- <comment> "*/" { endComment "/*" } - <comment> @comment { skip }-- <0> "text{*" { beginText "text" text }- <0> "section{*" { beginText "section" text }- <0> "subsection{*" { beginText "subsection" text }- <text> "*}" { endText 0} - <text> @text { scanString (TEXT . TextContent) }--- <0> "∀" { keyword FORALL }- <0> "∃" { keyword EXISTS }- <0> "∧" { keyword LAND }- <0> "∨" { keyword LOR }- <0> "¬" { keyword LNOT }- <0> "≈" { keyword APPROX }-- <0> "," { keyword COMMA }- <0> "(" { keyword LPAREN }- <0> ")" { keyword RPAREN }- <0> "[" { keyword LBRACKET }- <0> "]" { keyword RBRACKET }- <0> "{" { keyword LBRACE }- <0> "}" { keyword RBRACE }- <0> "/" { keyword SLASH }- <0> "\\" { keyword BACKSLASH }- <0> "'" { keyword SQUOTE }- <0> \" { keyword DQUOTE }- <0> "~" { keyword TILDE }- <0> "^" { keyword HAT }- <0> "=" { keyword EQUAL }- <0> ":" { keyword COLON }- <0> "$" { keyword DOLLAR }- <0> "@" { keyword AT }- <0> "#" { keyword SHARP }- <0> "*" { keyword STAR }- <0> "<" { keyword LESS } - <0> ">" { keyword GREATER } - <0> "?" { keyword QUESTIONMARK } - <0> "!" { keyword BANG } - <0> "&" { keyword AND } - <0> "|" { keyword MID } - <0> "." { keyword DOT } - <0> "_" { keyword UNDERSCORE } - <0> "-" { keyword MINUS } - <0> "+" { keyword PLUS } - <0> "->" { keyword RIGHTARROW } - <0> "<-" { keyword LEFTARROW } - <0> "-->" { keyword LONGRIGHTARROW } - <0> "<--" { keyword LONGLEFTARROW } - <0> @identifier { scanString IDENT}---{---- | Lex a keyword-keyword :: Keyword -> AlexAction Keyword-keyword kw input len = return kw---- | Wrap a string into a keyword-scanString :: (String -> Keyword) -> AlexAction Keyword-scanString kw (_,_,input) len = return $ kw (take len input)--{---- | Scan a string until EOF is encountered.-alexScanTokens :: String -> Either String [Keyword]-alexScanTokens inp = runAlex inp gather- where- gather = do- t <- alexMonadScan- case trace (show t) t of- EOF -> return [EOF]- _ -> (t:) `liftM` gather---- | Scan a file.-scanFile f = do- inp <- readFile f- return $ alexScanTokens inp--}---- | Formal text types.-data TextType = - TextBegin String - | TextContent String - | TextEnd- deriving( Eq, Ord, Show )---- | Lexable Keywords-data Keyword =- IDENT String- | TEXT TextType - | SQUOTE- | DQUOTE- | RIGHTARROW- | LEFTARROW- | LONGRIGHTARROW- | LONGLEFTARROW- | COMMA- | DOT- | COLON- | QUESTIONMARK- | BANG- | AND- | MID- | DOLLAR- | AT- | SHARP- | LPAREN- | RPAREN- | LBRACKET- | RBRACKET- | LBRACE - | RBRACE- | SLASH- | BACKSLASH- | TILDE- | HAT- | STAR- | UNDERSCORE- | MINUS- | PLUS- | EQUAL- | LESS- | GREATER- | EOF- | FORALL- | EXISTS- | LAND- | LOR- | LNOT- | APPROX- -- dummy keyword to get rid of overlapping pattern matches- | DUMMY_KEYWORD- deriving( Eq )--instance Show Keyword where- show kw = case kw of - IDENT i -> identifier i- TEXT t -> txt t- SQUOTE -> symbol "'"- DQUOTE -> symbol "\""- RIGHTARROW -> symbol "->"- LEFTARROW -> symbol "<-"- LONGRIGHTARROW -> symbol "-->"- LONGLEFTARROW -> symbol "<--"- COMMA -> symbol ","- DOT -> symbol "."- COLON -> symbol ":"- QUESTIONMARK -> symbol "?"- BANG -> symbol "!"- AND -> symbol "&"- MID -> symbol "|"- DOLLAR -> symbol "$"- AT -> symbol "@"- SHARP -> symbol "#"- LPAREN -> symbol "("- RPAREN -> symbol ")"- LBRACKET -> symbol "["- RBRACKET -> symbol "]"- LBRACE -> symbol "{"- RBRACE -> symbol "}"- SLASH -> symbol "/"- BACKSLASH -> symbol "\\"- TILDE -> symbol "~"- HAT -> symbol "^"- STAR -> symbol "*"- UNDERSCORE -> symbol "_"- MINUS -> symbol "-"- PLUS -> symbol "+"- EQUAL -> symbol "="- LESS -> symbol "<"- GREATER -> symbol ">"- EOF -> "end of file"- FORALL -> symbol "∀" - EXISTS -> symbol "∃" - LAND -> symbol "∧" - LOR -> symbol "∨" - LNOT -> symbol "¬" - APPROX -> symbol "≈" - DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"- where- identifier i = "identifier `" ++ i ++ "'"- txt (TextBegin t) = "start of `" ++ t ++ "'"- txt (TextContent t) = "text `" ++ t ++ "'"- txt (TextEnd) = "start of text"- symbol s = "symbol `" ++ s ++ "'"- keyword s = "keyword `" ++ s ++ "'"---- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- The input type---type AlexInput = (AlexPosn, -- current position,- Char, -- previous char- String) -- current input string--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,s) = c--alexGetChar :: AlexInput -> Maybe (Char,AlexInput)-alexGetChar (p,c,[]) = Nothing-alexGetChar (p,_,(c:s)) = let p' = alexMove p c in p' `seq`- Just (c, (p', c, s))----- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text. It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.--data AlexPosn = AlexPn !Int !Int !Int- deriving (Eq)--instance Show AlexPosn where- show (AlexPn _ l c) = "line "++show l++" column "++show c--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1-alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)----- -------------------------------------------------------------------------------- Default monad---data AlexState = AlexState {- alex_pos :: !AlexPosn, -- position at current input location- alex_inp :: String, -- the current input- alex_chr :: !Char, -- the character before the input- alex_scd :: !Int, -- the current startcode- alex_ocd :: !Int, -- the old startcode before the comment started- alex_cmt :: [String] -- stack of begin comment identifiers- }---- Compile with -funbox-strict-fields for best results!--runAlex :: String -> Alex a -> Either String a-runAlex input (Alex f) - = case f (AlexState {alex_pos = alexStartPos,- alex_inp = input, - alex_chr = '\n',- alex_scd = 0,- alex_ocd = 0,- alex_cmt = []- }) of - Left msg -> Left msg- Right ( _, a ) -> Right a--newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }--instance Monad Alex where- m >>= k = Alex $ \s -> case unAlex m s of - Left msg -> Left msg- Right (s',a) -> unAlex (k a) s'- return a = Alex $ \s -> Right (s,a)--alexGetPos :: Alex AlexPosn-alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)--alexGetInput :: Alex AlexInput-alexGetInput- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} -> - Right (s, (pos,c,inp))--alexSetInput :: AlexInput -> Alex ()-alexSetInput (pos,c,inp)- = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of- s@(AlexState{}) -> Right (s, ())--alexError :: String -> Alex a-alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)--alexGetStartCode :: Alex Int-alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)--alexSetStartCode :: Int -> Alex ()-alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())--alexGetOldStartCode :: Alex Int-alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)--alexSetOldStartCode :: Int -> Alex ()-alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())--alexGetComments :: Alex [String]-alexGetComments = Alex $ \s -> Right (s, alex_cmt s)--alexSetComments :: [String] -> Alex ()-alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())--alexMonadScan = do- inp <- alexGetInput- sc <- alexGetStartCode- case alexScan inp sc of- AlexEOF -> alexEOF- AlexError inp' -> alexError "lexical error"- AlexSkip inp' len -> do- alexSetInput inp'- alexMonadScan- AlexToken inp' len action -> do- alexSetInput inp'- action inp len---- -------------------------------------------------------------------------------- Useful token actions--type AlexAction result = AlexInput -> Int -> Alex result---- just ignore this token and scan another one-skip :: AlexAction Keyword-skip input len = alexMonadScan---- ignore this token, but set the start code to a new value-begin :: Int -> AlexAction Keyword-begin code input len = do alexSetStartCode code; alexMonadScan---- | Begin a text starting of the given type.-beginText :: String -> Int -> AlexAction Keyword-beginText ty code _ _ = do- alexSetStartCode code- return $ TEXT $ TextBegin ty---- | End a text.-endText :: Int -> AlexAction Keyword-endText code _ _ = do- alexSetStartCode code- return $ TEXT TextEnd---- | Begin a comment starting with the given sign.-beginComment :: String -> Int -> AlexAction Keyword-beginComment cmtBegin code input len = do- cmts <- alexGetComments- alexSetComments $ cmtBegin : cmts- if null cmts- then alexGetStartCode >>= alexSetOldStartCode- else return ()- alexSetStartCode code- alexMonadScan---- | End a comment that started with the given begin comment sign.-endComment :: String -> AlexAction Keyword-endComment cmtBegin input len = do- cmts <- alexGetComments- case cmts of- [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."- (cmt:cmts') -> do- if cmt == cmtBegin - then do- alexSetComments cmts'- if null cmts' - then alexGetOldStartCode >>= alexSetStartCode - else return ()- else return ()- alexMonadScan---- perform an action for this token, and set the start code to a new value--- andBegin :: AlexAction result -> Int -> AlexAction result-(action `andBegin` code) input len = do alexSetStartCode code; action input len--alexEOF :: Alex Keyword-alexEOF = return EOF----}---
src/Scyther/Theory/Parser.hs view
@@ -55,12 +55,13 @@ import Data.Char import Data.List+import Data.Either import qualified Data.Set as S import qualified Data.Map as M import Data.DAG.Simple import Data.Foldable (asum) -import Control.Arrow ( (***) )+import Control.Arrow ( (***), first ) import Control.Monad hiding (sequence) import Control.Applicative hiding (empty, many, optional)@@ -70,7 +71,7 @@ import Text.Parsec.Pos import qualified Scyther.Equalities as E-import Scyther.Facts as F hiding (protocol)+import Scyther.Facts as F hiding (variable, protocol) import Scyther.Sequent import Scyther.Proof import Scyther.Theory@@ -282,7 +283,8 @@ -- TODO: Remove this ugly string hack. pattern :: Parser s Pattern pattern = asum- [ string "1" *> pure mkMultIdentityPat+ [ string "1" *> pure mkMultIdentityPat+ , kw UNDERSCORE *> pure PAny , PConst <$> singleQuoted ident , PMVar <$> (kw QUESTIONMARK *> ident) , PAVar <$> (kw DOLLAR *> ident)@@ -299,13 +301,16 @@ , PSign <$> genFunApp (kw LBRACE) (kw RBRACE) (string "sign") tuplepattern <*> pattern , PMVar <$> tempIdentifier ]- where- tempIdentifier = do i <- identifier- if isLetter (head i)- then return (Id (' ':i))- else fail $ "invalid variable name '" ++ i ++- "': variable names must start with a letter" +-- | Parse a specification variable. Untyped identifiers are handled as in+-- 'pattern'.+specVariable :: Parser s VarId+specVariable = asum+ [ SMVar <$> (kw QUESTIONMARK *> ident)+ , SAVar <$> (kw DOLLAR *> ident)+ , SMVar <$> tempIdentifier+ ]+ -- | Parse multiple ^ applications as a left-associative list of exponentations -- hackily marked using hashes and constant identifiers. exppattern :: Parser s Pattern@@ -321,6 +326,15 @@ tuplepattern :: Parser s Pattern tuplepattern = chainr1 multpattern (PTup <$ kw COMMA) +-- | Parse a local identifier which is yet unresolved. The identifier is+-- prefixed by a space to mark it for later resolution.+tempIdentifier :: Parser s Id+tempIdentifier = do i <- identifier+ if isLetter (head i)+ then return (Id (' ':i))+ else fail $ "invalid variable name '" ++ i +++ "': variable names must start with a letter"+ -- | Drops the space prefix used for identifying identifiers that need to be -- resolved later. dropSpacePrefix :: Id -> Id@@ -338,23 +352,11 @@ -- | Resolve all identifiers in the pattern. resolveIds :: S.Set Id -> S.Set Id -> Pattern -> Pattern-resolveIds avars mvars = go+resolveIds avars mvars = patMapFMV resolve where- resolve = resolveId avars mvars- go pt@(PConst _) = pt- go pt@(PFresh _) = pt- go pt@(PAVar _) = pt- go pt@(PMVar i) = case getId i of- ' ':i' -> resolve (Id i') -- marked for resolution- _ -> pt- go (PHash pt) = PHash (go pt)- go (PTup pt1 pt2) = PTup (go pt1) (go pt2)- go (PEnc pt1 pt2) = PEnc (go pt1) (go pt2)- go (PSign pt1 pt2) = PSign (go pt1) (go pt2)- go (PSymK pt1 pt2) = PSymK (go pt1) (go pt2)- go (PShrK pt1 pt2) = PShrK (go pt1) (go pt2)- go (PAsymPK pt) = PAsymPK (go pt)- go (PAsymSK pt) = PAsymSK (go pt)+ resolve i = case getId i of+ ' ':i' -> resolveId avars mvars (Id i')+ _ -> PMVar i -- | Resolve identifiers as identifiers of the given role. -- PRE: The role must use disjoint identifiers for fresh messages, agent@@ -362,7 +364,21 @@ resolveIdsLocalToRole :: Role -> Pattern -> Pattern resolveIdsLocalToRole role = resolveIds (roleFAV role) (roleFMV role) +-- | Resolve the type of a specification variable according to the set of+-- agent and message variables.+--+-- TODO: Better error handling.+resolveVarId :: S.Set Id -> S.Set Id -> VarId -> VarId+resolveVarId avars mvars (SMVar i) = case getId i of+ ' ':i'+ | Id i' `S.member` avars -> SAVar (Id i')+ | Id i' `S.member` mvars -> SMVar (Id i')+ | otherwise -> error $ "resolveVarId: '" ++ i' +++ "' resolves to neither agent nor message variable"+ _ -> SMVar i+resolveVarId _ _ v = v + -- Messages ----------- @@ -463,59 +479,73 @@ -} --- | Parse a single transfer.-transfer :: Parser s [(Id, RoleStep)]-transfer = do+-- | Parse a single transfer with the given label.+transfer :: Label -> Parser s [(Id, RoleStep)]+transfer lbl =+ do right <- kw RIGHTARROW *> ident <* kw COLON+ pt <- tuplepattern+ return [(right, Recv lbl pt)]+ <|>+ do right <- kw LEFTARROW *> ident <* kw COLON+ ptr <- tuplepattern+ (do left <- try $ ident <* kw LEFTARROW <* kw COLON+ ptl <- tuplepattern+ return [(left, Recv lbl ptl),(right, Send lbl ptr)]+ <|>+ return [(right, Send lbl ptr)]+ )+ <|>+ do left <- ident+ (do kw RIGHTARROW+ (do right <- ident <* kw COLON+ pt <- tuplepattern+ return [(left,Send lbl pt), (right, Recv lbl pt)]+ <|>+ do ptl <- kw COLON *> tuplepattern+ (do right <- kw RIGHTARROW *> ident <* kw COLON+ ptr <- tuplepattern+ return [(left,Send lbl ptl), (right, Recv lbl ptr)]+ <|>+ do return [(left, Send lbl ptl)]+ )+ )+ <|>+ do kw LEFTARROW+ (do pt <- kw COLON *> tuplepattern+ return [(left, Recv lbl pt)]+ <|>+ do right <- ident <* kw COLON+ pt <- tuplepattern+ return [(left, Recv lbl pt), (right, Send lbl pt)]+ )+ )++-- | Try to parse a local computation with the given label.+compute :: Label -> Parser s [(Id, RoleStep)]+compute lbl = do+ actor <- try $ ident <* kw COLON+ v <- specVariable+ eq <- (kw RIGHTARROW *> pure True) <|> (kw SHARP *> pure False)+ ptr <- tuplepattern+ return [(actor, Match lbl eq v ptr)]++-- | Parse a labeled part of a protocol specification, i.e., either a transfer+-- or a computation.+labeledSteps :: Parser s [(Id, RoleStep)]+labeledSteps = do lbl <- Label <$> identifier <* kw DOT- (do right <- kw RIGHTARROW *> ident <* kw COLON- pt <- tuplepattern- return [(right, Recv lbl pt)]- <|>- do right <- kw LEFTARROW *> ident <* kw COLON- ptr <- tuplepattern- (do left <- try $ ident <* kw LEFTARROW <* kw COLON- ptl <- tuplepattern- return [(left, Recv lbl ptl),(right, Send lbl ptr)]- <|>- return [(right, Send lbl ptr)]- )- <|>- do left <- ident- (do kw RIGHTARROW- (do right <- ident <* kw COLON- pt <- tuplepattern- return [(left,Send lbl pt), (right, Recv lbl pt)]- <|>- do ptl <- kw COLON *> tuplepattern- (do right <- kw RIGHTARROW *> ident <* kw COLON- ptr <- tuplepattern- return [(left,Send lbl ptl), (right, Recv lbl ptr)]- <|>- do return [(left, Send lbl ptl)]- )- )- <|>- do kw LEFTARROW- (do pt <- kw COLON *> tuplepattern- return [(left, Recv lbl pt)]- <|>- do right <- ident <* kw COLON- pt <- tuplepattern- return [(left, Recv lbl pt), (right, Send lbl pt)]- )- )- )+ compute lbl <|> transfer lbl -- | Parse a protocol. protocol :: Parser s Protocol protocol = do name <- string "protocol" *> identifier- transfers <- concat <$> braced (many1 transfer)- -- convert parsed transfers into role scripts- let roleIds = S.fromList $ map fst transfers+ allSteps <- concat <$> braced (many1 labeledSteps)+ -- convert parsed steps into role scripts+ let roleIds = S.fromList $ map fst allSteps roles = do actor <- S.toList roleIds- let steps = [ step | (i, step) <- transfers, i == actor ]+ let steps = [ step | (i, step) <- allSteps, i == actor ] return $ Role (getId actor) (ensureFreshSteps actor (S.map addSpacePrefix roleIds) steps) return $ Protocol name roles@@ -526,18 +556,25 @@ ensureFreshSteps actor possibleAvars = go (S.singleton (addSpacePrefix actor)) S.empty S.empty where+ -- TODO: Make sure that this does what one expects. go _ _ _ [] = []- go avars mvars fresh (Send l pt : rs) =- let avars' = avars `S.union` (((patFMV pt `S.intersection` possibleAvars)- `S.difference` mvars) `S.difference` fresh)- fresh' = fresh `S.union` ((patFMV pt `S.difference` avars') `S.difference` mvars)- pt' = resolveIds (dropSpacePrefixes avars') (dropSpacePrefixes mvars) pt- in Send l pt' : go avars' mvars fresh' rs- go avars mvars fresh (Recv l pt : rs) =- let mvars' = mvars `S.union` ((patFMV pt `S.difference` avars) `S.difference` fresh)- pt' = resolveIds (dropSpacePrefixes avars) (dropSpacePrefixes mvars') pt- in Recv l pt' : go avars mvars' fresh rs+ go avars mvars fresh (step : rs) = step' : go avars' mvars' fresh' rs+ where+ avars' = avars `S.union` (((stepUsedMV step `S.intersection` possibleAvars)+ `S.difference` mvars) `S.difference` fresh)+ mvars' = mvars `S.union` ((stepBoundMV step `S.difference` avars')+ `S.difference` fresh)+ fresh' = fresh `S.union` ((stepUsedMV step `S.difference` avars')+ `S.difference` mvars')+ pt' = resolveIds (dropSpacePrefixes avars') (dropSpacePrefixes mvars')+ (stepPat step)+ step' = case step of+ Send l _ -> Send l pt'+ Recv l _ -> Recv l pt'+ Match l eq v _ -> Match l eq (resolveVarId (dropSpacePrefixes avars')+ (dropSpacePrefixes mvars') v) pt' + ------------------------------------------------------------------------------ -- Parse Claims ------------------------------------------------------------------------------@@ -588,10 +625,9 @@ n@(PFresh i) <- S.toList $ subpatterns pt guard (not (plainUse pt n) && firstUse n) return $ secrecySe (MFresh . Fresh) i- Recv _ pt -> do- v@(PMVar i) <- S.toList $ subpatterns pt- guard (not (plainUse pt v) && firstUse v)- return $ secrecySe (MMVar . MVar) i+ Recv _ pt -> varSequents pt+ Match _ True _ pt -> varSequents pt+ Match _ False _ _ -> mzero where (tid, prem0) = freshTID (empty proto) (prefix, _) = break (step ==) $ roleSteps role@@ -599,6 +635,10 @@ plainUse pt = (`S.member` splitpatterns pt) avars = [ MAVar (AVar (LocalId (v,tid))) | (PAVar v) <- S.toList . S.unions . map (subpatterns.stepPat) $ roleSteps role ]+ varSequents pt = do+ v@(PMVar i) <- S.toList $ subpatterns pt+ guard (not (plainUse pt v) && firstUse v)+ return $ secrecySe (MMVar . MVar) i secrecySe constr i = ( (++("_"++roleName role++"_sec_"++getId i)) , Sequent prem (FAtom (ABool False)) Standard@@ -628,7 +668,8 @@ where steps = roleSteps role (tid, prem0) = freshTID (empty proto)- mkStepSequents (_, Recv _ _ ) = []+ mkStepSequents (_, Recv _ _) = []+ mkStepSequents (_, Match _ _ _ _) = [] mkStepSequents (prefix, step@(Send _ pt)) = do n@(PFresh i) <- S.toList $ splitpatterns pt guard (n `S.notMember` S.unions (map (subpatterns.stepPat) prefix))@@ -858,17 +899,30 @@ falseConcl :: Parser s Formula falseConcl = doubleQuoted (string "False" *> pure (FAtom (ABool False))) +-- | Parse a conclusion formula consisting of raw facts.+--+-- TODO: Handling of role equalities is incomplete.+factsFormula :: Protocol -> E.Mapping -> Parser s Formula+factsFormula proto mapping = doubleQuoted formula+ where+ formula = foldr1 FDisj `liftM` sepBy1 term (kw MID)+ term = do+ conjuncts <- sepBy1 factOrFormula (kw AND)+ let (facts, subformulas) = first concat $ partitionEithers conjuncts+ roleeqs <- extractRoleEqs proto facts+ let mapping' = foldr (uncurry E.addTIDRoleMapping) mapping roleeqs+ atoms <- (map (AEq . E.TIDRoleEq) roleeqs ++) `liftM`+ sequence [ mkAtom mapping' | RawAtom mkAtom <- facts ]+ return $ foldr1 FConj (map FAtom atoms ++ subformulas)+ factOrFormula = (Left <$> try rawFacts) <|> (Right <$> parens formula)+ -- | Parse a conclusion stating existence of some threads of a specific -- structure. existenceConcl :: Protocol -> E.Mapping -> Parser s Formula existenceConcl proto mapping = do tids <- map (Left . TID) <$> (threads <|> pure [])- facts <- concat <$> doubleQuoted (sepBy1 rawFacts (kw AND))- roleeqs <- extractRoleEqs proto facts- let mapping' = foldr (uncurry E.addTIDRoleMapping) mapping roleeqs- atoms <- (map (AEq . E.TIDRoleEq) roleeqs ++) `liftM`- sequence [ mkAtom mapping' | RawAtom mkAtom <- facts ]- return $ foldr FExists (foldr1 FConj . map FAtom $ atoms) tids+ inner <- factsFormula proto mapping+ return $ foldr FExists inner tids where singleThread = pure <$> (strings ["a", "thread"] *> integer) multiThreads = strings ["threads"] *> sepBy1 integer (kw COMMA)@@ -892,9 +946,10 @@ prems0 <- foldM (flip quantifyTID) (F.empty proto) quantifiers optPrems <- conjoinAtoms atoms prems0 prems <- maybe (fail "contradictory premises") return optPrems+ qualifier <- option Standard (string "injectively" *> pure Injective) string "imply" concl <- conclusion proto mapping- return $ Sequent prems concl Standard+ return $ Sequent prems concl qualifier {- -- | Construct the premise modifier. The given set of role equalities is used
src/Scyther/Theory/Pretty.hs view
@@ -303,7 +303,7 @@ prettySoundness thy = case unsoundTheorems thy of [] -> emptyDoc ths -> vcat $- map text ["", "(* NOTE that the proofs of the following theorems are UNSOUND:", ""] +++ map text ["", "(* NOTE that the proofs of the following theorems are INVALID:", ""] ++ map ppThm ths ++ map text ["*)"] where@@ -342,8 +342,8 @@ -- | Convert a triviality reason to a string representing the corresponding -- Isabelle tactic. isaTactic :: TrivReason -> String-isaTactic TrivContradictoryPremises = "((clarsimp, order?) | order)"-isaTactic (TrivLongTermKeySecrecy _) = "(fastforce dest!: ltk_secrecy)"+isaTactic TrivContradictoryPremises = "((clarsimp, order?) | order | fast)"+isaTactic (TrivLongTermKeySecrecy _) = "(auto dest!: ltk_secrecy)" isaTactic TrivPremisesImplyConclusion = "(fastforce intro: event_predOrdI split: if_splits)" -- | Isabelle proof of long-term key secrecy.@@ -491,9 +491,9 @@ | any (`isPrefixOf` name) ["ik0", "fake"] || null newVars = text name | otherwise = parens $ text name <-> hsep (map ppNewVar newVars) prettyChainRuleQED _ trivCases- | null tactics = kwQED <-> text "(insert facts, fastforce+)?" -- be conservative+ | null tactics = kwQED <-> text "(safe?, simp_all?, insert facts, (fastforce+)?)" -- be conservative | otherwise =- kwQED <-> text "(insert facts, (" <> hsep (intersperse (text "|") tactics) <> text ")+)?"+ kwQED <-> text "(safe?, simp_all?, insert facts, ((" <> hsep (intersperse (text "|") tactics) <> text ")+)?)" where tactics = map text . nub . map isaTactic . snd $ genericChainRuleSplitCases snd trivCases @@ -519,10 +519,11 @@ monoTyp = typName ++ ".monoTyp" prettyTypingCase typName name =- kwCase <-> text ("("++ name ++" t r s") <-> prettyTID 0 <> text") note facts = this" $-$+ kwCase <-> text ("("++ name ++" t r s") <-> prettyTID 0 <> text")" $-$ text ("then interpret state: "++ typingLocale typName ++" t r s") $-$ nest 2 (text "by unfold_locales auto") $-$- text "show ?case using facts"+ text ("note_prefix_closed (state) facts = " ++ name) $-$+ text "thus ?case" -- equality splitting prettySplitEqCase name =
src/Scyther/Typing.hs view
@@ -66,7 +66,12 @@ normType (AsymSKT ty) = AsymSKT ty normType ty = ty +-- | Split all sums in a type term and return the basic types.+splitSums :: Type -> [Type]+splitSums (SumT ty1 ty2) = splitSums ty1 `mplus` splitSums ty2+splitSums ty = pure ty + ------------------------------------------------------------------------------ -- Type annotations on messages ------------------------------------------------------------------------------@@ -107,55 +112,96 @@ rolemap = M.fromList $ zip (protoRoles proto) [1..] steps = map (second (rolemap M.!)) . toposort $ protoOrd proto - typeStep eqs (Send _ _, _) = do- return eqs- typeStep eqs (recv@(Recv lR ptR), tidR) =+ typeStep eqs (Send _ _, _) = return eqs+ typeStep eqs step@(Match _ True v pt, tidM) = do+ eqs' <- lift $ E.solve [E.MsgEq (instVar tidM v, inst tidM pt)] eqs+ lty <- variable (const . return $ AgentT) (lookupType step) v+ typeMatchVars step lty (E.getMVarEqs eqs')+ return eqs'+ typeStep eqs (Match _ _ _ _, _) = return eqs+ typeStep eqs step@(Recv lR ptR, tidR) = case [ send | send@(Send lS _, _) <- steps, lS == lR ] of [] -> do -- no matching send: assume intruder knows all message variables -- in the received pattern that are not yet mapped. sequence_ $ do PMVar v <- S.toList $ subpatterns ptR- return (knownAtRecv v)+ return (knownAtRecv step v) return eqs ((Send _ ptS, tidS):_) -> do eqs' <- lift $ E.solve [E.MsgEq (inst tidR ptR, inst tidS ptS)] eqs- mapM_ typeMVar (E.getMVarEqs eqs')+ mapM_ (typeMVar step) (E.getMVarEqs eqs') -- variables not mapped yet are mapped to they known type. sequence_ $ do PMVar v <- S.toList $ subpatterns ptR- return (knownAtRecv v)+ return (knownAtRecv step v) return eqs' _ -> error "mscTyping: the impossible happened"++ lookupType (_step, tid) v = gets (M.! (v, roleeqs M.! tid))++ keepExisting _new old = old++ typeMVar (step, tid) (MVar (LocalId (v, vTid)), m)+ | vTid == tid && PMVar v `S.member` splitpatterns (stepPat step) =+ noteType (KnownT step)+ | otherwise =+ noteType $ maybe (KnownT step) (SumT (KnownT step)) (typeMsg m) where- typeMVar (MVar (LocalId (v, vTid)), m) - | vTid == tidR && PMVar v `S.member` splitpatterns ptR =- noteType (KnownT recv)- | otherwise = - noteType $ maybe (KnownT recv) (SumT (KnownT recv)) (typeMsg m)- where- noteType = modify . M.insertWith keepSimpler (v, roleeqs M.! vTid)- -- prefer non-sum-types and then the existing one- keepSimpler _ x@(KnownT _) = x- keepSimpler x@(KnownT _) _ = x- keepSimpler _ x = x+ noteType = modify . M.insertWith keepSimpler (v, roleeqs M.! vTid)+ -- prefer non-sum-types and then the existing one+ keepSimpler _ x@(KnownT _) = x+ keepSimpler x@(KnownT _) _ = x+ keepSimpler _ x = x - knownAtRecv v = - modify (M.insertWith keepExisting (v, roleeqs M.! tidR) (KnownT recv))- where- keepExisting _new old = old- - typeMsg (MFresh (Fresh fr)) = pure $ NonceT (roleeqs M.! lidTID fr) (lidId fr)- typeMsg (MConst c) = pure $ ConstT c- typeMsg (MAVar _) = pure $ AgentT- typeMsg (MMVar _) = Nothing- typeMsg (MHash m) = HashT <$> typeMsg m- typeMsg (MTup m1 m2) = TupT <$> typeMsg m1 <*> typeMsg m2- typeMsg (MEnc m1 m2) = EncT <$> typeMsg m1 <*> typeMsg m2- typeMsg (MSymK m1 m2) = SymKT <$> typeMsg m1 <*> typeMsg m2- typeMsg (MAsymPK m) = AsymPKT <$> typeMsg m- typeMsg (MAsymSK m) = AsymSKT <$> typeMsg m- typeMsg (MArbMsg _) = error $ "mscTyping: agent variable encountered"- typeMsg (MInvKey _) = error $ "mscTyping: key inversion encountered"- typeMsg (MShrK _ _) = error $ "mscTyping: bi-directional shared key encountered"+ knownAtRecv (step, tid) v =+ modify (M.insertWith keepExisting (v, roleeqs M.! tid) (KnownT step))++ -- Infer types of variables on RHS of a matching step. We use both the type+ -- of the LHS variable and the types implied by the message equalities.+ typeMatchVars (step, tid) lty meqs = mapM_ noteType vars+ where+ vars = [v | PMVar v <- S.toList $ subpatterns $ stepPat step]+ noteType v = modify $ M.insertWith keepExisting (v, roleeqs M.! tid) (inferType v)+ inferType v = case known ++ structuralTypesOf v of+ [] -> error $ "mscTyping: Cannot infer type. Impossible match?"+ tys -> foldr1 SumT tys+ structuralTypesOf v = S.toList $ M.findWithDefault S.empty v structuralTypes+ -- Due to deficiencies of the well-typedness proof strategy, use the+ -- current match step in KnownT types.+ known = case [ty | ty@(KnownT _) <- splitSums lty] of+ [] -> []+ _ -> [KnownT step]++ structuralTypes = transfer lty (stepPat step) eqTypes+ eqTypes = foldr eqType1 M.empty meqs+ eqType1 (MVar (LocalId (v, vTid)), msg)+ | vTid == tid = maybe id (M.insert v . S.singleton) (typeMsg msg)+ | otherwise = id++ transfer (SumT ty1 ty2) pt = transfer ty1 pt . transfer ty2 pt+ transfer (KnownT _) _ = id+ transfer ty (PMVar v) = M.insertWith S.union v (S.singleton ty)+ transfer (HashT ty) (PHash pt) = transfer ty pt+ transfer (EncT ty1 ty2) (PEnc p1 p2) = transfer ty1 p1 . transfer ty2 p2+ transfer (TupT ty1 ty2) (PTup p1 p2) = transfer ty1 p1 . transfer ty2 p2+ transfer (SymKT ty1 ty2) (PSymK p1 p2) = transfer ty1 p1 . transfer ty2 p2+ transfer (AsymPKT ty) (PAsymPK pt) = transfer ty pt+ transfer (AsymSKT ty) (PAsymSK pt) = transfer ty pt+ transfer _ _ = id+++ typeMsg (MFresh (Fresh fr)) = pure $ NonceT (roleeqs M.! lidTID fr) (lidId fr)+ typeMsg (MConst c) = pure $ ConstT c+ typeMsg (MAVar _) = pure $ AgentT+ typeMsg (MMVar _) = Nothing+ typeMsg (MHash m) = HashT <$> typeMsg m+ typeMsg (MTup m1 m2) = TupT <$> typeMsg m1 <*> typeMsg m2+ typeMsg (MEnc m1 m2) = EncT <$> typeMsg m1 <*> typeMsg m2+ typeMsg (MSymK m1 m2) = SymKT <$> typeMsg m1 <*> typeMsg m2+ typeMsg (MAsymPK m) = AsymPKT <$> typeMsg m+ typeMsg (MAsymSK m) = AsymSKT <$> typeMsg m+ typeMsg (MArbMsg _) = error $ "mscTyping: logical variable encountered"+ typeMsg (MInvKey _) = error $ "mscTyping: key inversion encountered"+ typeMsg (MShrK _ _) = error $ "mscTyping: bi-directional shared key encountered" ------------------------------------------------------------------------------
src/System/Isabelle.hs view
@@ -2,7 +2,7 @@ -- -- Requirements: ----- 1. A working installation of Isabelle2013-2 (http://isabelle.in.tum.de/)+-- 1. A working installation of Isabelle2014 (http://isabelle.in.tum.de/) -- 2. The \'isabelle\' command must be on the PATH. -- module System.Isabelle (
src/Text/Dot.hs view
@@ -51,7 +51,8 @@ ) where import Data.List (intersperse)-import Control.Monad (liftM)+import Control.Applicative+import Control.Monad (ap, liftM) data NodeId = NodeId String | UserNodeId Int@@ -69,6 +70,13 @@ | SubGraph NodeId [GraphElement] data Dot a = Dot { unDot :: Int -> ([GraphElement],Int,a) }++instance Functor Dot where+ fmap = liftM++instance Applicative Dot where+ pure = return+ (<*>) = ap instance Monad Dot where return a = Dot $ \ uq -> ([],uq,a)
src/Text/Isar.hs view
@@ -25,12 +25,14 @@ , isaForall , isaLambda , isaAnd+ , isaOr , isaImplies , isaNotIn , isaIn , isaSubsetEq , isaAlpha , isaSublocale+ , isaNotEq -- * Extensions of 'Text.PrettyPrint' , module Text.PrettyPrint.Class@@ -266,6 +268,12 @@ | isPlainStyle conf = text "&" | otherwise = symbol "\\<and>" +-- | The logical or symbol: @|@+isaOr :: Document d => IsarConf -> d+isaOr conf+ | isPlainStyle conf = text "|"+ | otherwise = symbol "\\<or>"+ -- | The logical and symbol: @-->@ isaImplies :: Document d => IsarConf -> d isaImplies conf@@ -283,6 +291,12 @@ isaSublocale conf | isPlainStyle conf = text "<" | otherwise = symbol "\\<subseteq>"++-- | The not equal symbol: @~=@+isaNotEq :: Document d => IsarConf -> d+isaNotEq conf+ | isPlainStyle conf = text "~="+ | otherwise = symbol "\\<noteq>" ------------------------------------------------------------------------------ -- Isabelle theory components