packages feed

cpsa-4.4.1: tst/wang-key-hash-tst.tst

(herald "Wang's Fair Exchange Protocol" (bound 10))

(comment "CPSA 4.3.0")
(comment "All input read from tst/wang-key-hash-tst.scm")
(comment "Strand count bounded at 10")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener m)
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (comment "Experiment 1 to prove Lemma 4.1.")
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv m) (send m)))
  (label 0)
  (unrealized (1 0))
  (preskeleton)
  (origs (m (0 0)) (k (0 0)))
  (comment "Not a skeleton"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener m)
  (precedes ((0 0) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv m) (send m)))
  (label 1)
  (parent 0)
  (unrealized (1 0))
  (origs (m (0 0)) (k (0 0)))
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener m)
  (deflistener k)
  (precedes ((0 0) (2 0)) ((2 1) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-listener k) m (1 0) (enc m k))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv m) (send m)) ((recv k) (send k)))
  (label 2)
  (parent 1)
  (unrealized (2 0))
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (deflistener k)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (displaced 0 3 init1 3) k (2 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv m) (send m)) ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 3)
  (parent 2)
  (realized)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener m)
  (deflistener k)
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((0 0) (3 0)) ((2 1) (1 0)) ((3 2) (2 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv m) (send m)) ((recv k) (send k))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 4)
  (parent 2)
  (realized)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation generalization deleted (1 0))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 5)
  (parent 3)
  (realized)
  (shape)
  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs (m (1 0)) (k (1 0))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener m)
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation generalization deleted (2 0))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv m) (send m))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 6)
  (parent 4)
  (realized)
  (shape)
  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs (m (0 0)) (k (0 0))))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener k)
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (comment "Experiment 2 to prove Lemma 4.1.")
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv k) (send k)))
  (label 7)
  (unrealized (1 0))
  (preskeleton)
  (origs (m (0 0)) (k (0 0)))
  (comment "Not a skeleton"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener k)
  (precedes ((0 0) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv k) (send k)))
  (label 8)
  (parent 7)
  (unrealized (1 0))
  (origs (m (0 0)) (k (0 0)))
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener k)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (displaced 0 2 init1 3) k (1 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 9)
  (parent 8)
  (realized)
  (shape)
  (maps ((1 0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs (m (1 0)) (k (1 0))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener k)
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((0 0) (2 0)) ((2 2) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-strand ttp-rc1 3) k (1 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv k) (send k))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 10)
  (parent 8)
  (realized)
  (shape)
  (maps ((0 1) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs (m (0 0)) (k (0 0))))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (comment "First of three experiments to prove Lemma 4.2, clause 1.")
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 11)
  (unrealized (0 1))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r)))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 12)
  (parent 11)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r)))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 13)
  (parent 11)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (comment "Second of three experiments to prove Lemma 4.2, clause 1.")
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 14)
  (unrealized (0 2))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 2)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 2))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 15)
  (parent 14)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 2)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 2))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 16)
  (parent 14)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (comment "Third of three experiments to prove Lemma 4.2, clause 1.")
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 17)
  (unrealized (0 1) (0 3))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 18)
  (parent 17)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 19)
  (parent 17)
  (realized)
  (shape)
  (maps ((0) ((b b) (t t) (m m) (r r) (k k) (a a))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" a))
  (comment "First of two experiments to prove Lemma 4.2, clause 2.")
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (label 20)
  (unrealized (0 0))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r)))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 21)
  (parent 20)
  (realized)
  (shape)
  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" a))
  (comment "Second of two experiments to prove Lemma 4.2, clause 2.")
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (label 22)
  (unrealized (0 0))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r)))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 23)
  (parent 22)
  (realized)
  (shape)
  (maps ((0) ((a a) (t t) (m m) (r r) (k k) (b b))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (e1 e2 x mesg) (a t b name))
  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t))
  (non-orig (privk "sign" a))
  (comment "Experiments to prove Lemma 4.2, clause 3.")
  (traces
    ((recv
       (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
         (enc "eootag"
           (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
           (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (label 24)
  (unrealized (0 0) (0 3))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 25)
  (parent 24)
  (unrealized (0 3))
  (comment "4 in cohort - 4 not yet seen"))

(defskeleton wang
  (vars (r r-0 text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 26)
  (parent 25)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (t t) (b b) (e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (displaced 1 2 init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 27)
  (parent 25)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (t t) (b b) (e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (displaced 1 2 init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 28)
  (parent 25)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (t t) (b b) (e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))))))
  (origs))

(defskeleton wang
  (vars (r r-0 text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 29)
  (parent 25)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (t t) (b b) (e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (deflistener
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)))
  (non-orig (privk "sign" t))
  (comment "Experiments to prove Lemma 4.3, clause 1.")
  (traces
    ((recv
       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 30)
  (unrealized (0 0))
  (origs)
  (comment "3 in cohort - 3 not yet seen"))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (deflistener
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-ab1 3)
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t))))
    ((recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 31)
  (parent 30)
  (realized)
  (shape)
  (maps ((0) ((a a) (b b) (t t) (y y) (x x))))
  (origs))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (deflistener
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-rc2 3)
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf"
         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t))))
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 32)
  (parent 30)
  (realized)
  (shape)
  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc "h" (cat "h" k))))))
  (origs))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (deflistener
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-cf2 3)
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf"
         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t))))
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 33)
  (parent 30)
  (realized)
  (shape)
  (maps ((0) ((a a) (b b) (t t) (y y) (x (enc "h" (cat "h" k))))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
  (non-orig (privk "encr" t) (privk "sign" a))
  (comment "Experiment 1 to prove Lemma 4.3, clause 2.")
  (traces
    ((recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 34)
  (unrealized (0 0))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
  (traces
    ((recv
       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
         (enc "h" (cat "h" k)) (privk "sign" a)))
      (send
        (cat "sync-abrq"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 35)
  (parent 34)
  (realized)
  (shape)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
        (b b) (t t))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
  (traces
    ((recv
       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
         (enc "h" (cat "h" k)) (privk "sign" a)))
      (send
        (cat "sync-abrq"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 36)
  (parent 34)
  (realized)
  (shape)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
        (b b) (t t))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (non-orig (privk "encr" t) (privk "sign" a))
  (comment "Experiment 2 to prove Lemma 4.3, clause 2.")
  (traces
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 37)
  (unrealized (0 0) (0 1))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 38)
  (parent 37)
  (unrealized (0 1))
  (comment "4 in cohort - 4 not yet seen"))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 39)
  (parent 38)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 40)
  (parent 38)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 41)
  (parent 38)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 42)
  (parent 38)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (non-orig (privk "encr" t) (privk "sign" a))
  (comment "Experiment 3 to prove Lemma 4.3, clause 2.")
  (traces
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 43)
  (unrealized (0 0) (0 1))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "cfrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 44)
  (parent 43)
  (unrealized (0 1))
  (comment "4 in cohort - 4 not yet seen"))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "cfrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 45)
  (parent 44)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "cfrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 46)
  (parent 44)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "cfrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 47)
  (parent 44)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-cf2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "cfrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 48)
  (parent 44)
  (realized)
  (shape)
  (maps
    ((0)
      ((a a) (b b) (t t) (r r) (k k)
        (y (enc "h" (cat "h" (enc m k)))))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (goals
    (forall ((r text) (m data) (b t a name) (k skey) (z z-0 strd))
      (implies
        (and (p "init1" z 1) (p "" z-0 2) (p "init1" "r" z r)
          (p "init1" "m" z m) (p "init1" "a" z a) (p "init1" "b" z b)
          (p "init1" "t" z t) (p "init1" "k" z k) (p "" "x" z-0 m)
          (non (privk "encr" t)) (uniq-at m z 0) (uniq-at k z 0))
        (or (and (p "init1" z 3) (prec z 2 z-0 0))
          (exists ((z-1 strd))
            (and (p "ttp-rc1" z-1 3)
              (p "ttp-rc1" "y" z-1 (enc "h" (cat "h" (enc m k))))
              (p "ttp-rc1" "r" z-1 r) (p "ttp-rc1" "a" z-1 a)
              (p "ttp-rc1" "b" z-1 b) (p "ttp-rc1" "t" z-1 t)
              (p "ttp-rc1" "k" z-1 k) (prec z 0 z-1 0)
              (prec z-1 2 z-0 0)))))))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 49)
  (unrealized (0 0))
  (preskeleton)
  (origs (m (1 0)) (k (1 0)))
  (comment "Not a skeleton"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 50)
  (parent 49)
  (unrealized (0 0))
  (origs (m (1 0)) (k (1 0)))
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener k)
  (precedes ((1 0) (2 0)) ((2 1) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-listener k) m (0 0) (enc m k))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv k) (send k)))
  (label 51)
  (parent 50)
  (unrealized (2 0))
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (deflistener k)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 0)) ((2 2) (1 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (displaced 1 3 init1 3) k (2 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv m) (send m)) ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 52)
  (parent 51)
  (realized)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (deflistener k)
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((1 0) (3 0)) ((2 1) (0 0)) ((3 2) (2 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-strand ttp-rc1 3) k (2 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))) ((recv k) (send k))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 53)
  (parent 51)
  (realized)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation generalization deleted (1 0))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 54)
  (parent 52)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0 1) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs (m (1 0)) (k (1 0))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener m)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((1 0) (2 0)) ((2 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation generalization deleted (2 0))
  (traces ((recv m) (send m))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 55)
  (parent 53)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0 1) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs (m (1 0)) (k (1 0))))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener k)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (goals
    (forall ((r text) (m data) (b t a name) (k skey) (z z-0 strd))
      (implies
        (and (p "init1" z 1) (p "" z-0 2) (p "init1" "r" z r)
          (p "init1" "m" z m) (p "init1" "a" z a) (p "init1" "b" z b)
          (p "init1" "t" z t) (p "init1" "k" z k) (p "" "x" z-0 k)
          (non (privk "encr" t)) (uniq-at m z 0) (uniq-at k z 0))
        (or (and (p "init1" z 3) (prec z 2 z-0 0))
          (exists ((z-1 strd))
            (and (p "ttp-rc1" z-1 3)
              (p "ttp-rc1" "y" z-1 (enc "h" (cat "h" (enc m k))))
              (p "ttp-rc1" "r" z-1 r) (p "ttp-rc1" "a" z-1 a)
              (p "ttp-rc1" "b" z-1 b) (p "ttp-rc1" "t" z-1 t)
              (p "ttp-rc1" "k" z-1 k) (prec z 0 z-1 0)
              (prec z-1 2 z-0 0)))))))
  (traces ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 56)
  (unrealized (0 0))
  (preskeleton)
  (origs (m (1 0)) (k (1 0)))
  (comment "Not a skeleton"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener k)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (traces ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 57)
  (parent 56)
  (unrealized (0 0))
  (origs (m (1 0)) (k (1 0)))
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener k)
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (displaced 1 2 init1 3) k (0 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 58)
  (parent 57)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0 1) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs (m (1 0)) (k (1 0))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (deflistener k)
  (defstrand init1 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand ttp-rc1 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (precedes ((1 0) (2 0)) ((2 2) (0 0)))
  (non-orig (privk "encr" t))
  (uniq-orig m k)
  (operation nonce-test (added-strand ttp-rc1 3) k (0 0)
    (enc "keytag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
  (traces ((recv k) (send k))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (send
        (cat "sync-rc-req"
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (send (cat k r))))
  (label 59)
  (parent 57)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0 1) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs (m (1 0)) (k (1 0))))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (goals
    (forall ((r text) (m data) (b t a name) (k skey) (z strd))
      (implies
        (and (p "init1" z 3) (p "init1" "r" z r) (p "init1" "m" z m)
          (p "init1" "a" z a) (p "init1" "b" z b) (p "init1" "t" z t)
          (p "init1" "k" z k) (non (privk "sign" b)))
        (or
          (exists ((z-0 strd))
            (and (p "resp1" z-0 2) (p "resp1" "r" z-0 r)
              (p "resp1" "m" z-0 m) (p "resp1" "a" z-0 a)
              (p "resp1" "b" z-0 b) (p "resp1" "t" z-0 t)
              (p "resp1" "k" z-0 k) (prec z-0 1 z 1)))
          (exists ((z-0 strd))
            (and (p "resp3" z-0 2) (p "resp3" "e1" z-0 (enc m k))
              (p "resp3" "e2" z-0
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z-0 (enc "h" (cat "h" k)))
              (p "resp3" "a" z-0 a) (p "resp3" "b" z-0 b)
              (p "resp3" "t" z-0 t) (prec z-0 1 z 1)))))))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (label 60)
  (unrealized (0 1))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r)))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 61)
  (parent 60)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r)))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 62)
  (parent 60)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (goals
    (forall ((r text) (m data) (b t a name) (k skey) (z strd))
      (implies
        (and (p "init3" z 3) (p "init3" "r" z r) (p "init3" "m" z m)
          (p "init3" "a" z a) (p "init3" "b" z b) (p "init3" "t" z t)
          (p "init3" "k" z k) (non (privk "sign" b)))
        (or
          (exists ((z-0 strd))
            (and (p "resp1" z-0 2) (p "resp1" "r" z-0 r)
              (p "resp1" "m" z-0 m) (p "resp1" "a" z-0 a)
              (p "resp1" "b" z-0 b) (p "resp1" "t" z-0 t)
              (p "resp1" "k" z-0 k) (prec z-0 1 z 2)))
          (exists ((z-0 strd))
            (and (p "resp3" z-0 2) (p "resp3" "e1" z-0 (enc m k))
              (p "resp3" "e2" z-0
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z-0 (enc "h" (cat "h" k)))
              (p "resp3" "a" z-0 a) (p "resp3" "b" z-0 b)
              (p "resp3" "t" z-0 t) (prec z-0 1 z 2)))))))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 63)
  (unrealized (0 2))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 2)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 2))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 64)
  (parent 63)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init3 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 2)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 2))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 65)
  (parent 63)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" b))
  (goals
    (forall ((r text) (m data) (b t a name) (k skey) (z strd))
      (implies
        (and (p "init5" z 4) (p "init5" "r" z r) (p "init5" "m" z m)
          (p "init5" "a" z a) (p "init5" "b" z b) (p "init5" "t" z t)
          (p "init5" "k" z k) (non (privk "sign" b)))
        (or
          (exists ((z-0 strd))
            (and (p "resp1" z-0 2) (p "resp1" "r" z-0 r)
              (p "resp1" "m" z-0 m) (p "resp1" "a" z-0 a)
              (p "resp1" "b" z-0 b) (p "resp1" "t" z-0 t)
              (p "resp1" "k" z-0 k) (prec z-0 1 z 1)))
          (exists ((z-0 strd))
            (and (p "resp3" z-0 2) (p "resp3" "e1" z-0 (enc m k))
              (p "resp3" "e2" z-0
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z-0 (enc "h" (cat "h" k)))
              (p "resp3" "a" z-0 a) (p "resp3" "b" z-0 b)
              (p "resp3" "t" z-0 t) (prec z-0 1 z 1)))))))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 66)
  (unrealized (0 1) (0 3))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp1 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp1 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (label 67)
  (parent 66)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (b t a name) (k skey))
  (defstrand init5 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand resp3 2 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (precedes ((1 1) (0 1)))
  (non-orig (privk "sign" b))
  (operation encryption-test (added-strand resp3 2)
    (enc "eortag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" b)) (0 1))
  (traces
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))))
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))))
  (label 68)
  (parent 66)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (b b) (t t) (a a) (k k))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" a))
  (goals
    (forall ((r text) (m data) (a t b name) (k skey) (z strd))
      (implies
        (and (p "resp1" z 3) (p "resp1" "r" z r) (p "resp1" "m" z m)
          (p "resp1" "a" z a) (p "resp1" "b" z b) (p "resp1" "t" z t)
          (p "resp1" "k" z k) (non (privk "sign" a)))
        (exists ((z-0 strd))
          (and (p "init5" z-0 1) (p "init5" "r" z-0 r)
            (p "init5" "m" z-0 m) (p "init5" "a" z-0 a)
            (p "init5" "b" z-0 b) (p "init5" "t" z-0 t)
            (p "init5" "k" z-0 k) (prec z-0 0 z 0))))))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (label 69)
  (unrealized (0 0))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp1 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r)))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 70)
  (parent 69)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (a a) (t t) (b b) (k k))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (non-orig (privk "sign" a))
  (goals
    (forall ((r text) (m data) (a t b name) (k skey) (z strd))
      (implies
        (and (p "resp2" z 4) (p "resp2" "r" z r) (p "resp2" "m" z m)
          (p "resp2" "a" z a) (p "resp2" "b" z b) (p "resp2" "t" z t)
          (p "resp2" "k" z k) (non (privk "sign" a)))
        (exists ((z-0 strd))
          (and (p "init5" z-0 1) (p "init5" "r" z-0 r)
            (p "init5" "m" z-0 m) (p "init5" "a" z-0 a)
            (p "init5" "b" z-0 b) (p "init5" "t" z-0 t)
            (p "init5" "k" z-0 k) (prec z-0 0 z 0))))))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (label 71)
  (unrealized (0 0))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp2 4 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r)))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 72)
  (parent 71)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((r r) (m m) (a a) (t t) (b b) (k k))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (e1 e2 x mesg) (a t b name))
  (defstrand resp3 4 (e1 e1) (e2 e2) (x x) (a a) (b b) (t t))
  (non-orig (privk "sign" a))
  (goals
    (forall ((e1 e2 x mesg) (a t b name) (z strd))
      (implies
        (and (p "resp3" z 4) (p "resp3" "e1" z e1) (p "resp3" "e2" z e2)
          (p "resp3" "x" z x) (p "resp3" "a" z a) (p "resp3" "b" z b)
          (p "resp3" "t" z t) (non (privk "sign" a)))
        (or
          (exists ((r text) (m data) (k skey) (z-0 strd))
            (and (= e1 (enc m k))
              (= e2
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (= x (enc "h" (cat "h" k))) (p "init3" z-0 2)
              (p "resp3" "e1" z (enc m k))
              (p "resp3" "e2" z
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z (enc "h" (cat "h" k)))
              (p "init3" "r" z-0 r) (p "init3" "m" z-0 m)
              (p "init3" "a" z-0 a) (p "init3" "b" z-0 b)
              (p "init3" "t" z-0 t) (p "init3" "k" z-0 k)
              (prec z-0 0 z 0) (prec z-0 1 z 3)))
          (exists ((r r-0 text) (m data) (k skey) (z-0 z-1 strd))
            (and (= e1 (enc m k))
              (= e2
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (= x (enc "h" (cat "h" k))) (p "init5" z-0 1)
              (p "init3" z-1 2) (p "resp3" "e1" z (enc m k))
              (p "resp3" "e2" z
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z (enc "h" (cat "h" k)))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (p "init3" "r" z-1 r-0) (p "init3" "m" z-1 m)
              (p "init3" "a" z-1 a) (p "init3" "b" z-1 b)
              (p "init3" "t" z-1 t) (p "init3" "k" z-1 k)
              (prec z-0 0 z 0) (prec z-1 1 z 3)))
          (exists ((r text) (m data) (k skey) (z-0 strd))
            (and (= e1 (enc m k))
              (= e2
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (= x (enc "h" (cat "h" k))) (p "init5" z-0 3)
              (p "resp3" "e1" z (enc m k))
              (p "resp3" "e2" z
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z (enc "h" (cat "h" k)))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (prec z-0 0 z 0) (prec z-0 2 z 3)))
          (exists ((r r-0 text) (m data) (k skey) (z-0 z-1 strd))
            (and (= e1 (enc m k))
              (= e2
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (= x (enc "h" (cat "h" k))) (p "init5" z-0 1)
              (p "init5" z-1 3) (p "resp3" "e1" z (enc m k))
              (p "resp3" "e2" z
                (enc "keytag"
                  (enc "h"
                    (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                      (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
              (p "resp3" "x" z (enc "h" (cat "h" k)))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (p "init5" "r" z-1 r-0) (p "init5" "m" z-1 m)
              (p "init5" "a" z-1 a) (p "init5" "b" z-1 b)
              (p "init5" "t" z-1 t) (p "init5" "k" z-1 k)
              (prec z-0 0 z 0) (prec z-1 2 z 3)))))))
  (traces
    ((recv
       (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
         (enc "eootag"
           (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
           (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (label 73)
  (unrealized (0 0) (0 3))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 74)
  (parent 73)
  (unrealized (0 3))
  (comment "4 in cohort - 4 not yet seen"))

(defskeleton wang
  (vars (r r-0 text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 1) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 75)
  (parent 74)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))) (a a) (t t) (b b))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 1) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (displaced 1 2 init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 76)
  (parent 74)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))) (a a) (t t) (b b))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 2) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (displaced 1 2 init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 77)
  (parent 74)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))) (a a) (t t) (b b))))
  (origs))

