diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -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
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -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>
+![master branch build-status](https://travis-ci.org/meiersi/scyther-proof.svg?branch=master)
 
+- 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
    -----------------------------------
diff --git a/data/examples/classic/ASW_optimistic_contract.spthy b/data/examples/classic/ASW_optimistic_contract.spthy
new file mode 100644
--- /dev/null
+++ b/data/examples/classic/ASW_optimistic_contract.spthy
@@ -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
diff --git a/data/examples/classic/BrandsChaum.spthy b/data/examples/classic/BrandsChaum.spthy
new file mode 100644
--- /dev/null
+++ b/data/examples/classic/BrandsChaum.spthy
@@ -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
diff --git a/data/examples/classic/BrandsChaum_iterated.spthy b/data/examples/classic/BrandsChaum_iterated.spthy
new file mode 100644
--- /dev/null
+++ b/data/examples/classic/BrandsChaum_iterated.spthy
@@ -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
diff --git a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-bdkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-2-udkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy
--- a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-3_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-bdkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-parallel-proofs/isoiec-9798-4-udkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-bdkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798-2-udkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798-3_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-bdkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798-4-udkey_cert_auto.thy
@@ -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
diff --git a/data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy b/data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy
--- a/data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy
+++ b/data/examples/iso9798/isabelle-proofs/isoiec-9798_cert_auto.thy
@@ -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
diff --git a/data/isabelle/README b/data/isabelle/README
--- a/data/isabelle/README
+++ b/data/isabelle/README
@@ -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>
+![master branch build-status](https://travis-ci.org/meiersi/scyther-proof.svg?branch=master)
 
+- 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
    -----------------------------------
diff --git a/data/isabelle/document/root.tex b/data/isabelle/document/root.tex
--- a/data/isabelle/document/root.tex
+++ b/data/isabelle/document/root.tex
@@ -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
diff --git a/data/isabelle/src/ESPLogic/Automation.thy b/data/isabelle/src/ESPLogic/Automation.thy
--- a/data/isabelle/src/ESPLogic/Automation.thy
+++ b/data/isabelle/src/ESPLogic/Automation.thy
@@ -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))))
diff --git a/data/isabelle/src/ESPLogic/Capabilities.thy b/data/isabelle/src/ESPLogic/Capabilities.thy
--- a/data/isabelle/src/ESPLogic/Capabilities.thy
+++ b/data/isabelle/src/ESPLogic/Capabilities.thy
@@ -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)
 
 
diff --git a/data/isabelle/src/ESPLogic/DistinctList.thy b/data/isabelle/src/ESPLogic/DistinctList.thy
--- a/data/isabelle/src/ESPLogic/DistinctList.thy
+++ b/data/isabelle/src/ESPLogic/DistinctList.thy
@@ -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"
diff --git a/data/isabelle/src/ESPLogic/ExecMessage.thy b/data/isabelle/src/ESPLogic/ExecMessage.thy
--- a/data/isabelle/src/ESPLogic/ExecMessage.thy
+++ b/data/isabelle/src/ESPLogic/ExecMessage.thy
@@ -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}  *}
diff --git a/data/isabelle/src/ESPLogic/ExplicitModel.thy b/data/isabelle/src/ESPLogic/ExplicitModel.thy
--- a/data/isabelle/src/ESPLogic/ExplicitModel.thy
+++ b/data/isabelle/src/ESPLogic/ExplicitModel.thy
@@ -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)
diff --git a/data/isabelle/src/ESPLogic/HOL_ext.thy b/data/isabelle/src/ESPLogic/HOL_ext.thy
--- a/data/isabelle/src/ESPLogic/HOL_ext.thy
+++ b/data/isabelle/src/ESPLogic/HOL_ext.thy
@@ -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{* 
diff --git a/data/isabelle/src/ESPLogic/Hints.thy b/data/isabelle/src/ESPLogic/Hints.thy
--- a/data/isabelle/src/ESPLogic/Hints.thy
+++ b/data/isabelle/src/ESPLogic/Hints.thy
@@ -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;
diff --git a/data/isabelle/src/ESPLogic/InferenceRules.thy b/data/isabelle/src/ESPLogic/InferenceRules.thy
--- a/data/isabelle/src/ESPLogic/InferenceRules.thy
+++ b/data/isabelle/src/ESPLogic/InferenceRules.thy
@@ -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
 
diff --git a/data/isabelle/src/ESPLogic/Protocol.thy b/data/isabelle/src/ESPLogic/Protocol.thy
--- a/data/isabelle/src/ESPLogic/Protocol.thy
+++ b/data/isabelle/src/ESPLogic/Protocol.thy
@@ -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
diff --git a/data/isabelle/src/ESPLogic/Syntax.thy b/data/isabelle/src/ESPLogic/Syntax.thy
--- a/data/isabelle/src/ESPLogic/Syntax.thy
+++ b/data/isabelle/src/ESPLogic/Syntax.thy
@@ -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 *}
diff --git a/data/isabelle/src/ESPLogic/Unify.thy b/data/isabelle/src/ESPLogic/Unify.thy
--- a/data/isabelle/src/ESPLogic/Unify.thy
+++ b/data/isabelle/src/ESPLogic/Unify.thy
@@ -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;
 
diff --git a/data/isabelle/src/ESPLogic/WeakTyping.thy b/data/isabelle/src/ESPLogic/WeakTyping.thy
--- a/data/isabelle/src/ESPLogic/WeakTyping.thy
+++ b/data/isabelle/src/ESPLogic/WeakTyping.thy
@@ -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''
       )
