| 〈ADD(succ(v); S1, S)〉 (S1 = s ∧ S = s0), ⟪ADD(succ(v); S1, S)⟫ INV(S0 -- v, S, S1, n0, source), S2 = S0 -- v, S0 ≠ ∅, # S0 ≠ 0, v ≠ dest, INV(S0, S, S1, n0, source), v ∈ S0, INV(S0 -- v, s0, s, n0, source), ∀ n. ¬ reach(source, dest, n), S0 = ∅ ++ v, (∃ n. ¬ ¬ reach(source, dest, n)) ∨ ¬ INV(s0, ∅, s, n0 + 1, source) ⊦ |
〈ADD(succ(v); S1, S)〉 (S1 = s ∧ S = s0), ⟪ADD(succ(v); S1, S)⟫ INV(∅, S, S1, n0, source), v ≠ dest, INV(∅ ++ v, S, S1, n0, source), INV(∅, s0, s, n0, source), reach(source, dest, n), ∀ n. ¬ reach(source, dest, n) ⊦
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ INV(∅, N, V, n, source) → ( ¬ INV(N, ∅, V, n + 1, source) ↔ false)], [CSIMPSEQ : ⊦ ∅ -- a = ∅], [CSIMPSEQ : ⊦ (s ++ a) -- a = s -- a], [CSIMPSEQ : ⊦ a ∈ ∅ ++ b ↔ a = b], [CSIMPSEQ : ⊦ # (∅ ++ a) = 1], [CSIMPSEQ : ⊦ ∅ ≠ s ++ a])]]