| ⊦ path(r ' + x1, H) ↔ 1 + # x1 = 1 ∧ r ∈ H ∧ r ≠ null ∨ 1 = # x1 ∧ r ∈ H ∧ hd x1 ∈ H ∧ r ≠ null ∧ hd x1 ≠ null ∧ H[r].nxt = hd x1 ∨ 2 ≤ 1 + # x1 ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = hd x1 ∧ path(x1, H) |
x1 = r0 + x ⊦ path(r ' + x1, H) ↔ 1 + # x1 = 1 ∧ r ∈ H ∧ r ≠ null ∨ 1 = # x1 ∧ r ∈ H ∧ r0 ∈ H ∧ r ≠ null ∧ r0 ≠ null ∧ H[r].nxt = r0 ∨ 2 ≤ 1 + # x1 ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = r0 ∧ path(x1, H), x1 = []
Used simplifier rules: path-one: ⊦ path(r ', H) ↔ r ∈ H ∧ r ≠ null;% ⊦ x0 + [] = x0; (s)%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]% ⊦ # [] = 0; (s)%x0 ≠ [] ⊦ r = hd x0 ∧ x1 = tl x0 ↔ x0 = r + x1; (elim) Used terms: x1, r0, x