| boolvar ∨ n0 = N +1 ∧ N = N'' +1 until Boolvar, □ (Act = Act' ∧ Inp = Inp'), Rely(m, cs0, CS) ∧ (Idle(m, cs0) ↔ Idle(m, CS)) ∧ (Inv(cs0) → Inv(CS)) → (Rely(m, CS', CS'') ∧ (Idle(m, CS') ↔ Idle(m, CS'')) ∧ (Inv(CS') → Inv(CS''))) -+-> (last ⊃ Idle(m, CS) ∧ Inv(CS);Guar(m, CS, CS') ∧ (∀ m0. m0 ≠ m → (Idle(m0, CS) ↔ Idle(m0, CS'))) ∧ (Inv(CS) → Inv(CS'))), INDHYP-nat(n0), CInv(n, act, cs), act(m), m ≤ n, ¬ false, boolvar1 → cs = cs0 ∧ act = act0 ∧ inp = inp0 ∧ (boolvar ↔ boolvar0) ∧ n0 = n1, (false ⊃ Idle(m, cs) ∧ Inv(cs);Guar(m, cs, cs0) ∧ (∀ m1. m1 ≠ m → (Idle(m1, cs) ↔ Idle(m1, cs0))) ∧ (Inv(cs) → Inv(cs0))), act = act0, inp = inp0 ⊦ (false ⊃ CInv(n, act, cs) ∧ Idle(m, cs) ∧ act(m);CGuar(m, act, cs, act0, cs0) ∧ (CInv(n, act, cs) ∧ act(m) → CInv(n, act0, cs0) ∧ act0(m))) ∧ ( (CRely(m, act0, cs0, Act, CS) ∧ (CInv(n, act0, cs0) ∧ act0(m) → CInv(n, Act, CS) ∧ Act(m))) ∧ ¬ boolvar → ((CRely(m, Act', CS', Act'', CS'') ∧ (CInv(n, Act', CS') ∧ Act'(m) → CInv(n, Act'', CS'') ∧ Act''(m))) ∧ ¬ Boolvar) -+-> (last ⊃ CInv(n, Act, CS) ∧ Idle(m, CS) ∧ Act(m);CGuar(m, Act, CS, Act', CS') ∧ (CInv(n, Act, CS) ∧ Act(m) → CInv(n, Act', CS') ∧ Act'(m)))) |
□ (Act = Act' ∧ Inp = Inp'), Rely(m, cs0, CS) ∧ (Idle(m, cs0) ↔ Idle(m, CS)) ∧ (Inv(cs0) → Inv(CS)) → (Rely(m, CS', CS'') ∧ (Idle(m, CS') ↔ Idle(m, CS'')) ∧ (Inv(CS') → Inv(CS''))) -+-> (last ⊃ Idle(m, CS) ∧ Inv(CS);Guar(m, CS, CS') ∧ (∀ m0. m0 ≠ m → (Idle(m0, CS) ↔ Idle(m0, CS'))) ∧ (Inv(CS) → Inv(CS'))), boolvar ∨ n0 = N + 1 ∧ N = N'' + 1 until Boolvar, INDHYP-nat(n0), CInv(n, act0, cs), act0(m), m ≤ n, Guar(m, cs, cs0), boolvar1 → cs = cs0 ∧ (boolvar ↔ boolvar0) ∧ n0 = n1, ∀ m1. m1 ≠ m → (Idle(m1, cs) ↔ Idle(m1, cs0)), Inv(cs) → Inv(cs0) ⊦ CGuar(m, act0, cs, act0, cs0) ∧ CInv(n, act0, cs0) ∧ ( CRely(m, act0, cs0, Act, CS) ∧ CInv(n, Act, CS) ∧ Act(m) ∧ ¬ boolvar → (CRely(m, Act', CS', Act'', CS'') ∧ (CInv(n, Act', CS') ∧ Act'(m) → CInv(n, Act'', CS'') ∧ Act''(m)) ∧ ¬ Boolvar) -+-> (last ⊃ CInv(n, Act, CS) ∧ Idle(m, CS) ∧ Act(m);CGuar(m, Act, CS, Act', CS') ∧ (CInv(n, Act, CS) ∧ Act(m) → CInv(n, Act', CS') ∧ Act'(m))))
Used simplifier rules: succ: ⊦ m +1 = m + 1; from specification nat-basic2