| S0 = ∅ ++ source, S1 = ∅ ++ source, S = ∅, n0 = 0, ¬ done0, ∀ n. ¬ reach(source, dest, n) ⊦ [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 = fail |
S0 = ∅ ++ source, S1 = ∅ ++ source, S = ∅, n0 = 0, ¬ done0, ∀ n. ¬ reach(source, dest, n), (∃ n. ¬ ¬ reach(source, dest, n)) ∨ ¬ (done0 → dest ∈ S0) ∨ ¬ INV(S0, S, S1, n0, source) ⊦
S0 ≠ ∅ ∧ ¬ done0, ∀ n. ¬ reach(source, dest, n), done0 → dest ∈ S0, INV(S0, S, S1, n0, source) ⊦ [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] ((∀ n. ¬ reach(source, dest, n)) ∧ (done0 → dest ∈ S0) ∧ INV(S0, S, S1, n0, source))
¬ (S0 ≠ ∅ ∧ ¬ done0), ∀ n. ¬ reach(source, dest, n), done0 → dest ∈ S0, INV(S0, S, S1, n0, source) ⊦ [norfail0 := (done0 ⊃ some(n0); fail)] norfail0 = fail
[[CONCRETESIMPRULES : ()], [EXTRAFMAS : (( (∀ n. ¬ reach(source, dest, n)) ∧ (done0 → dest ∈ S0) ∧ INV(S0, S, S1, n0, source)))]]