| [:Inpf, S, Outf | SPAWN#(0; Inpf, S, Outf)], GInv(S), Prton(0)(S) ⊦ (Rton(0)(S', S'') ∧ (GInv(S') → GInv(S''))) -+-> (last ⊃ Poton(0)(S) ∧ GInv(S);Gton(0)(S, S') ∧ ¬ blocked ∧ (GInv(S) → GInv(S'))) |
[:Inpf, S, Outf | if* n = 0 then SEQ#(0, Inpf(n); S, Outf(n)) else SEQ#(n, Inpf(n); S, Outf(n)) ∥ SPAWN#(n - 1; Inpf, S, Outf)], GInv(S), Prton(0)(S), n = 0 ⊦ (Rton(0)(S', S'') ∧ (GInv(S') → GInv(S''))) -+-> (last ⊃ Poton(0)(S) ∧ GInv(S);Gton(0)(S, S') ∧ ¬ blocked ∧ (GInv(S) → GInv(S')))
Used simplifier rules: SPAWN#(n; Inpf, S, Outf) {if* n = 0 then SEQ#(0, Inpf(n); S, Outf(n)) else SEQ#(n, Inpf(n); S, Outf(n)) ∥ SPAWN#(n - 1; Inpf, S, Outf) };