free c: channel.

type skey.
type pkey.

fun pk(skey): pkey.
fun aenc(pkey, bitstring): bitstring.

reduc forall k: skey, m: bitstring; adec(k,aenc(pk(k),m)) = m.

free u,v: bitstring [private].

let V(pkA:pkey) = out(c, aenc(pkA, v)).

let A(skA:skey) = in(c,x:bitstring); let v' = adec(skA,x) in 0.

process 
	(
		new skA: skey;
		let pkA = pk(skA) in
		out(c, pkA);
		! (V(pkA) | A(skA))
	)|(
		out(c,choice[u,v])
	)