(defskeleton wang
  (vars (r r-0 text) (m data) (a t b name) (k skey))
  (defstrand resp3 4 (e1 (enc m k))
    (e2
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 2) (0 3)))
  (non-orig (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 3))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 78)
  (parent 74)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((e1 (enc m k))
        (e2
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t)))
        (x (enc "h" (cat "h" k))) (a a) (t t) (b b))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (deflistener
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)))
  (non-orig (privk "sign" t))
  (goals
    (forall ((y x mesg) (a b t name) (z strd))
      (implies
        (and (p "" z 2)
          (p "" "x" z
            (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
              (privk "sign" t))) (non (privk "sign" t)))
        (or
          (exists ((z-0 strd))
            (and (p "ttp-ab1" z-0 3) (p "ttp-ab1" "y" z-0 y)
              (p "ttp-ab1" "x" z-0 x) (p "ttp-ab1" "a" z-0 a)
              (p "ttp-ab1" "b" z-0 b) (p "ttp-ab1" "t" z-0 t)
              (prec z-0 2 z 0)))
          (exists ((r text) (k skey) (z-0 strd))
            (and (= x (enc "h" (cat "h" k))) (p "ttp-rc2" z-0 3)
              (p "" "x" z
                (enc "abcf"
                  (enc "abrq" a b t y (enc "h" (cat "h" k))
                    (privk "sign" a)) (privk "sign" t)))
              (p "ttp-rc2" "y" z-0 y) (p "ttp-rc2" "r" z-0 r)
              (p "ttp-rc2" "a" z-0 a) (p "ttp-rc2" "b" z-0 b)
              (p "ttp-rc2" "t" z-0 t) (p "ttp-rc2" "k" z-0 k)
              (prec z-0 2 z 0)))
          (exists ((r text) (k skey) (z-0 strd))
            (and (= x (enc "h" (cat "h" k))) (p "ttp-cf2" z-0 3)
              (p "" "x" z
                (enc "abcf"
                  (enc "abrq" a b t y (enc "h" (cat "h" k))
                    (privk "sign" a)) (privk "sign" t)))
              (p "ttp-cf2" "y" z-0 y) (p "ttp-cf2" "r" z-0 r)
              (p "ttp-cf2" "a" z-0 a) (p "ttp-cf2" "b" z-0 b)
              (p "ttp-cf2" "t" z-0 t) (p "ttp-cf2" "k" z-0 k)
              (prec z-0 2 z 0)))))))
  (traces
    ((recv
       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 79)
  (unrealized (0 0))
  (origs)
  (comment "3 in cohort - 3 not yet seen"))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (deflistener
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-ab1 3)
    (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t))))
    ((recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 80)
  (parent 79)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((y y) (x x) (a a) (b b) (t t))))
  (origs))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (deflistener
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-rc2 3)
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf"
         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t))))
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 81)
  (parent 79)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((y y) (x (enc "h" (cat "h" k))) (a a) (b b) (t t))))
  (origs))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (deflistener
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)))
  (defstrand ttp-cf2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "sign" t))
  (operation encryption-test (added-strand ttp-cf2 3)
    (enc "abcf"
      (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
      (privk "sign" t)) (0 0))
  (traces
    ((recv
       (enc "abcf"
         (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
         (privk "sign" t)))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t))))
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 82)
  (parent 79)
  (realized)
  (shape)
  (satisfies yes)
  (maps ((0) ((y y) (x (enc "h" (cat "h" k))) (a a) (b b) (t t))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y x mesg) (a b t name))
  (defstrand ttp-ab1 3 (y y) (x x) (a a) (b b) (t t))
  (non-orig (privk "encr" t) (privk "sign" a))
  (goals
    (forall ((y x mesg) (a b t name) (z strd))
      (implies
        (and (p "ttp-ab1" z 3) (p "ttp-ab1" "y" z y)
          (p "ttp-ab1" "x" z x) (p "ttp-ab1" "a" z a)
          (p "ttp-ab1" "b" z b) (p "ttp-ab1" "t" z t)
          (non (privk "encr" t)) (non (privk "sign" a)))
        (or
          (exists ((r text) (m data) (k skey) (z-0 strd))
            (and (= y (enc "h" (cat "h" (enc m k))))
              (= x (enc "h" (cat "h" k))) (p "init3" z-0 2)
              (p "ttp-ab1" "y" z (enc "h" (cat "h" (enc m k))))
              (p "ttp-ab1" "x" z (enc "h" (cat "h" k)))
              (p "init3" "r" z-0 r) (p "init3" "m" z-0 m)
              (p "init3" "a" z-0 a) (p "init3" "b" z-0 b)
              (p "init3" "t" z-0 t) (p "init3" "k" z-0 k)
              (prec z-0 1 z 0)))
          (exists ((r text) (m data) (k skey) (z-0 strd))
            (and (= y (enc "h" (cat "h" (enc m k))))
              (= x (enc "h" (cat "h" k))) (p "init5" z-0 3)
              (p "ttp-ab1" "y" z (enc "h" (cat "h" (enc m k))))
              (p "ttp-ab1" "x" z (enc "h" (cat "h" k)))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (prec z-0 2 z 0)))))))
  (traces
    ((recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (label 83)
  (unrealized (0 0))
  (origs)
  (comment "2 in cohort - 2 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 1) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
  (traces
    ((recv
       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
         (enc "h" (cat "h" k)) (privk "sign" a)))
      (send
        (cat "sync-abrq"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 84)
  (parent 83)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
        (b b) (t t))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-ab1 3 (y (enc "h" (cat "h" (enc m k))))
    (x (enc "h" (cat "h" k))) (a a) (b b) (t t))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 2) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 0))
  (traces
    ((recv
       (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
         (enc "h" (cat "h" k)) (privk "sign" a)))
      (send
        (cat "sync-abrq"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 85)
  (parent 83)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (x (enc "h" (cat "h" k))) (a a)
        (b b) (t t))))
  (origs))