diff --git a/data/isabelle/src/ESPLogic/espl_definitions.ML b/data/isabelle/src/ESPLogic/espl_definitions.ML
--- a/data/isabelle/src/ESPLogic/espl_definitions.ML
+++ b/data/isabelle/src/ESPLogic/espl_definitions.ML
@@ -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
diff --git a/data/isabelle/src/ESPLogic/espl_methods.ML b/data/isabelle/src/ESPLogic/espl_methods.ML
--- a/data/isabelle/src/ESPLogic/espl_methods.ML
+++ b/data/isabelle/src/ESPLogic/espl_methods.ML
@@ -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)
diff --git a/data/isabelle/src/ESPLogic/espl_utils.ML b/data/isabelle/src/ESPLogic/espl_utils.ML
--- a/data/isabelle/src/ESPLogic/espl_utils.ML
+++ b/data/isabelle/src/ESPLogic/espl_utils.ML
@@ -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
diff --git a/data/isabelle/src/isar-keywords.el b/data/isabelle/src/isar-keywords.el
deleted file mode 100644
--- a/data/isabelle/src/isar-keywords.el
+++ /dev/null
@@ -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)
diff --git a/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs b/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs
@@ -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
+
diff --git a/scyther-proof.cabal b/scyther-proof.cabal
--- a/scyther-proof.cabal
+++ b/scyther-proof.cabal
@@ -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
diff --git a/src/Control/Monad/BoundedDFS.hs b/src/Control/Monad/BoundedDFS.hs
--- a/src/Control/Monad/BoundedDFS.hs
+++ b/src/Control/Monad/BoundedDFS.hs
@@ -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
 
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -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 ++ "'"
-            ]
 
diff --git a/src/Scyther/Equalities.hs b/src/Scyther/Equalities.hs
--- a/src/Scyther/Equalities.hs
+++ b/src/Scyther/Equalities.hs
@@ -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 '.'
 
 
 {-
diff --git a/src/Scyther/Facts.hs b/src/Scyther/Facts.hs
--- a/src/Scyther/Facts.hs
+++ b/src/Scyther/Facts.hs
@@ -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) ++
diff --git a/src/Scyther/Formula.hs b/src/Scyther/Formula.hs
--- a/src/Scyther/Formula.hs
+++ b/src/Scyther/Formula.hs
@@ -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
diff --git a/src/Scyther/GoalFlow.hs b/src/Scyther/GoalFlow.hs
--- a/src/Scyther/GoalFlow.hs
+++ b/src/Scyther/GoalFlow.hs
@@ -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)]
diff --git a/src/Scyther/Message.hs b/src/Scyther/Message.hs
--- a/src/Scyther/Message.hs
+++ b/src/Scyther/Message.hs
@@ -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
diff --git a/src/Scyther/Protocol.hs b/src/Scyther/Protocol.hs
--- a/src/Scyther/Protocol.hs
+++ b/src/Scyther/Protocol.hs
@@ -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
diff --git a/src/Scyther/Sequent.hs b/src/Scyther/Sequent.hs
--- a/src/Scyther/Sequent.hs
+++ b/src/Scyther/Sequent.hs
@@ -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
 
diff --git a/src/Scyther/Theory.hs b/src/Scyther/Theory.hs
--- a/src/Scyther/Theory.hs
+++ b/src/Scyther/Theory.hs
@@ -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
 
diff --git a/src/Scyther/Theory/Dot.hs b/src/Scyther/Theory/Dot.hs
--- a/src/Scyther/Theory/Dot.hs
+++ b/src/Scyther/Theory/Dot.hs
@@ -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")]
diff --git a/src/Scyther/Theory/Lexer.hs b/src/Scyther/Theory/Lexer.hs
deleted file mode 100644
--- a/src/Scyther/Theory/Lexer.hs
+++ /dev/null
@@ -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
diff --git a/src/Scyther/Theory/Lexer.x b/src/Scyther/Theory/Lexer.x
new file mode 100644
--- /dev/null
+++ b/src/Scyther/Theory/Lexer.x
@@ -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
+
+
+
+}
+
+
+
diff --git a/src/Scyther/Theory/Lexer.x_src_only b/src/Scyther/Theory/Lexer.x_src_only
deleted file mode 100644
--- a/src/Scyther/Theory/Lexer.x_src_only
+++ /dev/null
@@ -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
-
-
-
-}
-
-
-
diff --git a/src/Scyther/Theory/Parser.hs b/src/Scyther/Theory/Parser.hs
--- a/src/Scyther/Theory/Parser.hs
+++ b/src/Scyther/Theory/Parser.hs
@@ -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
diff --git a/src/Scyther/Theory/Pretty.hs b/src/Scyther/Theory/Pretty.hs
--- a/src/Scyther/Theory/Pretty.hs
+++ b/src/Scyther/Theory/Pretty.hs
@@ -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 =
diff --git a/src/Scyther/Typing.hs b/src/Scyther/Typing.hs
--- a/src/Scyther/Typing.hs
+++ b/src/Scyther/Typing.hs
@@ -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"
 
 
 ------------------------------------------------------------------------------
diff --git a/src/System/Isabelle.hs b/src/System/Isabelle.hs
--- a/src/System/Isabelle.hs
+++ b/src/System/Isabelle.hs
@@ -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 (
diff --git a/src/Text/Dot.hs b/src/Text/Dot.hs
--- a/src/Text/Dot.hs
+++ b/src/Text/Dot.hs
@@ -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)
diff --git a/src/Text/Isar.hs b/src/Text/Isar.hs
--- a/src/Text/Isar.hs
+++ b/src/Text/Isar.hs
@@ -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
