-- I) Base case open BASE-NSLPK -- check red inv4(init,p,q,n,r,m2) . close -- II) Inductive cases --> 1) sdm1(s,p10,q10,r10) --> c-sdm1(s,p10,q10,r10), p = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq p = intruder . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> c-sdm1(s,p10,q10,r10), ~(p = intruder), q = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq q = intruder . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> c-sdm1(s,p10,q10,r10), ~(p = intruder), ~(q = intruder), --> ~(m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) --> = m1(p,p,q,enc1(q,n(p,q,r),p))) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq (m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) = m1(p,p,q,enc1(q,n(p,q,r),p))) = false . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> c-sdm1(s,p10,q10,r10), ~(p = intruder), ~(q = intruder), --> m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) --> = m1(p,p,q,enc1(q,n(p,q,r),p)), ~(m2 \in network(s)) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . -- eq m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) -- = m1(p,p,q,enc1(q,n(p,q,r),p)) . eq p10 = p . eq q10 = q . eq r = r10 . -- eq m2 \in network(s) = false . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> c-sdm1(s,p10,q10,r10), ~(p = intruder), ~(q = intruder), --> m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) --> = m1(p,p,q,enc1(q,n(p,q,r),p)), m2 \in network(s), --> ~(cipher2(m2) = enc2(p,n(p,q,r10),n,q)) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . -- eq m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) -- = m1(p,p,q,enc1(q,n(p,q,r),p)) . eq p10 = p . eq q10 = q . eq r = r10 . -- eq m2 \in network(s) = true . eq (cipher2(m2) = enc2(p,n(p,q,r10),n,q)) = false . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> c-sdm1(s,p10,q10,r10), ~(p = intruder), ~(q = intruder), --> m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) --> = m1(p,p,q,enc1(q,n(p,q,r),p)), m2 \in network(s), --> cipher2(m2) = enc2(p,n(p,q,r10),n,q) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions -- eq c-sdm1(s,p10,q10,r10) = true . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . -- eq m1(p10,p10,q10,enc1(q10,n(p10,q10,r10),p10)) -- = m1(p,p,q,enc1(q,n(p,q,r),p)) . eq p10 = p . eq q10 = q . eq r = r10 . -- eq m2 \in network(s) = true . eq cipher2(m2) = enc2(p,n(p,q,r10),n,q) . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red inv3(s,m2) implies istep4 . close --> ~c-sdm1(s,p10,q10,r10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op r10 : -> Random . -- assumptions eq c-sdm1(s,p10,q10,r10) = false . -- successor state eq s' = sdm1(s,p10,q10,r10) . -- check red istep4 . close --> 2) sdm2(s,q10?,p10,q10,r10,n10) --> c-sdm2(s,q10?,p10,q10,r10,n10), p = intruder open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . op r10 : -> Random . op n10 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm2(s,q10?,p10,q10,r10,n10) = true . eq network(s) = m1(q10?,q10,p10,enc1(p10,n10,q10)) nw10 . eq r10 \in rands(s) = false . -- eq p = intruder . -- successor state eq s' = sdm2(s,q10?,p10,q10,r10,n10) . -- check red istep4 . close --> c-sdm2(s,q10?,p10,q10,r10,n10), ~(p = intruder), q = intruder open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . op r10 : -> Random . op n10 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm2(s,q10?,p10,q10,r10,n10) = true . eq network(s) = m1(q10?,q10,p10,enc1(p10,n10,q10)) nw10 . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq q = intruder . -- successor state eq s' = sdm2(s,q10?,p10,q10,r10,n10) . -- check red istep4 . close --> c-sdm2(s,q10?,p10,q10,r10,n10), ~(p = intruder), ~(q = intruder), --> m2 = m2(p10,p10,q10,enc2(q10,n10,n(p10,q10,r10),p10)) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . op r10 : -> Random . op n10 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm2(s,q10?,p10,q10,r10,n10) = true . eq network(s) = m1(q10?,q10,p10,enc1(p10,n10,q10)) nw10 . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq m2 = m2(p10,p10,q10,enc2(q10,n10,n(p10,q10,r10),p10)) . -- successor state eq s' = sdm2(s,q10?,p10,q10,r10,n10) . -- check red istep4 . close --> c-sdm2(s,q10?,p10,q10,r10,n10), ~(p = intruder), ~(q = intruder), --> ~(m2 = m2(p10,p10,q10,enc2(q10,n10,n(p10,q10,r10),p10))) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . op r10 : -> Random . op n10 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm2(s,q10?,p10,q10,r10,n10) = true . eq network(s) = m1(q10?,q10,p10,enc1(p10,n10,q10)) nw10 . eq r10 \in rands(s) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq (m2 = m2(p10,p10,q10,enc2(q10,n10,n(p10,q10,r10),p10))) = false . -- successor state eq s' = sdm2(s,q10?,p10,q10,r10,n10) . -- check red istep4 . close --> ~c-sdm2(s,q10?,p10,q10,r10,n10) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . op r10 : -> Random . op n10 : -> Nonce . -- assumptions eq c-sdm2(s,q10?,p10,q10,r10,n10) = false . -- successor state eq s' = sdm2(s,q10?,p10,q10,r10,n10) . -- check red istep4 . close --> 3) sdm3(s,q10?,p10,q10,n10,n20) --> c-sdm3(s,q10?,p10,q10,n10,n20), p = intruder open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm3(s,q10?,p10,q10,n10,n20) = true . eq network(s) = m1(p10,p10,q10,enc1(q10,n10,p10)) m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) nw10 . -- eq p = intruder . -- successor state eq s' = sdm3(s,q10?,p10,q10,n10,n20) . -- check red istep4 . close --> c-sdm3(s,q10?,p10,q10,n10,n20), ~(p = intruder), q = intruder open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm3(s,q10?,p10,q10,n10,n20) = true . eq network(s) = m1(p10,p10,q10,enc1(q10,n10,p10)) m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) nw10 . -- eq (p = intruder) = false . eq q = intruder . -- successor state eq s' = sdm3(s,q10?,p10,q10,n10,n20) . -- check red istep4 . close --> c-sdm3(s,q10?,p10,q10,n10,n20), ~(p = intruder), ~(q = intruder) --> m2 = m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm3(s,q10?,p10,q10,n10,n20) = true . eq network(s) = m1(p10,p10,q10,enc1(q10,n10,p10)) m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) nw10 . -- eq (p = intruder) = false . eq (q = intruder) = false . eq m2 = m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) . -- successor state eq s' = sdm3(s,q10?,p10,q10,n10,n20) . -- check red istep4 . close --> c-sdm3(s,q10?,p10,q10,n10,n20), ~(p = intruder), ~(q = intruder) --> ~(m2 = m2(q10?,q10,p10,enc2(p10,n10,n20,q10))) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op nw10 : -> Network . -- assumptions -- eq c-sdm3(s,q10?,p10,q10,n10,n20) = true . eq network(s) = m1(p10,p10,q10,enc1(q10,n10,p10)) m2(q10?,q10,p10,enc2(p10,n10,n20,q10)) nw10 . -- eq (p = intruder) = false . eq (q = intruder) = false . eq (m2 = m2(q10?,q10,p10,enc2(p10,n10,n20,q10))) = false . -- successor state eq s' = sdm3(s,q10?,p10,q10,n10,n20) . -- check red istep4 . close --> ~c-sdm3(s,q10?,p10,q10,n10,n20) open ISTEP-NSLPK -- fresh constants ops q10? p10 q10 : -> Principal . ops n10 n20 : -> Nonce . -- assumptions eq c-sdm3(s,q10?,p10,q10,n10,n20) = false . -- successor state eq s' = sdm3(s,q10?,p10,q10,n10,n20) . -- check red istep4 . close --> 4) fkm11(s,p10,q10,m10) --> c-fkm11(s,p10,q10,m10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m10 : -> Message1 . op nw10 : -> Network . -- assumptions -- eq c-fkm11(s,p10,q10,m10) = true . eq network(s) = m10 nw10 . -- -- successor state eq s' = fkm11(s,p10,q10,m10) . -- check red istep4 . close --> ~c-fkm11(s,p10,q10,m10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m10 : -> Message1 . -- assumptions eq c-fkm11(s,p10,q10,m10) = false . -- successor state eq s' = fkm11(s,p10,q10,m10) . -- check red istep4 . close --> 5) fkm12(s,p10,q10,n10) --> c-fkm12(s,p10,q10,n10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op n10 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm12(s,p10,q10,n10) = true . eq nonces(s) = n10 ns10 . -- -- successor state eq s' = fkm12(s,p10,q10,n10) . -- check red istep4 . close --> ~c-fkm12(s,p10,q10,n10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op n10 : -> Nonce . -- assumptions eq c-fkm12(s,p10,q10,n10) = false . -- successor state eq s' = fkm12(s,p10,q10,n10) . -- check red istep4 . close --> 6) fkm21(s,p10,q10,m20) --> c-fkm21(s,p10,q10,m20), q = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq q = intruder . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> c-fkm21(s,p10,q10,m20), ~(q = intruder), p = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq (q = intruder) = false . eq p = intruder . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> c-fkm21(s,p10,q10,m20), ~(q = intruder), ~(p = intruder) --> m2 = m20 open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq (q = intruder) = false . eq (p = intruder) = false . eq m2 = m20 . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> c-fkm21(s,p10,q10,m20), ~(q = intruder), ~(p = intruder) --> ~(m2 = m20), ~(m2 = m2(intruder,p10,q10,cipher2(m20))) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq (q = intruder) = false . eq (p = intruder) = false . eq (m2 = m20) = false . eq (m2 = m2(intruder,p10,q10,cipher2(m20))) = false . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> c-fkm21(s,p10,q10,m20), ~(q = intruder), ~(p = intruder) --> ~(m2 = m20), m2 = m2(intruder,p10,q10,cipher2(m20)), --> ~(cipher2(m20) = enc2(p,n(p,q,r),n,q)) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq (q = intruder) = false . eq (p = intruder) = false . -- eq (m2 = m20) = false . eq (m2(intruder,p10,q10,cipher2(m20)) = m20) = false . -- eq m2 = m2(intruder,p10,q10,cipher2(m20)) . eq (cipher2(m20) = enc2(p,n(p,q,r),n,q)) = false . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> c-fkm21(s,p10,q10,m20), ~(q = intruder), ~(p = intruder) --> ~(m2 = m20), m2 = m2(intruder,p10,q10,cipher2(m20)), --> cipher2(m20) = enc2(p,n(p,q,r),n,q) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . op nw10 : -> Network . -- assumptions -- eq c-fkm21(s,p10,q10,m20) = true . eq network(s) = m20 nw10 . -- eq (q = intruder) = false . eq (p = intruder) = false . -- eq (m2 = m20) = false . -- eq (m2(intruder,p10,q10,cipher2(m20)) = m20) = false . eq (m2(intruder,p10,q10,enc2(p,n(p,q,r),n,q)) = m20) = false . -- eq m2 = m2(intruder,p10,q10,cipher2(m20)) . eq cipher2(m20) = enc2(p,n(p,q,r),n,q) . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red inv4(s,p,q,n,r,m20) implies istep4 . close --> ~c-fkm21(s,p10,q10,m20) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m20 : -> Message2 . -- assumptions eq c-fkm21(s,p10,q10,m20) = false . -- successor state eq s' = fkm21(s,p10,q10,m20) . -- check red istep4 . close --> 7) fkm22(s,p10,q10,n10,n20) --> c-fkm22(s,p10,q10,n10,n20), p = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm22(s,p10,q10,n10,n20) = true . eq nonces(s) = n10 n20 ns10 . eq (n10 = n20) = false . -- eq p = intruder . -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red istep4 . close --> c-fkm22(s,p10,q10,n10,n20), ~(p = intruder), q = intruder open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm22(s,p10,q10,n10,n20) = true . eq nonces(s) = n10 n20 ns10 . eq (n10 = n20) = false . -- eq (p = intruder) = false . eq q = intruder . -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red istep4 . close --> c-fkm22(s,p10,q10,n10,n20), ~(p = intruder), ~(q = intruder), --> ~(m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10))) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm22(s,p10,q10,n10,n20) = true . eq nonces(s) = n10 n20 ns10 . eq (n10 = n20) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq (m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10))) = false . -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red istep4 . close --> c-fkm22(s,p10,q10,n10,n20), ~(p = intruder), ~(q = intruder), --> m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10)), --> ~(enc2(q10,n10,n20,p10) = enc2(p,n(p,q,r),n,q)) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm22(s,p10,q10,n10,n20) = true . eq nonces(s) = n10 n20 ns10 . eq (n10 = n20) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10)) . eq (enc2(q10,n10,n20,p10) = enc2(p,n(p,q,r),n,q)) = false . -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red istep4 . close --> c-fkm22(s,p10,q10,n10,n20), ~(p = intruder), ~(q = intruder), --> m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10)), --> enc2(q10,n10,n20,p10) = enc2(p,n(p,q,r),n,q) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm22(s,p10,q10,n10,n20) = true . eq nonces(s) = n10 n20 ns10 . eq (n10 = n20) = false . -- eq (p = intruder) = false . eq (q = intruder) = false . eq m2 = m2(intruder,p10,q10,enc2(q10,n10,n20,p10)) . -- eq enc2(q10,n10,n20,p10) = enc2(p,n(p,q,r),n,q) . eq q10 = p . eq p10 = q . eq n10 = n(p,q,r) . eq n20 = n . -- -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red inv5(s,n10) implies istep4 . close --> ~c-fkm22(s,p10,q10,n10,n20) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . ops n10 n20 : -> Nonce . -- assumptions eq c-fkm22(s,p10,q10,n10,n20) = false . -- successor state eq s' = fkm22(s,p10,q10,n10,n20) . -- check red istep4 . close --> 8) fkm31(s,p10,q10,m30) --> c-fkm31(s,p10,q10,m30) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m30 : -> Message3 . op nw10 : -> Network . -- assumptions -- eq c-fkm31(s,p10,q10,m30) = true . eq network(s) = m30 nw10 . -- -- successor state eq s' = fkm31(s,p10,q10,m30) . -- check red istep4 . close --> ~c-fkm31(s,p10,q10,m30) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op m30 : -> Message3 . -- assumptions eq c-fkm31(s,p10,q10,m30) = false . -- successor state eq s' = fkm31(s,p10,q10,m30) . -- check red istep4 . close --> 9) fkm32(s,p10,q10,n10) --> c-fkm32(s,p10,q10,n10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op n10 : -> Nonce . op ns10 : -> NonceSoup . -- assumptions -- eq c-fkm32(s,p10,q10,n10) = true . eq nonces(s) = n10 ns10 . -- -- successor state eq s' = fkm32(s,p10,q10,n10) . -- check red istep4 . close --> ~c-fkm32(s,p10,q10,n10) open ISTEP-NSLPK -- fresh constants ops p10 q10 : -> Principal . op n10 : -> Nonce . -- assumptions eq c-fkm32(s,p10,q10,n10) = false . -- successor state eq s' = fkm32(s,p10,q10,n10) . -- check red istep4 . close -- Q.E.D.