| ⊦ path(x, H) ↔ # x = 1 ∧ hd x ∈ H ∧ hd x ≠ null ∨ # x = 1 + 1 ∧ hd x ∈ H ∧ hd tl x ∈ H ∧ hd x ≠ null ∧ hd tl x ≠ null ∧ H[hd x].nxt = hd tl x ∨ # x ≥ 1 + 1 ∧ hd x ∈ H ∧ hd x ≠ null ∧ H[hd x].nxt = hd tl x ∧ path(tl x, H) |
⊦ 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)
Used simplifier rules: ge: ⊦ n ≥ m ↔ m ≤ n; from specification nat%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2