(comment "Nothing left to do")

(defprotocol wang basic
  (defrole init1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (send (cat k r))))
  (defrole init2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init3
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole init4
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t)))))
  (defrole init5
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))))
  (defrole resp1
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b))) (recv (cat k r))))
  (defrole resp2
    (vars (a b t name) (m data) (r text) (k skey))
    (trace
      (recv
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k))) (enc m k)
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))))
      (send
        (cat
          (cat a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (enc "eootag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" a))
          (enc "eortag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b))
          (enc "rcrq"
            (cat a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h"
                (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                  (enc "h" (cat "h" k)))) k r (pubk "encr" t))
            (privk "sign" b)))) (recv (cat k r))))
  (defrole resp3
    (vars (a b t name) (e1 e2 x mesg))
    (trace
      (recv
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e1 e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))))
      (send
        (cat (cat a b t (enc "h" (cat "h" e1)) x) e2
          (enc "eootag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t (enc "h" (cat "h" e1)) x)) e2
            (privk "sign" b))
          (enc "rcrq" (cat a b t (enc "h" (cat "h" e1)) x) e2
            (privk "sign" b))))
      (recv
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" e1)) x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab1
    (vars (a b t name) (y x mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (send (cat "sync-abrq" (enc "abrq" a b t y x (privk "sign" a))))
      (send
        (enc "abcf" (enc "abrq" a b t y x (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-ab2
    (vars (a b t name) (y x e mesg))
    (trace (recv (enc "abrq" a b t y x (privk "sign" a)))
      (recv
        (cat "sync-abrq"
          (enc "eortag" (enc "h" (cat "h" a b t y x)) e
            (privk "sign" b))))
      (send
        (enc "eortag" (enc "h" (cat "h" a b t y x)) e
          (privk "sign" b)))))
  (defrole ttp-rc1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-rc-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)))) (send (cat k r))))
  (defrole ttp-rc2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrole ttp-cf1
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (cat "sync-cf-req" (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (send
        (enc (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b)) (privk "sign" t)))))
  (defrole ttp-cf2
    (vars (a b t name) (r text) (k skey) (y mesg))
    (trace
      (recv
        (cat (cat a b t y (enc "h" (cat "h" k)))
          (enc "keytag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
            (pubk "encr" t))
          (enc "eootag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" a))
          (enc "eortag"
            (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))
          (enc "cfrq" (cat a b t y (enc "h" (cat "h" k)))
            (enc "keytag"
              (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
              (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-cf-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (defrule cakeRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (leads-to z0 i0 z1 i1)
          (leads-to z0 i0 z2 i2) (prec z1 i1 z2 i2))
        (false))))
  (defrule no-interruption
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (leads-to z0 i0 z2 i2) (trans z1 i1)
          (same-locn z0 i0 z1 i1) (prec z0 i0 z1 i1) (prec z1 i1 z2 i2))
        (false))))
  (defrule neqRl_mesg
    (forall ((x mesg)) (implies (fact neq x x) (false))))
  (defrule neqRl_strd
    (forall ((x strd)) (implies (fact neq x x) (false))))
  (defrule neqRl_indx
    (forall ((x indx)) (implies (fact neq x x) (false))))
  (defrule scissorsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (leads-to z0 i0 z2 i2))
        (and (= z1 z2) (= i1 i2)))))
  (defrule shearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (trans z2 i2)
          (leads-to z0 i0 z1 i1) (same-locn z0 i0 z2 i2)
          (prec z0 i0 z2 i2))
        (or (and (= z1 z2) (= i1 i2)) (prec z1 i1 z2 i2)))))
  (defrule invShearsRule
    (forall ((z0 z1 z2 strd) (i0 i1 i2 indx))
      (implies
        (and (trans z0 i0) (trans z1 i1) (same-locn z0 i0 z1 i1)
          (leads-to z1 i1 z2 i2) (prec z0 i0 z2 i2))
        (or (and (= z0 z1) (= i0 i1)) (prec z0 i0 z1 i1))))))

