| finout(g), ∀ a. a ∈ s → ¬ haspathanylength(g)(a) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
finout(g), ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: <; (wellfounded) Used terms: # s
| finout(g), ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s);
| ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∃ a. a ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ a. a ∈ s
Used formulas: ∃ a. a ∈ s
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∃ a. a ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, finout(g) ∧ (∀ a0. a0 ∈ s -- a → ¬ haspathanylength(g)(a0))
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s1. ∀ b. (∃ a0. a0 ∈ s -- a ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: ⊦ a ∈ s → #(s -- a) = # s - 1; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < 1 ↔ m = 0; (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: s -- a, g
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, finout(g) ∧ (∀ a0. a0 ∈ s -- a → ¬ haspathanylength(g)(a0)) |
# s ≠ 0, a0 ≠ a, s ≠ ∅, haspathanylength(g)(a0), a ∈ s, a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); ⊦ a ∈ s -- a0 ↔ a ≠ a0 ∧ a ∈ s; (s)
| # s ≠ 0, a0 ≠ a, s ≠ ∅, haspathanylength(g)(a0), a ∈ s, a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
Used terms: a0
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s1. ∀ b. (∃ a0. a0 ∈ s -- a ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: ⊦ a ∈ s -- a0 ↔ a ≠ a0 ∧ a ∈ s; (s)
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used terms: a
| # s ≠ 0, s ≠ ∅, a ∈ s, a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
⊦ haspathanylength(g)(a) ↔ (∀ n. ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ))
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ n. ¬(∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used terms: a, g
| ⊦ haspathanylength(g)(a) ↔ (∀ n. ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )) |
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ n. ¬(∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
finout(g) ⊦ ∃ s0. ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s0. ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); Used terms: g, s, n
| finout(g) ⊦ ∃ s0. ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0 |
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s0. ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∪ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: s1 ∪ s0
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∪ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: unc: ⊦ s ∪ s0 = s0 ∪ s; from specification set-union una: ⊦ (s ∪ s0) ∪ s1 = s ∪ s0 ∪ s1; from specification set-union ⊦ a ∈ s1 ∪ s2 ↔ a ∈ s1 ∨ a ∈ s2; (s)
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: b
| # s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s1 ∨ b ∈ s0, ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∃ a. a ∈ s ∧ path(g)(a, b), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
# s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b)
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∃ a. a ∈ s ∧ path(g)(a, b), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, path(g)(a0, b), a0 ∈ s, a ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
| # s ≠ 0, s ≠ ∅, path(g)(a0, b), a0 ∈ s, a ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
# s ≠ 0, s ≠ ∅, path(g)(a0, b), a ∈ s, a0 ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
Used terms: a0
| # s ≠ 0, s ≠ ∅, path(g)(a0, b), a ∈ s, a0 ∈ s, ¬ b ∈ s1, ¬ b ∈ s0, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
# s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ b ∈ s0, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ b ∈ s0, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
reach≤(g)(s, n)(b) ↔ b ∈ s0, # s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
Used terms: b
| reach≤(g)(s, n)(b) ↔ b ∈ s0, # s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
# s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ reach≤(g)(s, n)(b), ¬ b ∈ s0, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ¬ reach≤(g)(s, n)(b), ¬ b ∈ s0, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ reach≤(g)(s, n)(b), ¬ b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
Used terms: b, a, g
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ reach≤(g)(s, n)(b), ¬ b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
# s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ¬ reach≤(g)(s, n)(x.last), ¬ x.last ∈ s0, ¬ x.last ∈ s1, ∀ b. (∃ a0. a0 ≠ x.head ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ x.head ∧ a0 ∈ s ∧ path(g)(a0, x.last), ∃ x0. x0.head = x.head ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ )
| # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ¬ reach≤(g)(s, n)(x.last), ¬ x.last ∈ s0, ¬ x.last ∈ s1, ∀ b. (∃ a0. a0 ≠ x.head ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ x.head ∧ a0 ∈ s ∧ path(g)(a0, x.last), ∃ x0. x0.head = x.head ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ) |
x = a1 + x1, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a1 ∈ s, ¬ reach≤(g)(s, n)(x.last), ¬ x.last ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x.last)
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a1, x1
| x = a1 + x1, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a1 ∈ s, ¬ reach≤(g)(s, n)(x.last), ¬ x.last ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x.last) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ reach≤(g)(s, n)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last)
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ reach≤(g)(s, n)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last) |
⊦ reach≤(g)(s, n)(b) ↔ (∃ m. m ≤ n ∧ reach(g)(s, m)(b))
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ m. ¬(m ≤ n ∧ reach(g)(s, m)((a1 ' + x1).last)), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ )
Used terms: (a1 ' + x1).last, n, s, g
| ⊦ reach≤(g)(s, n)(b) ↔ (∃ m. m ≤ n ∧ reach(g)(s, m)(b)) |
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ m. ¬(m ≤ n ∧ reach(g)(s, m)((a1 ' + x1).last)), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last)
Used terms: # x1
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last) |
# s ≠ 0, s ≠ ∅, n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last)
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ n < # x1, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last)
Used formulas: n < # x1
| # s ≠ 0, s ≠ ∅, n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (a ' + x).last = x.last; (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → (n ≤ m ↔ false); (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last), ((a1 ' + x1).take(n + 1)).head = a1 ∧ # (a1 ' + x1).take(n + 1) = n + 1 ∧ pathp(g)(⌜(a1 ' + x1).take(n + 1)⌝ )
Used terms: (a1 ' + x1).take(n + 1)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last), ((a1 ' + x1).take(n + 1)).head = a1 ∧ # (a1 ' + x1).take(n + 1) = n + 1 ∧ pathp(g)(⌜(a1 ' + x1).take(n + 1)⌝ ) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ (a ' + x).take(n + 1) = a + x.take(n); (s) ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m +1 = m + 1; (s) ⊦ n < # x → # x.take(n) = n; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ (a ' + x).head = a; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ⌜n⌝ < #(⌜a1 '⌝ + ⌜x1⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x1⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x1⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x1⌝ )[n], (⌜a1 '⌝ + ⌜x1⌝ )[n + 1]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used terms: ⌜a1 '⌝ + ⌜x1⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ⌜n⌝ < #(⌜a1 '⌝ + ⌜x1⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x1⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x1⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x1⌝ )[n], (⌜a1 '⌝ + ⌜x1⌝ )[n + 1]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x1.take(n)⌝ ), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n0. ¬(⌜n0⌝ < #(⌜a1 '⌝ + ⌜x1.take(n)⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0]))) ∨ (∃ n0. ¬(⌜n0 + 1⌝ < #(⌜a1 '⌝ + ⌜x1.take(n)⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0], (⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0 + 1]))), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used terms: ⌜a1 '⌝ + ⌜x1.take(n)⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n0. ¬(⌜n0⌝ < #(⌜a1 '⌝ + ⌜x1.take(n)⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0]))) ∨ (∃ n0. ¬(⌜n0 + 1⌝ < #(⌜a1 '⌝ + ⌜x1.take(n)⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0], (⌜a1 '⌝ + ⌜x1.take(n)⌝ )[n0 + 1]))), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ¬(¬ n < n0 → dom(g)((a1 ' + x1.take(n))[n0])) ∨ ¬(n1 < n → edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1])), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ n < # x → # x.take(n) = n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ¬(¬ n < n0 → dom(g)((a1 ' + x1.take(n))[n0])) ∨ ¬(n1 < n → edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1])), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ n < n0, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ n < n0, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ n < # x → (x + y)[n] = x[n]
# s ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ n0 < # a1 ', ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
# s ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, n0 < # a1 ', a1 ∈ s, n0 ≤ n, ¬ dom(g)(a1 '[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used terms: n0, x1.take(n), a1 '
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ n0 < # a1 ', ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)((a1 ' + x1.take(n))[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ n0 < # a1 ', ¬ dom(g)(x1.take(n)[n0 - # a1 ']), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) Used terms: a1 ', x1.take(n), n0
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ n0 < # a1 ', ¬ dom(g)(x1.take(n)[n0 - # a1 ']), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)(x1.take(n)[n0 - 1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, n0 < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)(x1.take(n)[n0 - 1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
n0 = m + 1, # s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)(x1.take(n)[m]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m
| n0 = m + 1, # s ≠ 0, n0 ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, a1 ∈ s, n0 ≤ n, ¬ dom(g)(x1.take(n)[m]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], m < # x1, m < n, n < # x1, m + 1 < # x1, a1 ∈ s, ¬ dom(g)(x1.take(n)[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m + 1 ≠ 0; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], m < # x1, m < n, n < # x1, m + 1 < # x1, a1 ∈ s, ¬ dom(g)(x1.take(n)[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n]
# s ≠ 0, s ≠ ∅, x1 ≠ [], m + 1 < # x1, n < # x1, m < # x1, m < n, a1 ∈ s, n ≤ # x1, ¬ dom(g)(x1[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: n, x1, m
| ⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], m + 1 < # x1, n < # x1, m < # x1, m < n, a1 ∈ s, n ≤ # x1, ¬ dom(g)(x1[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], m < n, m < # x1, n < # x1, m + 1 < # x1, a1 ∈ s, ¬ dom(g)(x1[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < n → m ≤ n; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], m < n, m < # x1, n < # x1, m + 1 < # x1, a1 ∈ s, ¬ dom(g)(x1[m]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ (a ' + x)[n + 1] = x[n]; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: m + 1
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n0 < # x1, n < # x1, n0 < # a1 ', a1 ∈ s, n0 ≤ n, ¬ dom(g)(a1 '[n0]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ dom(g)(a1), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ a '[0] = a; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ 0 ≤ m; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n < # x1, a1 ∈ s, ¬ dom(g)(a1), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
Used simplifier rules: ⊦ ¬ n < 0; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: 0
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < # x1, n1 < n, n < # x1, n1 + 1 < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < # x1, n1 < n, n < # x1, n1 + 1 < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1.take(n)[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n]
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, a1 ∈ s, n ≤ # x1, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: n1, x1, n
| ⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, a1 ∈ s, n ≤ # x1, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < n → m ≤ n; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ n0. n0 < # x1 → edge(g)((a1 ' + x1)[n0], x1[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, n1 < # x1 → edge(g)((a1 ' + x1)[n1], x1[n1]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used terms: n1
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, n1 < # x1 → edge(g)((a1 ' + x1)[n1], x1[n1]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, edge(g)((a1 ' + x1)[n1], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, edge(g)((a1 ' + x1)[n1], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ n < # x → (x + y)[n] = x[n]
# s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, edge(g)((a1 ' + x1)[n1], x1[n1]), a1 ∈ s, ¬ n1 < # a1 ', ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n1, x1.take(n), a1 '
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, edge(g)((a1 ' + x1)[n1], x1[n1]), a1 ∈ s, ¬ n1 < # a1 ', ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, n1 ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, edge(g)(x1[n1 - 1], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| # s ≠ 0, n1 ≠ 0, s ≠ ∅, x1 ≠ [], n1 < n, n1 < # x1, n < # x1, n1 + 1 < # x1, edge(g)(x1[n1 - 1], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
n1 = m + 1, # s ≠ 0, n1 ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, edge(g)(x1[m], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, m
| n1 = m + 1, # s ≠ 0, n1 ≠ 0, s ≠ ∅, x1 ≠ [], n1 + 1 < # x1, n < # x1, n1 < # x1, n1 < n, edge(g)(x1[m], x1[n1]), a1 ∈ s, ¬ edge(g)((a1 ' + x1.take(n))[n1], x1[n1]), ¬ x1.last ∈ s0, ¬ x1.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
# s ≠ 0, s ≠ ∅, x1 ≠ [], m + 1 < # x1, n < # x1, m + 1 < n, 2 + m < # x1, edge(g)(x1[m], x1[m + 1]), a1 ∈ s, ¬ edge(g)(x1.take(n)[m], x1[m + 1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m +1 = m + 1; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m + 1 ≠ 0; (s)
| # s ≠ 0, s ≠ ∅, x1 ≠ [], m + 1 < # x1, n < # x1, m + 1 < n, 2 + m < # x1, edge(g)(x1[m], x1[m + 1]), a1 ∈ s, ¬ edge(g)(x1.take(n)[m], x1[m + 1]), ¬ x1.last ∈ s1, ¬ x1.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ n0. ¬ # x1 < n0 → dom(g)((a1 ' + x1)[n0]), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, x1.last) |
⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n]
Used simplifier rules: ⊦ m < n → m ≤ n; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n, x1, m
| ⊦ n < m ∧ m ≤ # x → x.take(m)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ n < # x1, ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), # x1 ≤ n ∧ reach(g)(s, # x1)((a1 ' + x1).last) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, # x1 ≤ n, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last)
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, # x1 ≤ n, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, # x1 ≤ n, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), (a1 ' + x1).head = a1 ∧ #(a1 ' + x1) = n + 1 ∧ pathp(g)(⌜a1 ' + x1⌝ )
Used terms: a1 ' + x1
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, # x1 ≤ n, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s0, ¬ (a1 ' + x1).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), (a1 ' + x1).head = a1 ∧ #(a1 ' + x1) = n + 1 ∧ pathp(g)(⌜a1 ' + x1⌝ ) |
# x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ )
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → (m ≤ n ↔ m < n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ (a ' + x).head = a; (s)
| # x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ reach(g)(s, # x1)((a1 ' + x1).last), ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ) |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ (a1 ' + x1).last = x.last ∧ # x = # x1 + 1), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last)
Used terms: g, s, # x1, (a1 ' + x1).last
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ (a1 ' + x1).last = x.last ∧ # x = # x1 + 1), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ), ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last) |
# x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ (a1 ' + x1).last ≠ x.last ∨ # x ≠ # x1 + 1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ )
| # x1 ≠ n, # s ≠ 0, s ≠ ∅, # x1 < n, pathp(g)(⌜a1 '⌝ + ⌜x1⌝ ), a1 ∈ s, ¬ (a1 ' + x1).last ∈ s1, ¬ (a1 ' + x1).last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ (a1 ' + x1).last ≠ x.last ∨ # x ≠ # x1 + 1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a1 ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x1).last), ∃ x0. x0.head = a1 ∧ # x0 = n + 1 ∧ pathp(g)(⌜x0⌝ ) |
Used simplifier rules: ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ (a ' + x).head = a; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m +1 = m + 1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: a1 ' + x1
| # s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b) |
# s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s ≠ 0, s ≠ ∅, a ∈ s, (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
# s ≠ 0, s ≠ ∅, a ∈ s, b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b)
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
# s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, b ∈ s0, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, b ∈ s0, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
reach≤(g)(s, n)(b) ↔ b ∈ s0, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: b
| reach≤(g)(s, n)(b) ↔ b ∈ s0, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, reach≤(g)(s, n)(b), b ∈ s0, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
| # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, reach≤(g)(s, n)(b), b ∈ s0, a ∈ s, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
⊦ reach≤(g)(s, n)(b) ↔ (∃ m. m ≤ n ∧ reach(g)(s, m)(b))
# s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ m. m ≤ n ∧ reach(g)(s, m)(b), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: b, n, s, g
| ⊦ reach≤(g)(s, n)(b) ↔ (∃ m. m ≤ n ∧ reach(g)(s, m)(b)) |
| # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ m. m ≤ n ∧ reach(g)(s, m)(b), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, reach(g)(s, m)(b), b ∈ s0, a ∈ s, m ≤ n, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)
| # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, reach(g)(s, m)(b), b ∈ s0, a ∈ s, m ≤ n, ¬ b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b) |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, m ≤ n, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = m + 1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: g, s, m, b
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, a ∈ s, b ∈ s0, m ≤ n, ¬ b ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = m + 1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), ∃ a. a ∈ s ∧ path(g)(a, b), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# x = m + 1, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, x.last ∈ s0, a ∈ s, m ≤ n, ¬ x.last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, x.last), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, x.last)
| # x = m + 1, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, x.last ∈ s0, a ∈ s, m ≤ n, ¬ x.last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, x.last), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, x.last) |
# x = m + 1, x = a1 + x0, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a ∈ s, x.last ∈ s0, a1 ∈ s, m ≤ n, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, x.last), ∃ a. a ∈ s ∧ path(g)(a, x.last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: x, a1, x0
| # x = m + 1, x = a1 + x0, # s ≠ 0, # s0 ≠ 0, s ≠ ∅, s0 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a ∈ s, x.last ∈ s0, a1 ∈ s, m ≤ n, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, x.last), ∃ a. a ∈ s ∧ path(g)(a, x.last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ a0. a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ a0. a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
# s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, (a1 ' + x0).last ∈ s0, a ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), a1 ∈ s ∧ path(g)(a1, (a1 ' + x0).last)
Used terms: a1
| # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, (a1 ' + x0).last ∈ s0, a ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), a1 ∈ s ∧ path(g)(a1, (a1 ' + x0).last) |
# s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ path(g)(a1, (a1 ' + x0).last), ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ path(g)(a1, (a1 ' + x0).last), ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
# s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, (a1 ' + x0).last ∈ s0, a ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a1 = x.head ∧ (a1 ' + x0).last = x.last), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last)
Used terms: (a1 ' + x0).last, a1, g
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, (a1 ' + x0).last ∈ s0, a ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a1 = x.head ∧ (a1 ' + x0).last = x.last), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last) |
# s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ x. ¬ pathp(g)(⌜x⌝ ) ∨ x = [] ∨ a1 ≠ x.head ∨ (x.head ' + x0).last ≠ x.last, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )
| # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a ∈ s, (a1 ' + x0).last ∈ s0, a1 ∈ s, # x0 ≤ n, ¬ (a1 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ x. ¬ pathp(g)(⌜x⌝ ) ∨ x = [] ∨ a1 ≠ x.head ∨ (x.head ' + x0).last ≠ x.last, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, (a1 ' + x0).last), ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ) |
Used simplifier rules: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ (a ' + x).head = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) Used terms: a1 + x0
| # s ≠ 0, s ≠ ∅, a ∈ s, b ∈ s1, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b), b ∈ s1 ∨ b ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b) |
# s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, path(g)(a0, b), a ∈ s, b ∈ s1, a0 ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, path(g)(a0, b), a ∈ s, b ∈ s1, a0 ∈ s, ∀ b. (∃ a0. a0 ≠ a ∧ a0 ∈ s ∧ path(g)(a0, b)) ↔ b ∈ s1, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach≤(g)(s, n)(a) ↔ a ∈ s0, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ), ∃ a. a ∈ s ∧ path(g)(a, b) |
Used terms: a0
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ s0. ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ s0, ∃ a. a ∈ s |
∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ ∅, ∃ a. a ∈ s
Used terms: ∅
| ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∀ b. (∃ a. a ∈ s ∧ path(g)(a, b)) ↔ b ∈ ∅, ∃ a. a ∈ s |
# s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a. a ∈ s
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic ⊦ ¬ a ∈ ∅; (s)
| # s ≠ 0, s ≠ ∅, path(g)(a, b), a ∈ s, ∀ a. a ∈ s → ¬ haspathanylength(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) ∧ (∀ a. a ∈ s0 → ¬ haspathanylength(g)(a)) → (∃ s1. ∀ b. (∃ a. a ∈ s0 ∧ path(g)(a, b)) ↔ b ∈ s1) ⊦ ∃ a. a ∈ s |
Used terms: a
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.