| ∀ b. b ∈ s → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s → # x < n |
∀ b. b ∈ s → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s → # x < n
| ∀ b. b ∈ s → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s → # x < n |
∀ b. b ∈ s0 ++ a → ¬ haspathanylength(g)(b), ∀ g. (∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 ++ a → # x < n
Used simplifier rules: Set('a) generated by ∅, ++;; ⊦ ¬ a ∈ ∅; (s)
| ∀ b. b ∈ s0 ++ a → ¬ haspathanylength(g)(b), ∀ g. (∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 ++ a → # x < n |
∀ g. (∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ g. (∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
(∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used terms: g
| (∀ b. b ∈ s0 → ¬ haspathanylength(g)(b)) → (∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
(b ∈ s0 → ¬ haspathanylength(g)(b)) → (∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
| (b ∈ s0 → ¬ haspathanylength(g)(b)) → (∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n), ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
haspathanylength(g)(b), b ∈ s0, ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
| haspathanylength(g)(b), b ∈ s0, ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
# s0 ≠ 0, s0 ≠ ∅, haspathanylength(g)(b), b ∈ s0, ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s0 ≠ 0, s0 ≠ ∅, haspathanylength(g)(b), b ∈ s0, ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
Used terms: b
| ∀ b. b = a ∨ b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
a = a ∨ a ∈ s0 → ¬ haspathanylength(g)(a), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used terms: a
| a = a ∨ a ∈ s0 → ¬ haspathanylength(g)(a), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
¬ haspathanylength(g)(a), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
| ¬ haspathanylength(g)(a), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
⊦ haspathanylength(g)(a) ↔ (∀ n. ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ ))
∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∃ n. ¬(∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used terms: a, g
| ⊦ haspathanylength(g)(a) ↔ (∀ n. ∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )) |
| ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∃ n. ¬(∃ x. x.head = a ∧ # x = n + 1 ∧ pathp(g)(⌜x⌝ )) ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
| ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
n < n0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ), ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
¬ n < n0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ), ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n
Used formulas: n < n0
| n < n0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ), ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
n < n0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n0 + 1, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: n0 + 1
| n < n0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n0 + 1, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x ≠ [], n < # x, n0 < # x, n < n0, n + 1 < # x, pathp(g)(⌜x⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, x.head = a ∨ x.head ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (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 < n + 1 ↔ ¬ n < m; (s)
| x ≠ [], n < # x, n0 < # x, n < n0, n + 1 < # x, pathp(g)(⌜x⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, x.head = a ∨ x.head ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x = a0 + x0, x ≠ [], n + 1 < # x, n < n0, n0 < # x, n < # x, pathp(g)(⌜x⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| x = a0 + x0, x ≠ [], n + 1 < # x, n < n0, n0 < # x, n < # x, pathp(g)(⌜x⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → ¬ n < m; (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) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a + x = a ' + x; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
a0 = a, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
| a0 = a, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
| x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ((a ' + x0).take(n0 + 1)).head = a ∧ # (a ' + x0).take(n0 + 1) = n0 + 1 ∧ pathp(g)(⌜(a ' + x0).take(n0 + 1)⌝ )
Used terms: (a ' + x0).take(n0 + 1)
| x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ((a ' + x0).take(n0 + 1)).head = a ∧ # (a ' + x0).take(n0 + 1) = n0 + 1 ∧ pathp(g)(⌜(a ' + x0).take(n0 + 1)⌝ ) |
x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
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)
| x0 ≠ [], n < # x0, n < n0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
# x1 = n0, x0 = x1 + x2, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦
Used simplifier rules: ⊦ n ≤ # x → (y = x.take(n) ∧ z = x.drop(n) ↔ x = y + z ∧ # y = n); (elim) Used terms: n0, x0, x1, x2
| # x1 = n0, x0 = x1 + x2, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ |
x1 ≠ [], n < # x1 + # x2, n < # x1, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ #(x + y) = # x + # y; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜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 ≤ m + n; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| x1 ≠ [], n < # x1 + # x2, n < # x1, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
x1 ≠ [], n < # x1, n < # x1 + # x2, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), (∃ n. ¬(⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ )[n], (⌜a '⌝ + ⌜x1⌝ )[n + 1]))) ⊦
Used terms: ⌜a '⌝ + ⌜x1⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| x1 ≠ [], n < # x1, n < # x1 + # x2, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), (∃ n. ¬(⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ )[n], (⌜a '⌝ + ⌜x1⌝ )[n + 1]))) ⊦ |
x1 ≠ [], n < # x1 + # x2, n < # x1, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦
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) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s)
| x1 ≠ [], n < # x1 + # x2, n < # x1, pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
x1 ≠ [], n < # x1, n < # x1 + # x2, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ n. ⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n], (⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n + 1]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦
Used terms: ⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| x1 ≠ [], n < # x1, n < # x1 + # x2, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ n. ⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n], (⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n + 1]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦ |
x1 ≠ [], n < # x1 + # x2, n < # x1, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ + ⌜x1⌝ )[m] = (x + x0 + x1)[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 ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # a ' = 0 +1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (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)
| x1 ≠ [], n < # x1 + # x2, n < # x1, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦ |
x1 ≠ [], n < # x1, n < # x1 + # x2, ¬ # x1 < n0, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
| x1 ≠ [], n < # x1, n < # x1 + # x2, ¬ # x1 < n0, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n < # x1 + # x2, n < # x1, n0 ≤ # x1, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| x1 ≠ [], n < # x1 + # x2, n < # x1, n0 ≤ # x1, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦ |
x1 ≠ [], n < # x1, n < # x1 + # x2, n0 ≤ # x1, ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used terms: n0
| x1 ≠ [], n < # x1, n < # x1 + # x2, n0 ≤ # x1, ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n < # x1, n < # x1 + # x2, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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
| x1 ≠ [], n < # x1, n < # x1 + # x2, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
x1 ≠ [], n < # x1 + # x2, n < # x1, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1 + # x2, n0 ≤ # x1, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ a '[0] = a; (s) ⊦ 0 ≤ m; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: a ', x1 + x2, n0
| ⊦ n < # x → (x + y)[n] = x[n] |
| x1 ≠ [], n < # x1 + # x2, n < # x1, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1 + # x2, n0 ≤ # x1, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]) ⊦ |
n0 ≠ 0, x1 ≠ [], n < # x1, n < # x1 + # x2, dom(g)((x1 + x2)[n0 - 1]), n0 ≤ # x1, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
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)
| n0 ≠ 0, x1 ≠ [], n < # x1, n < # x1 + # x2, dom(g)((x1 + x2)[n0 - 1]), n0 ≤ # x1, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
Used simplifier rules: ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ n < # x → (x + y)[n] = x[n]; (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 n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m
| x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n < # x1 + # x2, n < # x1, n1 < # x1, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦
| x1 ≠ [], n < # x1 + # x2, n < # x1, n1 < # x1, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. n2 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n2], (x1 + x2)[n2]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦ |
x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), n1 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n1], (x1 + x2)[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used terms: n1
| x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), n1 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n1], (x1 + x2)[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, n1 < # x1 + # x2, edge(g)((a ' + x1 + x2)[n1], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ n < # x → (x + y)[n] = x[n]; (s)
| x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, n1 < # x1 + # x2, edge(g)((a ' + x1 + x2)[n1], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
x1 ≠ [], n1 < # x1 + # x2, n < # x1 + # x2, n < # x1, n1 < # x1, edge(g)((a ' + x1 + x2)[n1], x1[n1]), ¬ n1 < # a ', ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ a '[0] = a; (s) ⊦ m < n → n ≠ 0; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → x[0] = x.head; (s) Used terms: a ', x1 + x2, n1
| ⊦ n < # x → (x + y)[n] = x[n] |
| x1 ≠ [], n1 < # x1 + # x2, n < # x1 + # x2, n < # x1, n1 < # x1, edge(g)((a ' + x1 + x2)[n1], x1[n1]), ¬ n1 < # a ', ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦ |
n1 ≠ 0, x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, n1 < # x1 + # x2, edge(g)((x1 + x2)[n1 - 1], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
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)
| n1 ≠ 0, x1 ≠ [], n1 < # x1, n < # x1, n < # x1 + # x2, n1 < # x1 + # x2, edge(g)((x1 + x2)[n1 - 1], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n1 = m + 1, n1 ≠ 0, x1 ≠ [], n1 < # x1 + # x2, n < # x1 + # x2, n < # x1, n1 < # x1, edge(g)((x1 + x2)[m], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, m
| n1 = m + 1, n1 ≠ 0, x1 ≠ [], n1 < # x1 + # x2, n < # x1 + # x2, n < # x1, n1 < # x1, edge(g)((x1 + x2)[m], x1[n1]), ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]) ⊦ |
x1 ≠ [], m + 1 < # x1, n < # x1, n < # x1 + # x2, edge(g)((x1 + x2)[m], x1[m + 1]), ¬ edge(g)(x1[m], x1[m + 1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m + n < m0 → m + n < m0 + n0; (s) ⊦ m + 1 ≠ 0; (s)
| x1 ≠ [], m + 1 < # x1, n < # x1, n < # x1 + # x2, edge(g)((x1 + x2)[m], x1[m + 1]), ¬ edge(g)(x1[m], x1[m + 1]), ∀ n2. ¬ # x1 + # x2 < n2 → dom(g)((a ' + x1 + x2)[n2]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
Used simplifier rules: ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ 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: x1, x2, m
| ⊦ n < # x → (x + y)[n] = x[n] |
| x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
# s0 ≠ 0, s0 ≠ ∅, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s0 ≠ 0, s0 ≠ ∅, x0 ≠ [], n < n0, n < # x0, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ x. x.head = a ∧ # x = n0 + 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) = (# x)+1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ m +1 = m + 1; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: a0 ' + x0
| ¬ n < n0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ), ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n |
n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ ∃ n. ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
n0 ≤ n, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n + 1, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used terms: n + 1
| n0 ≤ n, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ (x.head = a ∨ x.head ∈ s0) → # x < n + 1, ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x ≠ [], n0 < # x, n < # x, pathp(g)(⌜x⌝ ), n0 ≤ n, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), x.head = a ∨ x.head ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat 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 < n + 1 ↔ ¬ n < m; (s)
| x ≠ [], n0 < # x, n < # x, pathp(g)(⌜x⌝ ), n0 ≤ n, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), x.head = a ∨ x.head ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
x = a0 + x0, x ≠ [], n < # x, n0 < # x, pathp(g)(⌜x⌝ ), n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| x = a0 + x0, x ≠ [], n < # x, n0 < # x, pathp(g)(⌜x⌝ ), n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ )
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ ∃ x. x.head = a ∧ # x = n0 + 1 ∧ pathp(g)(⌜x⌝ ) |
pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, a0 = a ∨ a0 ∈ s0 ⊦ ((a0 ' + x0).take(n0 + 1)).head = a ∧ # (a0 ' + x0).take(n0 + 1) = n0 + 1 ∧ pathp(g)(⌜(a0 ' + x0).take(n0 + 1)⌝ )
Used terms: (a0 ' + x0).take(n0 + 1)
| pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, a0 = a ∨ a0 ∈ s0 ⊦ ((a0 ' + x0).take(n0 + 1)).head = a ∧ # (a0 ' + x0).take(n0 + 1) = n0 + 1 ∧ pathp(g)(⌜(a0 ' + x0).take(n0 + 1)⌝ ) |
pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ )
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)
| pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), a0 = a ∨ a0 ∈ s0 ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ) |
a0 = a, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ )
pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ )
| a0 = a, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ) |
pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
| pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ n, n ≤ # x0, n0 ≤ # x0, ¬ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
# x1 = n0, x0 = x1 + x2, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦
Used simplifier rules: ⊦ n ≤ # x → (y = x.take(n) ∧ z = x.drop(n) ↔ x = y + z ∧ # y = n); (elim) Used terms: n0, x0, x1, x2
| # x1 = n0, x0 = x1 + x2, pathp(g)(⌜a '⌝ + ⌜x0⌝ ), n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ |
pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), n ≤ # x1 + # x2, # x1 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m ≤ m + n; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ #(x + y) = # x + # y; (s)
| pathp(g)(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ), n ≤ # x1 + # x2, # x1 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# x1 ≤ n, n ≤ # x1 + # x2, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ n. ⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n], (⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n + 1]) ⊦
Used terms: ⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # x1 ≤ n, n ≤ # x1 + # x2, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ n. ⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n], (⌜a '⌝ + ⌜x1⌝ + ⌜x2⌝ )[n + 1]) ⊦ |
n ≤ # x1 + # x2, # x1 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ + ⌜x1⌝ )[m] = (x + x0 + x1)[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 ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # a ' = 0 +1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (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)
| n ≤ # x1 + # x2, # x1 ≤ n, ¬ pathp(g)(⌜a '⌝ + ⌜x1⌝ ), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# x1 ≤ n, n ≤ # x1 + # x2, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), (∃ n. ¬(⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ )[n], (⌜a '⌝ + ⌜x1⌝ )[n + 1]))) ⊦
Used terms: ⌜a '⌝ + ⌜x1⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # x1 ≤ n, n ≤ # x1 + # x2, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), (∃ n. ¬(⌜n⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → dom(g)((⌜a '⌝ + ⌜x1⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a '⌝ + ⌜x1⌝ ) → edge(g)((⌜a '⌝ + ⌜x1⌝ )[n], (⌜a '⌝ + ⌜x1⌝ )[n + 1]))) ⊦ |
n ≤ # x1 + # x2, # x1 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦
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) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s)
| n ≤ # x1 + # x2, # x1 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ¬(¬ # x1 < n0 → dom(g)((a ' + x1)[n0])) ∨ ¬(n1 < # x1 → edge(g)((a ' + x1)[n1], x1[n1])) ⊦ |
# x1 ≤ n, n ≤ # x1 + # x2, ¬ # x1 < n0, ¬ dom(g)((a ' + x1)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
n1 < # x1, # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
| # x1 ≤ n, n ≤ # x1 + # x2, ¬ # x1 < n0, ¬ dom(g)((a ' + x1)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ dom(g)((a ' + x1)[n0]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦
Used terms: n0
| n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ a '[0] = a; (s) ⊦ 0 ≤ m; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: a ', x1 + x2, n0
| ⊦ n < # x → (x + y)[n] = x[n] |
| n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n0 ≠ 0, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| n0 ≠ 0, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
n0 ≠ 0, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) Used terms: a ', x1 + x2, n0
| ⊦ n < # x → (x + y)[n] = x[n] |
| n0 ≠ 0, dom(g)((a ' + x1 + x2)[n0]), n0 ≤ n, n0 ≤ # x1, # x1 ≤ n, n ≤ # x1 + # x2, n0 ≤ # x1 + # x2, ¬ n0 < # a ', ¬ dom(g)((a ' + x1)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n0 ≠ 0, dom(g)((x1 + x2)[n0 - 1]), n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦
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)
| n0 ≠ 0, dom(g)((x1 + x2)[n0 - 1]), n0 ≤ # x1 + # x2, n ≤ # x1 + # x2, # x1 ≤ n, n0 ≤ # x1, n0 ≤ n, ¬ dom(g)((a ' + x1)[n0]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]) ⊦ |
Used simplifier rules: ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ n < # x → (x + y)[n] = x[n]; (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 n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m
| n1 < # x1, # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ # x = 0 ↔ x = []; (s)
| x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ n0. n0 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n0], (x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)((a ' + x1)[n1], x1[n1]), n1 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n1], (x1 + x2)[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦
Used terms: n1
| x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)((a ' + x1)[n1], x1[n1]), n1 < # x1 + # x2 → edge(g)((a ' + x1 + x2)[n1], (x1 + x2)[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦ |
x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, edge(g)((a ' + x1 + x2)[n1], x1[n1]), # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ n < # x → (x + y)[n] = x[n]; (s)
| x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, edge(g)((a ' + x1 + x2)[n1], x1[n1]), # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, edge(g)((a ' + x1 + x2)[n1], x1[n1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ n1 < # a ', ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ a '[0] = a; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → x[0] = x.head; (s) Used terms: a ', x1 + x2, n1
| ⊦ n < # x → (x + y)[n] = x[n] |
| x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, edge(g)((a ' + x1 + x2)[n1], x1[n1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ n1 < # a ', ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦ |
n1 ≠ 0, x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, edge(g)((x1 + x2)[n1 - 1], x1[n1]), # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦
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)
| n1 ≠ 0, x1 ≠ [], n1 < n, n1 < # x1, n1 < # x1 + # x2, edge(g)((x1 + x2)[n1 - 1], x1[n1]), # x1 ≤ n, n ≤ # x1 + # x2, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b) ⊦ |
n1 = m + 1, n1 ≠ 0, x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, edge(g)((x1 + x2)[m], x1[n1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, m
| n1 = m + 1, n1 ≠ 0, x1 ≠ [], n1 < # x1 + # x2, n1 < # x1, n1 < n, edge(g)((x1 + x2)[m], x1[n1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)((a ' + x1)[n1], x1[n1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦ |
x1 ≠ [], m + 1 < n, m + 1 < # x1, edge(g)((x1 + x2)[m], x1[m + 1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)(x1[m], x1[m + 1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m0 → m + n < m0 + n0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m + 1 ≠ 0; (s)
| x1 ≠ [], m + 1 < n, m + 1 < # x1, edge(g)((x1 + x2)[m], x1[m + 1]), n ≤ # x1 + # x2, # x1 ≤ n, ¬ edge(g)(x1[m], x1[m + 1]), ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n, ∀ n0. ¬ # x1 + # x2 < n0 → dom(g)((a ' + x1 + x2)[n0]) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
Used simplifier rules: ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ 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: x1, x2, m
| ⊦ n < # x → (x + y)[n] = x[n] |
| pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ) |
# s0 ≠ 0, s0 ≠ ∅, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ )
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s0 ≠ 0, s0 ≠ ∅, pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s0, n0 ≤ # x0, n ≤ # x0, n0 ≤ n, ∀ b. b ∈ s0 → ¬ haspathanylength(g)(b), ∀ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ x.head ∈ s0 → # x < n ⊦ a0 = a ∧ pathp(g)(⌜a '⌝ + ⌜x0.take(n0)⌝ ) |
Used simplifier rules: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ (a ' + x).head = a; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m +1 = m + 1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n → n ≠ 0; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: a0 ' + x0
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.