(defskeleton wang
  (vars (y mesg) (r text) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y y) (r r) (a a) (b b) (t t) (k k))
  (non-orig (privk "encr" t) (privk "sign" a))
  (goals
    (forall ((y mesg) (r text) (a b t name) (k skey) (z strd))
      (implies
        (and (p "ttp-rc2" z 3) (p "ttp-rc2" "y" z y)
          (p "ttp-rc2" "r" z r) (p "ttp-rc2" "a" z a)
          (p "ttp-rc2" "b" z b) (p "ttp-rc2" "t" z t)
          (p "ttp-rc2" "k" z k) (non (privk "encr" t))
          (non (privk "sign" a)))
        (or
          (exists ((m data) (z-0 strd))
            (and (= y (enc "h" (cat "h" (enc m k)))) (p "init3" z-0 2)
              (p "ttp-rc2" "y" z (enc "h" (cat "h" (enc m k))))
              (p "init3" "r" z-0 r) (p "init3" "m" z-0 m)
              (p "init3" "a" z-0 a) (p "init3" "b" z-0 b)
              (p "init3" "t" z-0 t) (p "init3" "k" z-0 k)
              (prec z-0 0 z 0) (prec z-0 1 z 1)))
          (exists ((r-0 text) (m data) (z-0 z-1 strd))
            (and (= y (enc "h" (cat "h" (enc m k)))) (p "init5" z-0 1)
              (p "init3" z-1 2)
              (p "ttp-rc2" "y" z (enc "h" (cat "h" (enc m k))))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (p "init3" "r" z-1 r-0) (p "init3" "m" z-1 m)
              (p "init3" "a" z-1 a) (p "init3" "b" z-1 b)
              (p "init3" "t" z-1 t) (p "init3" "k" z-1 k)
              (prec z-0 0 z 0) (prec z-1 1 z 1)))
          (exists ((m data) (z-0 strd))
            (and (= y (enc "h" (cat "h" (enc m k)))) (p "init5" z-0 3)
              (p "ttp-rc2" "y" z (enc "h" (cat "h" (enc m k))))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (prec z-0 0 z 0) (prec z-0 2 z 1)))
          (exists ((r-0 text) (m data) (z-0 z-1 strd))
            (and (= y (enc "h" (cat "h" (enc m k)))) (p "init5" z-0 1)
              (p "init5" z-1 3)
              (p "ttp-rc2" "y" z (enc "h" (cat "h" (enc m k))))
              (p "init5" "r" z-0 r) (p "init5" "m" z-0 m)
              (p "init5" "a" z-0 a) (p "init5" "b" z-0 b)
              (p "init5" "t" z-0 t) (p "init5" "k" z-0 k)
              (p "init5" "r" z-1 r-0) (p "init5" "m" z-1 m)
              (p "init5" "a" z-1 a) (p "init5" "b" z-1 b)
              (p "init5" "t" z-1 t) (p "init5" "k" z-1 k)
              (prec z-0 0 z 0) (prec z-1 2 z 1)))))))
  (traces
    ((recv
       (cat (cat a b t y (enc "h" (cat "h" k)))
         (enc "keytag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           k r (pubk "encr" t))
         (enc "eootag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" a))
         (enc "eortag" (enc "h" (cat "h" a b t y (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))
         (enc "rcrq" (cat a b t y (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h" (cat "h" a b t y (enc "h" (cat "h" k)))) k r
             (pubk "encr" t)) (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t y (enc "h" (cat "h" k)) (privk "sign" a))
          (privk "sign" t)))))
  (label 86)
  (unrealized (0 0) (0 1))
  (origs)
  (comment "1 in cohort - 1 not yet seen"))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 1)
    (enc "eootag"
      (enc "h"
        (cat "h" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k))))
      (enc "keytag"
        (enc "h"
          (cat "h" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)))) k r (pubk "encr" t))
      (privk "sign" a)) (0 0))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))))
  (label 87)
  (parent 86)
  (unrealized (0 1))
  (comment "4 in cohort - 4 not yet seen"))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init3 2 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 88)
  (parent 87)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (r r) (a a) (b b) (t t)
        (k k))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init3 2 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 1) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init3 2)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 89)
  (parent 87)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (r r) (a a) (b b) (t t)
        (k k))))
  (origs))

