| H0 = (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r, (H1 ++ r)[r, (H1 ++ r)[r].val:= a][r].nxt:= rxs], h = h0, xs_len = # xs, xs_len0 = # 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 < 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 ⊦ ⟨caterpillar_add#(a, h0; xs, xs_len0, ys)⟩ ∃ n. ((ls(r, xs) * ls(rys, ys) * del-list(to_delete0, n)))(H0) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h0 ∧ 1 + xs_len = xs_len0, xs_len + 1 = h, r = null, r ∈ H1 |
xs_len = # xs, xs_len0 = # xs, # xs + 1 ≠ h0, r ≠ null, ((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, ¬ r ∈ H1, 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 ⊦ ⟨caterpillar_add#(a, h0; xs, xs_len0, ys)⟩ ∃ n. ((ls(r, xs) * ls(rys, ys) * del-list(to_delete0, n)))((H1 ++ r)[r, a × rxs]) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h0 ∧ 1 + xs_len = xs_len0
Used simplifier rules: succ-03: ⊦ m < n ∧ m + 1 ≠ n → m + 1 < n; (forward) from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ H[r, ce][r, ce0] = H[r, ce0]; (s)% ⊦ (ce.val:= a).nxt:= r = a × r; (s)%r0 ≠ null, ¬ r0 ∈ H ⊦ r ∈ H ++ r0 ↔ r = r0 ∨ r ∈ H; (s)% ⊦ H[r0, ce][r] = (r = r0 ∧ r0 ∈ H ⊃ ce;H[r]); (s)