| \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) |
\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, n0 ≠ 0 ⊦ [: Act, Inp, CS, Outp | CRelyto(m0 + 1, Act', CS', Act'', CS'') , CGuarto(m0 + 1, Act, CS, Act', CS') , CInv(n, Act, CS) , CSEQ(n0; Act, Inp, CS, Outp) ∥ CSPAWN(n0 - 1; Act, Inp, CS, Outp) ] CInv(n, Act, CS)
Used simplifier rules: oz: ⊦ m + 1 ≠ 0; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2