(defskeleton wang
  (vars (r text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 3 (r r) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((1 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (displaced 1 2 init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 90)
  (parent 87)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (r r) (a a) (b b) (t t)
        (k k))))
  (origs))

(defskeleton wang
  (vars (r r-0 text) (m data) (a b t name) (k skey))
  (defstrand ttp-rc2 3 (y (enc "h" (cat "h" (enc m k)))) (r r) (a a)
    (b b) (t t) (k k))
  (defstrand init5 1 (r r) (m m) (a a) (b b) (t t) (k k))
  (defstrand init5 3 (r r-0) (m m) (a a) (b b) (t t) (k k))
  (precedes ((1 0) (0 0)) ((2 2) (0 1)))
  (non-orig (privk "encr" t) (privk "sign" a))
  (operation encryption-test (added-strand init5 3)
    (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
      (enc "h" (cat "h" k)) (privk "sign" a)) (0 1))
  (traces
    ((recv
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a))
         (enc "eortag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))
         (enc "rcrq"
           (cat a b t (enc "h" (cat "h" (enc m k)))
             (enc "h" (cat "h" k)))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" b))))
      (recv
        (cat "sync-rc-req"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a))))
      (send
        (enc "abcf"
          (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
            (enc "h" (cat "h" k)) (privk "sign" a)) (privk "sign" t))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r (pubk "encr" t))
           (privk "sign" a)))))
    ((send
       (cat
         (cat a b t (enc "h" (cat "h" (enc m k))) (enc "h" (cat "h" k)))
         (enc m k)
         (enc "keytag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
         (enc "eootag"
           (enc "h"
             (cat "h" a b t (enc "h" (cat "h" (enc m k)))
               (enc "h" (cat "h" k))))
           (enc "keytag"
             (enc "h"
               (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                 (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
           (privk "sign" a))))
      (recv
        (enc "eortag"
          (enc "h"
            (cat "h" a b t (enc "h" (cat "h" (enc m k)))
              (enc "h" (cat "h" k))))
          (enc "keytag"
            (enc "h"
              (cat "h" a b t (enc "h" (cat "h" (enc m k)))
                (enc "h" (cat "h" k)))) k r-0 (pubk "encr" t))
          (privk "sign" b)))
      (send
        (enc "abrq" a b t (enc "h" (cat "h" (enc m k)))
          (enc "h" (cat "h" k)) (privk "sign" a)))))
  (label 91)
  (parent 87)
  (realized)
  (shape)
  (satisfies yes)
  (maps
    ((0)
      ((y (enc "h" (cat "h" (enc m k)))) (r r) (a a) (b b) (t t)
        (k k))))
  (origs))

(comment "Nothing left to do")