| ⊦ path(x, H) ↔ # x = 1 ∧ hd x ∈ H ∧ hd x ≠ null ∨ # x = 2 ∧ hd x ∈ H ∧ hd tl x ∈ H ∧ hd x ≠ null ∧ hd tl x ≠ null ∧ H[hd x].nxt = hd tl x ∨ 2 ≤ # x ∧ hd x ∈ H ∧ hd x ≠ null ∧ H[hd x].nxt = hd tl x ∧ path(tl x, H) |
x = r + x1 ∧ x ≠ [] ⊦ path(x, H) ↔ # x = 1 ∧ r ∈ H ∧ r ≠ null ∨ # x = 2 ∧ r ∈ H ∧ hd x1 ∈ H ∧ r ≠ null ∧ hd x1 ≠ null ∧ H[r].nxt = hd x1 ∨ 2 ≤ # x ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = hd x1 ∧ path(x1, H)
Used simplifier rules: path-empty: ⊦ ¬ path([], H);%size-01: ⊦ # [] = 0; from specification list-data[reflist]%x0 ≠ [] ⊦ r = hd x0 ∧ x1 = tl x0 ↔ x0 = r + x1; (elim) Used terms: x, r, x0