| ∀ S0, n, n0, S, S1, source, dest, done0. m0 = # S0 ∧ 0 = n - n0 ∧ INVR(S0, S, S1, n0, n, source, dest) ∧ INV(S0, S, S1, n0, source) ∧ (done0 → dest ∈ S0) ∧ (S0 = ∅ → S = ∅) → ⟪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), 0 = n - n0, m0 + 1 = # S0, S0 ≠ ∅, reach(source, dest, n) ∧ ¬ reach<(source, dest, n) ∧ n0 ≤ n ∧ ((∃ a. a ∈ S0 ∧ reachS(a, {dest} , n - n0)) ∨ n0 < n ∧ (∃ b. b ∈ S ∧ reachS(b, {dest} , n - n0 - 1))), INV(S0, S, S1, n0, source), ∀ v. ¬ v ∈ S0 ⊦ |
∀ S0, n, n0, S, S1, source, dest, done0. m0 = # S0 ∧ 0 = n - n0 ∧ INVR(S0, S, S1, n0, n, source, dest) ∧ INV(S0, S, S1, n0, source) ∧ (done0 → dest ∈ S0) ∧ (S0 = ∅ → S = ∅) → ⟪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), m0 + 1 = # S0, S0 ≠ ∅, dest ∈ S0, reach(source, dest, n0), INV(S0, S, S1, n0, source), ¬ reach<(source, dest, n0), ∀ v. ¬ v ∈ S0 ⊦
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ a ∈ s → s ≠ ∅], [CSIMPSEQ : ⊦ ¬ n < n], [CSIMPSEQ : ⊦ ¬ reach<(source, b, 0)], [CSIMPSEQ : ⊦ reach(a, b, 0) ↔ a = b], [CSIMPSEQ : ⊦ m - m = 0], [CSIMPSEQ : ⊦ m ≤ m], [CSIMPSEQ : ⊦ reachS(a, ∅ ++ b, n) ↔ ¬ ¬ ( reach(a, b, n) ∧ ¬ reach<(a, b, n))], [CSIMPSEQ : ⊦ {a} = ∅ ++ a], [CSIMPSEQ : ⊦ m ≤ n → (n - m = 0 ↔ n = m)])]]