| [:S, Outf | SEQ#(m, Inpf(m); S, Outf(m))], GInv(S), Pr(m)(S) ⊦ (□ (Ry(m)(S', S'') ∧ GInv(S) ∧ GInv(S')) → ◇ last) ∧ (Ry(m)(S', S'') ∧ (GInv(S') → GInv(S''))) -+-> (last ⊃ Po(m)(S) ∧ GInv(S);Gr(m)(S, S') ∧ ¬ blocked ∧ (GInv(S) → GInv(S'))) |
GInv(S), Pr(m)(S) ⊦ ⟨:S, Out | Ry(m)(S', S''), (Gr(m)(S, S') ∧ ¬ blocked), GInv(S), SEQ#(m, Inp; S, Out)⟩ Po(m)(S)
◇ last, (∃ Out0. [:S, Out0 | SEQ#(m, Inpf(m); S, Out0)] ∧ □ (Out0 = Outf(m) ∧ Out0' = Outf'(m))) → (Ry(m)(S', S'') ∧ (GInv(S') → GInv(S''))) -+-> (last ⊃ Po(m)(S);(Gr(m)(S, S') ∧ ¬ blocked) ∧ (GInv(S) → GInv(S'))), [:S, Outf | SEQ#(m, Inpf(m); S, Outf(m))], GInv(S), Pr(m)(S) ⊦ (□ (Ry(m)(S', S'') ∧ GInv(S) ∧ GInv(S')) → ◇ last) ∧ (Ry(m)(S', S'') ∧ (GInv(S') → GInv(S''))) -+-> (last ⊃ Po(m)(S) ∧ GInv(S);Gr(m)(S, S') ∧ ¬ blocked ∧ (GInv(S) → GInv(S')))
Used terms: Outf(m), Inpf(m), S, m