| h = h0, xs_len = xs_len0, xs_len0 = # xs, xs_len1 = # xs, ((del-list(to_delete, n) * ls(rys, ys) * ls(rxs, xs)))(H), ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), # xs + 1 < h0, # xs < h0, n + # xs ≤ h0, n ≤ # xs + # ys, 2 ≤ n → ((del-list(to_delete0, n - 2) * ls(rys, ys) * ls(rxs, xs)))(H1), n < 2 → to_delete0 = [] ∧ ((ls(rys, ys) * ls(rxs, xs)))(H1), ys = [] ∨ # ys = h0 ⊦ # xs + 1 = h0, r = null, r ∈ H1, ∃ n. ((ls(r, a + xs) * ls(rys, ys) * del-list(to_delete0, n)))((H1 ++ r)[r, a × rxs]) ∧ n ≤ #(a + xs) + # ys ∧ n + #(a + xs) ≤ h0 ∧ 1 + xs_len1 = 1 + xs_len |
((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), ((del-list(to_delete, n) * ls(rys, ys) * ls(rxs, xs)))(H), # xs < h0, # xs + 1 < h0, n ≤ # xs + # ys, n + # xs ≤ h0, n < 2 → to_delete0 = [] ∧ ((ls(rys, ys) * ls(rxs, xs)))(H1), 2 ≤ n → ((del-list(to_delete0, n - 2) * ls(rys, ys) * ls(rxs, xs)))(H1), ys = [] ∨ # ys = h0 ⊦ # xs + 1 = h0, r = null, r ∈ H1, ∃ n0. ((ls(r, a ' + xs) * ls(rys, ys) * del-list(to_delete0, n0)))((H1 ++ r)[r, a × rxs]) ∧ n0 ≤ (# xs + 1) + # ys ∧ n0 + # xs < h0
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m + 1 ≤ n ↔ m < n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ m +1 = m + 1; (s)% ⊦ #(a ' + x) = (# x)+1; (s)% ⊦ a + x = a ' + x; (s)