| H[r] = a × r1, ((ls(rxs, x0) * lls(rys, r, x1) * ls(r, y) * del-list(to_delete, n0)))(H), (((lls(rxs, null, x0) * ls(rys, x1 + y)) * del-list(to_delete, n0)))(H), ((ls(rxs, x0) * ls(rys, x1 + y) * del-list(to_delete, n0)))(H), # x0 + # x1 < h0, # x0 < h0, n0 ≤ # x0 + # x1 + # y, n0 + # x0 ≤ h0, x1 + y = [] ∨ # x1 + # y = h0 ⊦ r = null, ∃ y0. y = a ' + y0 ∧ (∃ r0. (((lls(rys, r0, x1) * r0 => a × r1) * ls(rxs, x0) * ls(r1, y0) * del-list(to_delete, n0)))(H)) ∧ n0 ≤ # x0 + # x1 + # y0 + 1 |
((ls(rxs, x0) * ls(rys, x1 + a ' + y0) * del-list(to_delete, n0)))(H), (((lls(rxs, null, x0) * ls(rys, x1 + a ' + y0)) * del-list(to_delete, n0)))(H), ((r => a × r1 * ls(r1, y0) * ls(rxs, x0) * lls(rys, r, x1) * del-list(to_delete, n0)))(H), n0 ≤ # x0 + # x1 + # y0 + 1, n0 + # x0 ≤ # x1 + # y0 + 1, # x0 ≤ # y0 ⊦ r = null, ∃ r0. (((lls(rys, r0, x1) * r0 => a × r1) * ls(rxs, x0) * ls(r1, y0) * del-list(to_delete, n0)))(H)
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ¬ m < n → ¬ m + m0 < n; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ a ' + x = a ' + y ↔ x = y; (s)% ⊦ x + a ' + y ≠ []; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m +1 = m + 1; (s)% ⊦ #(a ' + x) = (# x)+1; (s)% ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list%in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list% ⊦ a × r = a0 × r0 ↔ a = a0 ∧ r = r0; (ws)% ⊦ ((r => ce * P))(H) → (H[r] = ce0 ↔ ce = ce0); (s)%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%r ≠ null ⊦ H[r] = ce → ( ((ls(r, x) * P))(H) ↔ (∃ a, y, r0. ((r => a × r0 * ls(r0, y) * P))(H) ∧ x = a ' + y)); (as)