| m0 = # S2 ∧ 0 = n - n0 ∧ INVR(S2, s0, s, n0, n, source, dest) ∧ INV(S2, s0, s, n0, source) ∧ (done → dest ∈ S2) ∧ (S2 = ∅ → s0 = ∅) → ⟪done0 := done, S1 := s, S := s0, S0 := S2 ; while S0 ≠ ∅ ∧ ¬ done0 do { choose v with v ∈ S0 in if v = dest then done0 := true else { S0 := S0 -- v ; ADD(succ(v); S1, S) } ; if S0 = ∅ then S0 := S, S := ∅, n0 := n0 + 1 }⟫ ⟪norfail0 := (done0 ⊃ some(n0); fail)⟫ norfail0 = some(n), 〈ADD(succ(v); S1, S)〉 (S1 = s ∧ S = s0), ⟪ADD(succ(v); S1, S)⟫ (INV(S0 -- v, S, S1, n0, source) ∧ INVR(S0 -- v, S, S1, n0, n, source, dest)), 0 = n - n0, m0 + 1 = # S0, S2 = S0 -- v, ¬ done, S0 ≠ ∅, v ≠ dest, S0 ≠ ∅ ++ v, INVR(S0, S, S1, n0, n, source, dest), INV(S0, S, S1, n0, source), v ∈ S0, INV(S0 -- v, s0, s, n0, source), INVR(S0 -- v, s0, s, n0, n, source, dest) ⊦ ⟪while S2 ≠ ∅ ∧ ¬ done do { choose v with v ∈ S2 in if v = dest then done := true else { S2 := S2 -- v ; ADD(succ(v); s, s0) } ; if S2 = ∅ then S2 := s0, s0 := ∅, n0 := n0 + 1 }⟫ ⟪norfail0 := (done ⊃ some(n0); fail)⟫ norfail0 = some(n) |
⟪ADD(succ(v); S1, S)⟫ (INV(S0 -- v, S, S1, n0, source) ∧ INVR(S0 -- v, S, S1, n0, n, source, dest)), 〈ADD(succ(v); S1, S)〉 (S1 = s ∧ S = s0), ⟪done0 := false, S1 := s, S := s0, S3 := S0 -- v⟫ ⟪while S3 ≠ ∅ ∧ ¬ done0 do { choose v with v ∈ S3 in if v = dest then done0 := true else { S3 := S3 -- v ; ADD(succ(v); S1, S) } ; if S3 = ∅ then S3 := S, S := ∅, n0 := n0 + 1 }⟫ ⟪norfail0 := (done0 ⊃ some(n0); fail)⟫ norfail0 = some(n), m0 + 1 = # S0, 0 = n - n0, ¬ done, S2 = S0 -- v, S0 ≠ ∅ ++ v, v ≠ dest, S0 ≠ ∅, INVR(S0 -- v, s0, s, n0, n, source, dest), INV(S0 -- v, s0, s, n0, source), v ∈ S0, INV(S0, S, S1, n0, source), INVR(S0, S, S1, n0, n, source, dest) ⊦ ⟪while S2 ≠ ∅ ∧ ¬ done do { choose v with v ∈ S2 in if v = dest then done := true else { S2 := S2 -- v ; ADD(succ(v); s, s0) } ; if S2 = ∅ then S2 := s0, s0 := ∅, n0 := n0 + 1 }⟫ ⟪norfail0 := (done ⊃ some(n0); fail)⟫ norfail0 = some(n)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ 0 + m = m], [CSIMPSEQ : ⊦ n ≤ m → m + n0 - n = (m - n) + n0], [CSIMPSEQ : ⊦ s -- a = ∅ ↔ s = ∅ ∨ s = ∅ ++ a], [CSIMPSEQ : ⊦ a ∈ s → # (s -- a) = # s - 1])]]