| finout(g) ⊦ ∃ s0. ∀ a. reach(g)(s, n)(a) ↔ a ∈ s0 |
finout(g) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
finout(g), ∀ g, s. finout(g) → (∃ s0. ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s0) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 +1)(a) ↔ a ∈ s0
Used simplifier rules: Nat freely generated by 0, +1;;
| finout(g) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
Used simplifier rules: <; (wellfounded) Used terms: # s
| finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
finout(g), ∃ a. a ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0, ∃ a. a ∈ s
Used formulas: ∃ a. a ∈ s
| finout(g), ∃ a. a ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); 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, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s1. ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); ⊦ 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. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ s1. ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
| # s ≠ 0, s ≠ ∅, a ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0
Used formulas: dom(g)(a)
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a0. reach(g)(s, 0)(a0) ↔ a0 ∈ s1 ++ a
Used terms: s1 ++ a
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a0. reach(g)(s, 0)(a0) ↔ a0 ∈ s1 ++ a |
# s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0
| reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0, 0, s -- a, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a ∈ s -- a0 ↔ a ≠ a0 ∧ a ∈ s; (s)
| # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 = a ∨ a0 ∈ s1), s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1) ↔ a0 = a ∨ a0 ∈ s1
Used terms: a0, 0, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1) ↔ a0 = a ∨ a0 ∈ s1 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1 |
a0 = a, # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1
# s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1
Used formulas: a0 = a
| a0 = a, # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ a ' ≠ [] ∧ a '.head ∈ s ∧ pathp(g)(⌜a '⌝ ) ∧ a = a '.last ∧ # a ' = 1
Used terms: a '
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ a ' ≠ [] ∧ a '.head ∈ s ∧ pathp(g)(⌜a '⌝ ) ∧ a = a '.last ∧ # a ' = 1 |
# s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ¬ pathp(g)(⌜a '⌝ ), (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '.last = a; (s) ⊦ a '.head = a; (s) ⊦ a ' ≠ []; (s)
| # s ≠ 0, s ≠ ∅, dom(g)(a), a ∈ s, ¬ pathp(g)(⌜a '⌝ ), (∃ x. x ≠ [] ∧ x.head ≠ x.last ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 1) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ a '[0] = a; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ ↔ n∞2 < ⌜n - m⌝ ); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < 0; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf Used terms: g, ⌜a '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 = a ∨ a0 ∈ s1 |
# s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1
| # s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, (∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1 |
# s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1
# s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1
| # s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1, ∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1 |
x = x.head ', # s ≠ 0, x.head ≠ a, s ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, ¬ x.head ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ x.head = x0.last ∧ # x0 = 1
Used simplifier rules: ⊦ x = x.head ' → x.last = x.head; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as)
| x = x.head ', # s ≠ 0, x.head ≠ a, s ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, ¬ x.head ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ x.head = x0.last ∧ # x0 = 1 |
x = a0 ', x = a0 + x1, # s ≠ 0, a0 ≠ a, s ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x1
| x = a0 ', x = a0 + x1, # s ≠ 0, a0 ≠ a, s ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1 |
# s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s) ⊦ ⌜[]⌝ = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| # s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ≠ a ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1 |
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ a '.head = a; (s) ⊦ a '.last = a; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) Used terms: a0 ' + []
| # s ≠ 0, a0 ≠ a, s ≠ ∅, dom(g)(a), a ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ≠ a ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 1) ↔ a0 ∈ s1 |
x = x.head ', # s ≠ 0, # s1 ≠ 0, x.head ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), x.head ∈ s1, x.head ∈ s, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ x.head = x0.last ∧ # x0 = 1
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic ⊦ x = x.head ' → x.last = x.head; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as)
| x = x.head ', # s ≠ 0, # s1 ≠ 0, x.head ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), x.head ∈ s1, x.head ∈ s, a ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ x.head = x0.last ∧ # x0 = 1 |
x = a0 ', x = a0 + x1, # s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x1
| x = a0 ', x = a0 + x1, # s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], dom(g)(a), pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1 |
# s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, dom(g)(a), pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s) ⊦ ⌜[]⌝ = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| # s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, dom(g)(a), pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ x0. x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ a0 = x0.last ∧ # x0 = 1 |
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ a '.head = a; (s) ⊦ a '.last = a; (s) ⊦ # a ' = 0 +1; (s) Used terms: a0 '
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0 |
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s1
Used terms: s1
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s1 |
# s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 ∈ s1), s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
| # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 ∈ s1), s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a0. reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 ∈ s1), s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0
| reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, ¬(reach(g)(s, 0)(a0) ↔ a0 ∈ s1), s ≠ ∅, a ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, s ≠ ∅, reach(g)(s, 0)(a0), a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, s ≠ ∅, a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
| reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, s ≠ ∅, reach(g)(s, 0)(a0), a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, s ≠ ∅, reach(g)(s, 0)(a0), a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
| # s ≠ 0, s ≠ ∅, reach(g)(s, 0)(a0), a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0, 0, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, s ≠ ∅, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
x = x.head ', # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(x.head), ¬ x.head ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: ⊦ x = x.head ' → x.last = x.head; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| x = x.head ', # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(x.head), ¬ x.head ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
x = a0 ', x = a0 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| x = a0 ', x = a0 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s) ⊦ ⌜[]⌝ = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s -- a, 0)(a0), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0, 0, s -- a, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ x.head = a ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a0 ≠ x.last ∨ # x ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ a ∈ s -- a0 ↔ a ≠ a0 ∧ a ∈ s; (s)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ x.head = a ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a0 ≠ x.last ∨ # x ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a0 ' = [] ∨ a0 '.head = a ∨ ¬ a0 '.head ∈ s ∨ ¬ pathp(g)(⌜a0 '⌝ ) ∨ a0 ≠ a0 '.last ∨ # a0 ' ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0 '
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, ¬ dom(g)(a), ¬ a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a0 ' = [] ∨ a0 '.head = a ∨ ¬ a0 '.head ∈ s ∨ ¬ pathp(g)(⌜a0 '⌝ ) ∨ a0 ≠ a0 '.last ∨ # a0 ' ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a '⌝ ), a ∈ s, ¬ dom(g)(a), ¬ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '.last = a; (s) ⊦ a '.head = a; (s) ⊦ a ' ≠ []; (s)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a '⌝ ), a ∈ s, ¬ dom(g)(a), ¬ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
Used simplifier rules: ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ ↔ n∞2 < ⌜n - m⌝ ); (s) ⊦ ¬ n < 0; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < 1 ↔ m = 0; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ a '[0] = a; (s) Used terms: g, ⌜a '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| reach(g)(s -- a, 0)(a0) ↔ a0 ∈ s1, # s ≠ 0, s ≠ ∅, a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s ≠ 0, # s1 ≠ 0, s ≠ ∅, s1 ≠ ∅, reach(g)(s -- a, 0)(a0), a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
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, s ≠ ∅, s1 ≠ ∅, reach(g)(s -- a, 0)(a0), a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, # s1 ≠ 0, s ≠ ∅, s1 ≠ ∅, a0 ∈ s1, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0, 0, s -- a, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, # s1 ≠ 0, s ≠ ∅, s1 ≠ ∅, a0 ∈ s1, a ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s -- a ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
x = x.head ', # s ≠ 0, # s1 ≠ 0, x.head ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, x.head ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(x.head), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: ⊦ x = x.head ' → x.last = x.head; (s) ⊦ a ∈ s -- a0 ↔ a ≠ a0 ∧ a ∈ s; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| x = x.head ', # s ≠ 0, # s1 ≠ 0, x.head ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, a ∈ s, x.head ∈ s1, ¬ dom(g)(a), ¬ reach(g)(s, 0)(x.head), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
x = a0 ', x = a0 + x0, # s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| x = a0 ', x = a0 + x0, # s ≠ 0, # s1 ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s) ⊦ ⌜[]⌝ = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| # s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ¬ reach(g)(s, 0)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used terms: a0, 0, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, a ∈ s, a0 ∈ s1, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = 0 + 1), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
# s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a0 ≠ x.last ∨ # x ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # s1 ≠ 0, # s ≠ 0, a0 ≠ a, s ≠ ∅, s1 ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s1, a ∈ s, a0 ∈ s, ¬ dom(g)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a0 ≠ x.last ∨ # x ≠ 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ |
Used simplifier rules: ⊦ a ' ≠ []; (s) ⊦ a '.head = a; (s) ⊦ a '.last = a; (s) ⊦ # a ' = 0 +1; (s) Used terms: a0 '
| finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, 0)(a) ↔ a ∈ s0, ∃ a. a ∈ s |
finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a. reach(g)(s, 0)(a) ↔ a ∈ ∅, ∃ a. a ∈ s
Used terms: ∅
| finout(g), ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∀ a. reach(g)(s, 0)(a) ↔ a ∈ ∅, ∃ a. a ∈ s |
reach(g)(s, 0)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); ⊦ ¬ a ∈ ∅; (s)
| reach(g)(s, 0)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s
Used terms: a, 0, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = 0 + 1, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s |
x = x.head ', # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ 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: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = 1 ↔ x = x.head + []; (as) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| x = x.head ', # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s |
x = a0 ', x = a0 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| x = a0 ', x = a0 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ + [] = σ; (s) ⊦ ⌜[]⌝ = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a0 '⌝ ), a0 ∈ s, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s0, g. # s0 < # s → finout(g) → (∃ s1. ∀ a. reach(g)(s0, 0)(a) ↔ a ∈ s1) ⊦ ∃ a. a ∈ s |
Used terms: a0
| finout(g), ∀ g, s. finout(g) → (∃ s0. ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s0) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 +1)(a) ↔ a ∈ s0 |
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ g0, s0. (∀ a. ∃ s. ∀ b. edge(g0)(a, b) ↔ b ∈ s) → (∃ s1. ∀ a. reach(g0)(s0, n0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); ⊦ m +1 = m + 1; (s)
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ g0, s0. (∀ a. ∃ s. ∀ b. edge(g0)(a, b) ↔ b ∈ s) → (∃ s1. ∀ a. reach(g0)(s0, n0)(a) ↔ a ∈ s1) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
(∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) → (∃ s1. ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
Used terms: g, s
| (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) → (∃ s1. ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
finout(g) ⊦ ∀ s. ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s ∧ edge(g)(a, b))
∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s. ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s ∧ edge(g)(a, b)) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
Used simplifier rules: finout-def: ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s); Used terms: g
| finout(g) ⊦ ∀ s. ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s ∧ edge(g)(a, b)) |
| ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ s. ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s ∧ edge(g)(a, b)) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
Used terms: s1
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∃ s0. ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)) ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
| ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ s0. ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)) ⊦ ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0
Used terms: s0
| ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)) ⊦ ∀ a. reach(g)(s, n0 + 1)(a) ↔ a ∈ s0 |
¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
| ¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), ∀ b. b ∈ s0 ↔ (∃ a. a ∈ s1 ∧ edge(g)(a, b)), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), a ∈ s0 ↔ (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦
Used terms: a
| ¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), a ∈ s0 ↔ (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ |
¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), ¬ a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a)
¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a) ⊦
| ¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), ¬ a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a) |
reach(g)(s, n0 + 1)(a), ¬ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a)
| reach(g)(s, n0 + 1)(a), ¬ a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a) |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
¬ a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = (n0 + 1) + 1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a)
Used terms: a, n0 + 1, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| ¬ a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = (n0 + 1) + 1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a) |
# x = 2 + n0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ¬ x.last ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, x.last)
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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # x = 2 + n0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), x.head ∈ s, ¬ x.last ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, x.last) |
# x = 2 + n0, x = a1 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a1 ∈ s, ¬ x.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, x.last)
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a1, x0
| # x = 2 + n0, x = a1 + x0, # s ≠ 0, s ≠ ∅, x ≠ [], pathp(g)(⌜x⌝ ), a1 ∈ s, ¬ x.last ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, x.last) |
# x0 = n0 + 1, # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ (a1 ' + x0).last ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, (a1 ' + x0).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) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # x0 = n0 + 1, # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ (a1 ' + x0).last ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, (a1 ' + x0).last) |
# x0 = n0 + 1, a1 ' + x0 = x1 + a2 ', # s ≠ 0, a1 ' + x0 ≠ [], s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)
Used simplifier rules: ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: a1 ' + x0, a2, x1
| # x0 = n0 + 1, a1 ' + x0 = x1 + a2 ', # s ≠ 0, a1 ' + x0 ≠ [], s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2) |
# x0 = n0 + 1, a1 ' + x0 = x1 + a2 ', # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, a1 ∈ x1 ∨ a1 = a2, a2 = a1 ∨ a2 ∈ x0 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # x0 = n0 + 1, a1 ' + x0 = x1 + a2 ', # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, a1 ∈ x1 ∨ a1 = a2, a2 = a1 ∨ a2 ∈ x0 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2) |
# x0 = n0 + 1, a1 ' + x0 = (a + x) + a2 ', # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), a2 = a1 ∨ a2 ∈ x0, a1 ∈ a + x ∨ a1 = a2 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)
Used simplifier rules: List('a) freely generated by [], +;; ⊦ [] + x = x; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ a ∈ []; (s) ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # x0 = n0 + 1, a1 ' + x0 = (a + x) + a2 ', # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), a2 = a1 ∨ a2 ∈ x0, a1 ∈ a + x ∨ a1 = a2 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ 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 + n = m + n0 ↔ n = n0; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(x + y) = # x + # y; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; (ws)
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1 ⊦ ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2) |
# s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2)
Used terms: (a1 ' + x).last
| # s ≠ 0, s ≠ ∅, pathp(g)(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ), a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2) |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, s ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ n. ⌜n⌝ < #(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n], (⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n + 1]) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2)
Used terms: ⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, s ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ n. ⌜n⌝ < #(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n], (⌜a1 '⌝ + ⌜x⌝ + ⌜a2 '⌝ )[n + 1]) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2) |
# s ≠ 0, s ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2)
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) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜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 ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2) |
# s ≠ 0, s ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ¬ # x < # x → edge(g)((a1 ' + x + a2 ')[# x], (x + a2 ')[# x]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1 ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2)
Used terms: # x
| # s ≠ 0, s ≠ ∅, a1 ∈ s, ¬ a2 ∈ s0, ¬ # x < # x → edge(g)((a1 ' + x + a2 ')[# x], (x + a2 ')[# x]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1 ⊦ (a1 ' + x).last ∈ s1 ∧ edge(g)((a1 ' + x).last, a2) |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (x + a ')[# x] = a; (s) ⊦ (a ' + x + y)[# x] = (a ' + x).last; (s) ⊦ ¬ n < n; (s)
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. reach(g)(s, # x)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
reach(g)(s, # x)((a1 ' + x).last) ↔ (a1 ' + x).last ∈ s1, # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used terms: (a1 ' + x).last
| reach(g)(s, # x)((a1 ' + x).last) ↔ (a1 ' + x).last ∈ s1, # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ reach(g)(s, # x)((a1 ' + x).last), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ reach(g)(s, # x)((a1 ' + x).last), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0. ¬(x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ (a1 ' + x).last = x0.last ∧ # x0 = # x + 1) ⊦
Used terms: g, s, # x, (a1 ' + x).last
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0. ¬(x0 ≠ [] ∧ x0.head ∈ s ∧ pathp(g)(⌜x0⌝ ) ∧ (a1 ' + x).last = x0.last ∧ # x0 = # x + 1) ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0. x0 = [] ∨ ¬ x0.head ∈ s ∨ ¬ pathp(g)(⌜x0⌝ ) ∨ (a1 ' + x).last ≠ x0.last ∨ # x0 ≠ # x + 1 ⊦
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0. x0 = [] ∨ ¬ x0.head ∈ s ∨ ¬ pathp(g)(⌜x0⌝ ) ∨ (a1 ' + x).last ≠ x0.last ∨ # x0 ≠ # x + 1 ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a1 ' + x = [] ∨ ¬ (a1 ' + x).head ∈ s ∨ ¬ pathp(g)(⌜a1 ' + x⌝ ) ∨ (a1 ' + x).last ≠ (a1 ' + x).last ∨ #(a1 ' + x) ≠ # x + 1 ⊦
Used terms: a1 ' + x
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a1 ' + x = [] ∨ ¬ (a1 ' + x).head ∈ s ∨ ¬ pathp(g)(⌜a1 ' + x⌝ ) ∨ (a1 ' + x).last ≠ (a1 ' + x).last ∨ #(a1 ' + x) ≠ # x + 1 ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x⌝ ), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[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 + 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) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ pathp(g)(⌜a1 '⌝ + ⌜x⌝ ), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n. ¬(⌜n⌝ < #(⌜a1 '⌝ + ⌜x⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x⌝ )[n], (⌜a1 '⌝ + ⌜x⌝ )[n + 1]))) ⊦
Used terms: ⌜a1 '⌝ + ⌜x⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n. ¬(⌜n⌝ < #(⌜a1 '⌝ + ⌜x⌝ ) → dom(g)((⌜a1 '⌝ + ⌜x⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a1 '⌝ + ⌜x⌝ ) → edge(g)((⌜a1 '⌝ + ⌜x⌝ )[n], (⌜a1 '⌝ + ⌜x⌝ )[n + 1]))) ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ¬(¬ # x < n → dom(g)((a1 ' + x)[n])) ∨ ¬(n0 < # x → edge(g)((a1 ' + x)[n0], x[n0])) ⊦
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)
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ¬(¬ # x < n → dom(g)((a1 ' + x)[n])) ∨ ¬(n0 < # x → edge(g)((a1 ' + x)[n0], x[n0])) ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ # x < n, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
# s ≠ 0, s ≠ ∅, n0 < # x, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ # x < n, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
# s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used terms: n
| # s ≠ 0, s ≠ ∅, edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((a1 ' + x + a2 ')[n]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m + m0 ≤ m ↔ m0 = 0; (s) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((a1 ' + x + a2 ')[n]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
# s ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((a1 ' + x + a2 ')[n]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ n < # a1 ', ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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) ⊦ 0 ≤ m; (s) ⊦ 0 < m ↔ m ≠ 0; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: a1 ', x + a2 ', n
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((a1 ' + x + a2 ')[n]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ n < # a1 ', ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, n ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((x + a2 ')[n - 1]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]) ⊦
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, n ≠ 0, s ≠ ∅, n < 2 + # x, dom(g)((x + a2 ')[n - 1]), edge(g)((a1 ' + x).last, a2), a1 ∈ s, n ≤ # x, ¬ dom(g)((a1 ' + x)[n]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]) ⊦ |
Used simplifier rules: ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ n < # x → (x + a ')[n] = x[n]; (s) n < n0 ⊦ m + (* n) < m0 + (* n0) ↔ m < m0 + (n0 - n); (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n → ¬ 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 n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, m
| # s ≠ 0, s ≠ ∅, n0 < # x, edge(g)((a1 ' + x).last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ (a1 ' + x).last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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
| # s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ n. ¬ # x < n → edge(g)((a1 ' + x + a2 ')[n], (x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ¬ # x < n0 → edge(g)((a1 ' + x + a2 ')[n0], (x + a2 ')[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
Used terms: n0
| # s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ¬ # x < n0 → edge(g)((a1 ' + x + a2 ')[n0], (x + a2 ')[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
# s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), edge(g)((a1 ' + x + a2 ')[n0], x[n0]), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ n < # x → (x + a ')[n] = x[n]; (s) ⊦ m < n → ¬ n < m; (s)
| # s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), edge(g)((a1 ' + x + a2 ')[n0], x[n0]), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
# s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)((a1 ' + x + a2 ')[n0], x[n0]), edge(g)(x.last, a2), a1 ∈ s, ¬ n0 < # a1 ', ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
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) ⊦ 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: a1 ', x + a2 ', n0
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)((a1 ' + x + a2 ')[n0], x[n0]), edge(g)(x.last, a2), a1 ∈ s, ¬ n0 < # a1 ', ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
# s ≠ 0, n0 ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), edge(g)((x + a2 ')[n0 - 1], x[n0]), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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, n0 ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)(x.last, a2), edge(g)((x + a2 ')[n0 - 1], x[n0]), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
n0 = m + 1, # s ≠ 0, n0 ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)((x + a2 ')[m], x[n0]), edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m
| n0 = m + 1, # s ≠ 0, n0 ≠ 0, s ≠ ∅, x ≠ [], n0 < # x, edge(g)((x + a2 ')[m], x[n0]), edge(g)(x.last, a2), a1 ∈ s, ¬ edge(g)((a1 ' + x)[n0], x[n0]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]) ⊦ |
# s ≠ 0, s ≠ ∅, x ≠ [], m + 1 < # x, edge(g)(x.last, a2), edge(g)((x + a2 ')[m], x[m + 1]), a1 ∈ s, ¬ edge(g)(x[m], x[m + 1]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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 + 1 ≠ 0; (s)
| # s ≠ 0, s ≠ ∅, x ≠ [], m + 1 < # x, edge(g)(x.last, a2), edge(g)((x + a2 ')[m], x[m + 1]), a1 ∈ s, ¬ edge(g)(x[m], x[m + 1]), ¬ a2 ∈ s0, ¬ x.last ∈ s1, ∀ n. n < 2 + # x → dom(g)((a1 ' + x + a2 ')[n]), ∀ x0, n0, a1, a2, s, g, s0, s1. # x0 = n0 + 1 ∧ a1 ' + x0 = x + a2 ' ∧ # s ≠ 0 ∧ s ≠ ∅ ∧ pathp(g)(⌜a1 '⌝ + ⌜x0⌝ ) ∧ a1 ∈ s ∧ ¬ a2 ∈ s0 ∧ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) ∧ (∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1) ∧ (a1 ∈ x ∨ a1 = a2) ∧ (a2 = a1 ∨ a2 ∈ x0) → (∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a2)), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ 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: x, a2 ', m
| ⊦ n < # x → (x + y)[n] = x[n] |
| ¬(reach(g)(s, n0 + 1)(a) ↔ a ∈ s0), a ∈ s0, ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ a0. a0 ∈ s1 ∧ edge(g)(a0, a) ⊦ |
# s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a ∈ s0, a0 ∈ s1, ¬ reach(g)(s, n0 + 1)(a), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ 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
| # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a ∈ s0, a0 ∈ s1, ¬ reach(g)(s, n0 + 1)(a), ∀ a. reach(g)(s, n0)(a) ↔ a ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
reach(g)(s, n0)(a0) ↔ a0 ∈ s1, # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a0 ∈ s1, a ∈ s0, ¬ reach(g)(s, n0 + 1)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used terms: a0
| reach(g)(s, n0)(a0) ↔ a0 ∈ s1, # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a0 ∈ s1, a ∈ s0, ¬ reach(g)(s, n0 + 1)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a ∈ s0, a0 ∈ s1, ¬ reach(g)(s, n0 + 1)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
| # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a ∈ s0, a0 ∈ s1, ¬ reach(g)(s, n0 + 1)(a), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a0 ∈ s1, a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = (n0 + 1) + 1) ⊦
Used terms: a, n0 + 1, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a0 ∈ s1, a ∈ s0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. ¬(x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a = x.last ∧ # x = (n0 + 1) + 1) ⊦ |
# s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a ∈ s0, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0 ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), reach(g)(s, n0)(a0), a ∈ s0, a0 ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0 ⊦ |
⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1)
# s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a0 ∈ s1, a ∈ s0, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = n0 + 1 ⊦
Used terms: a0, n0, s, g
| ⊦ reach(g)(s, n)(b) ↔ (∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ b = x.last ∧ # x = n + 1) |
| # s0 ≠ 0, # s1 ≠ 0, s0 ≠ ∅, s1 ≠ ∅, edge(g)(a0, a), a0 ∈ s1, a ∈ s0, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∃ x. x ≠ [] ∧ x.head ∈ s ∧ pathp(g)(⌜x⌝ ) ∧ a0 = x.last ∧ # x = n0 + 1 ⊦ |
# x = n0 + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x ≠ [], edge(g)(x.last, a), pathp(g)(⌜x⌝ ), x.last ∈ s1, a ∈ s0, x.head ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ 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
| # x = n0 + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x ≠ [], edge(g)(x.last, a), pathp(g)(⌜x⌝ ), x.last ∈ s1, a ∈ s0, x.head ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# x = n0 + 1, x = a0 + x0, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x ≠ [], edge(g)(x.last, a), pathp(g)(⌜x⌝ ), a0 ∈ s, a ∈ s0, x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0 ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x, a0, x0
| # x = n0 + 1, x = a0 + x0, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x ≠ [], edge(g)(x.last, a), pathp(g)(⌜x⌝ ), a0 ∈ s, a ∈ s0, x.last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + n0 ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0 ⊦
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)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), pathp(g)(⌜a0 '⌝ + ⌜x0⌝ ), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0 ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ⌜n⌝ < #(⌜a0 '⌝ + ⌜x0⌝ ) → dom(g)((⌜a0 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a0 '⌝ + ⌜x0⌝ ) → edge(g)((⌜a0 '⌝ + ⌜x0⌝ )[n], (⌜a0 '⌝ + ⌜x0⌝ )[n + 1]) ⊦
Used terms: ⌜a0 '⌝ + ⌜x0⌝ , g
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ⌜n⌝ < #(⌜a0 '⌝ + ⌜x0⌝ ) → dom(g)((⌜a0 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜a0 '⌝ + ⌜x0⌝ ) → edge(g)((⌜a0 '⌝ + ⌜x0⌝ )[n], (⌜a0 '⌝ + ⌜x0⌝ )[n + 1]) ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
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, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ x. x = [] ∨ ¬ x.head ∈ s ∨ ¬ pathp(g)(⌜x⌝ ) ∨ a ≠ x.last ∨ # x ≠ 2 + # x0, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a0 ' + (x0 + a) = [] ∨ ¬ (a0 ' + (x0 + a)).head ∈ s ∨ ¬ pathp(g)(⌜a0 ' + (x0 + a)⌝ ) ∨ a ≠ (a0 ' + (x0 + a)).last ∨ #(a0 ' + (x0 + a)) ≠ 2 + # x0 ⊦
Used terms: a0 ' + (x0 + a)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, a0 ' + (x0 + a) = [] ∨ ¬ (a0 ' + (x0 + a)).head ∈ s ∨ ¬ pathp(g)(⌜a0 ' + (x0 + a)⌝ ) ∨ a ≠ (a0 ' + (x0 + a)).last ∨ #(a0 ' + (x0 + a)) ≠ 2 + # x0 ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ pathp(g)(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[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 + n = m + n0 ↔ n = n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(x + y) = # x + # y; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ x + a = x + a '; (s) ⊦ (a ' + x + b ').last = b; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ pathp(g)(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n. ¬(⌜n⌝ < #(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ) → dom(g)((⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ) → edge(g)((⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n], (⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n + 1]))) ⊦
Used terms: g, ⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, (∃ n. ¬(⌜n⌝ < #(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ) → dom(g)((⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n]))) ∨ (∃ n. ¬(⌜n + 1⌝ < #(⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ ) → edge(g)((⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n], (⌜a0 '⌝ + ⌜x0⌝ + ⌜a '⌝ )[n + 1]))) ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ¬(n < 2 + # x0 → dom(g)((a0 ' + x0 + a ')[n])) ∨ ¬(¬ # x0 < n0 → edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0])) ⊦
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⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ (⌜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 ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (s)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ¬(n < 2 + # x0 → dom(g)((a0 ' + x0 + a ')[n])) ∨ ¬(¬ # x0 < n0 → edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0])) ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)((a0 ' + x0 + a ')[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ # x0 < n0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)((a0 ' + x0 + a ')[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < # a0 ', n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)((a0 ' + x0 + a ')[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ n < # a0 ', ¬ dom(g)((x0 + a ')[n - # a0 ']), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used terms: n, x0 + a ', a0 '
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < # a0 ', n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)((a0 ' + x0 + a ')[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ 0 < m ↔ m ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)(a0), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
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, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ n < # a0 ', ¬ dom(g)((x0 + a ')[n - # a0 ']), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)((x0 + a ')[n - 1]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, ¬ dom(g)((x0 + a ')[n - 1]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
n = m + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)((x0 + a ')[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, m
| n = m + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n < 2 + # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)((x0 + a ')[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, m ≤ # x0, ¬ dom(g)((x0 + a ')[m]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
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 + 1 ↔ ¬ n < m; (s) n < n0 ⊦ m + (* n) < m0 + (* n0) ↔ m < m0 + (n0 - n); (s) ⊦ m + 1 ≠ 0; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, m ≤ # x0, ¬ dom(g)((x0 + a ')[m]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, m ≤ # x0, ¬ m < # x0, ¬ dom(g)((x0 + a ')[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, m < # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, m ≤ # x0, ¬ dom(g)(x0[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used terms: m, a ', x0
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, m ≤ # x0, ¬ m < # x0, ¬ dom(g)((x0 + a ')[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)(a), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: ⊦ m ≤ m; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ n = # x → (x + a ')[n] = a; (s) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ dom(g)(a), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
Used simplifier rules: Graph('a) generated by ×;; ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ dom(vs × es) = vs; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, m < # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, m ≤ # x0, ¬ dom(g)(x0[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], m < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ dom(g)(x0[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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 → m ≤ n; (s)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], m < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ dom(g)(x0[m]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
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, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, ¬ # x0 < n0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, n0 ≤ # x0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a0 ' + x0).last, a), a0 ∈ s, a ∈ s0, (a0 ' + x0).last ∈ s1, n0 ≤ # x0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n0 < # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, n0 ≤ # x0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m ≤ m; (s) ⊦ (a ' + x + y)[# x] = (a ' + x).last; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m - m = 0; (s) ⊦ a '[0] = a; (s) Used terms: n0, a ', x0
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, n0 < # x0, edge(g)((a0 ' + x0).last, a), (a0 ' + x0).last ∈ s1, a ∈ s0, a0 ∈ s, n0 ≤ # x0, ¬ edge(g)((a0 ' + x0 + a ')[n0], (x0 + a ')[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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 ⊦ n < # x → (x + a ')[n] = x[n]; (s) ⊦ m < n → m ≤ n; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ n0 < # a0 ', ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, n0 < # a0 ', edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0 '[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used terms: n0, x0 + a ', a0 '
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ n0 < # a0 ', ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), n0 < # x0 → edge(g)((a0 ' + x0)[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used terms: n0
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), n0 < # x0 → edge(g)((a0 ' + x0)[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), edge(g)((a0 ' + x0)[n0], x0[n0]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), edge(g)((a0 ' + x0)[n0], x0[n0]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)((a0 ' + x0)[n0], x0[n0]), edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ n0 < # a0 ', ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: a0 ', x0 + a ', n0
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)((a0 ' + x0)[n0], x0[n0]), edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ n0 < # a0 ', ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), edge(g)(x0[n0 - 1], x0[n0]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0.last, a), edge(g)(x0[n0 - 1], x0[n0]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
n0 = m + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0[m], x0[n0]), edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m
| n0 = m + 1, # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, n0 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, edge(g)(x0[m], x0[n0]), edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)((a0 ' + x0 + a ')[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], m + 1 < # x0, edge(g)(x0.last, a), edge(g)(x0[m], x0[m + 1]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((x0 + a ')[m], x0[m + 1]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
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 + 1 ≠ 0; (s)
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], m + 1 < # x0, edge(g)(x0.last, a), edge(g)(x0[m], x0[m + 1]), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)((x0 + a ')[m], x0[m + 1]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
Used simplifier rules: ⊦ ¬ 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: x0, a ', m
| ⊦ n < # x → (x + y)[n] = x[n] |
| # s1 ≠ 0, # s0 ≠ 0, # s ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], n0 < # x0, n0 < # a0 ', edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0 '[n0], x0[n0]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0, x0.head), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ a '[0] = a; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (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, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], edge(g)(x0.last, a), x0.last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0, x0.head), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]) ⊦ |
x0 = a1 + x1, # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)(a0, a1), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: x0, a1, x1
| x0 = a1 + x1, # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, x0 ≠ [], edge(g)(x0.last, a), a ∈ s0, a0 ∈ s, x0.last ∈ s1, ¬ edge(g)(a0, a1), ∀ n. ¬ # x0 < n → dom(g)((a0 ' + x0)[n]), ∀ n. n < # x0 → edge(g)((a0 ' + x0)[n], x0[n]), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s ⊦ |
# s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a1 ' + x1).last, a), (a1 ' + x1).last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0, a1), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x1 < n → edge(g)((a0 ' + a1 ' + x1)[n], (a1 ' + x1)[n]), ∀ n. ¬ # x1 + 1 < n → dom(g)((a0 ' + a1 ' + x1)[n]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) 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 ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # s ≠ 0, # s0 ≠ 0, # s1 ≠ 0, s ≠ ∅, s0 ≠ ∅, s1 ≠ ∅, edge(g)((a1 ' + x1).last, a), (a1 ' + x1).last ∈ s1, a0 ∈ s, a ∈ s0, ¬ edge(g)(a0, a1), ∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s, ∀ n. ¬ # x1 < n → edge(g)((a0 ' + a1 ' + x1)[n], (a1 ' + x1)[n]), ∀ n. ¬ # x1 + 1 < n → dom(g)((a0 ' + a1 ' + x1)[n]) ⊦ |
Used simplifier rules: ⊦ ¬ n < 0; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: 0
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.