| \A ∀ Act, CS, n, Inp, Outp. CInitto(m0, Act, CS) ∧ CInv(n, Act, CS) ∧ m0 ≤ n → [: Act, Inp, CS, Outp | CRelyto(m0, Act', CS', Act'', CS'') , CGuarto(m0, Act, CS, Act', CS') , CInv(n, Act, CS) , CSPAWN(m0; Act, Inp, CS, Outp) ] CInv(n, Act, CS), n ≠ 0, CInitto(m0 + 1, Act, CS), CInv(n, Act, CS), m0 < n ⊦ [: Act, Inp, CS, Outp | CRelyto(m0 + 1, Act', CS', Act'', CS'') , CGuarto(m0 + 1, Act, CS, Act', CS') , CInv(n, Act, CS) , CSPAWN(m0 + 1; Act, Inp, CS, Outp) ] CInv(n, Act, CS) |
\A ∀ Act, CS, n, Inp, Outp. CInitto(m0, Act, CS) ∧ CInv(n, Act, CS) ∧ m0 ≤ n → [: Act, Inp, CS, Outp | CRelyto(m0, Act', CS', Act'', CS'') , CGuarto(m0, Act, CS, Act', CS') , CInv(n, Act, CS) , CSPAWN(m0; Act, Inp, CS, Outp) ] CInv(n, Act, CS), n ≠ 0, CInitto(m0 + 1, Act, CS), CInv(n, Act, CS), m0 < n, n0 = m0 + 1 ⊦ [: Act, Inp, CS, Outp | CRelyto(m0 + 1, Act', CS', Act'', CS'') , CGuarto(m0 + 1, Act, CS, Act', CS') , CInv(n, Act, CS) , if* n0 = 0 then CSEQ(n0; Act, Inp, CS, Outp) else CSEQ(n0; Act, Inp, CS, Outp) ∥ CSPAWN(n0 - 1; Act, Inp, CS, Outp) ] CInv(n, Act, CS)
Used simplifier rules: CSPAWN(n; Act, Inp, CS, Outp) {if* n = 0 then CSEQ(n; Act, Inp, CS, Outp) else CSEQ(n; Act, Inp, CS, Outp) ∥ CSPAWN(n - 1; Act, Inp, CS, Outp) };