| ∀ n, n0, S0, S, S1, source, dest, done0. m0 = 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 = 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) |
∀ n, n0, S0, S, S1, source, dest, done0. m0 = 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 = n - n0, INVR(S0, S, S1, n0, n, source, dest), INV(S0, S, S1, n0, source), done0 → dest ∈ S0, S0 = ∅ → S = ∅, 0 = # S0 ⊦ ⟪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)
∀ n, n0, S0, S, S1, source, dest, done0. m0 = 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), ∀ S0, m0, n, n0, S, S1, source, dest, done0. m1 = # S0 ∧ (∀ n, n0, S0, S, S1, source, dest, done0. m0 = 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 = 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 = n - n0, INVR(S0, S, S1, n0, n, source, dest), INV(S0, S, S1, n0, source), done0 → dest ∈ S0, S0 = ∅ → S = ∅, m1 +1 = # S0 ⊦ ⟪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)
[[CONCRETESIMPRULES : ([CSIMPGEN : nat generated by 0, +1;])]]