| ¬(m + 1 ≠ m0 ∧ Guar(m + 1, cs, cs0) ∧ Inv(cs) ∧ Inv(cs0)), m0 < n, Guar(m + 1, cs, cs0), CInv(n, act0, cs0), CInv(n, act, cs), m < n, m0 ≤ m, ∀ m0. m0 ≠ m + 1 → (act0(m0) ↔ act(m0)) ∧ (Idle(m0, cs) ↔ Idle(m0, cs0)), (¬ act(m + 1) → Idle(m + 1, cs)) → ¬ act0(m + 1) → Idle(m + 1, cs0) ⊦ n = 0, Rely(m0, cs, cs0) ∧ (Idle(m0, cs) ↔ Idle(m0, cs0)) ∧ (act0(m0) ↔ act(m0)) |
m0 < n, Guar(m + 1, cs, cs0), CInv(n, act0, cs0), CInv(n, act, cs), m < n, m0 ≤ m, ∀ m0. m0 ≠ m + 1 → (act0(m0) ↔ act(m0)) ∧ (Idle(m0, cs) ↔ Idle(m0, cs0)), (¬ act(m + 1) → Idle(m + 1, cs)) → ¬ act0(m + 1) → Idle(m + 1, cs0) ⊦ n = 0, m + 1 = m0, Rely(m0, cs, cs0) ∧ (Idle(m0, cs) ↔ Idle(m0, cs0)) ∧ (act0(m0) ↔ act(m0)), Inv(cs0) ∧ Inv(cs)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%le-add: ⊦ m + m0 ≤ m ↔ m0 = 0; from specification nat