| # xs = xs_len0, # xs < h0, ∃ n. ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h ∧ h = h0 ∧ xs_len = xs_len0, # ys = 0 ∨ # ys = h0 ⊦ ⟪tree_buffer_heap_get#(H, rxs, rys, h; ; x)⟫ ⟨caterpillar_get#(h0, xs, ys; ; x0)⟩ ( (∃ n. ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h ∧ h = h0 ∧ xs_len = xs_len0) ∧ x = x0) |
((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n)))(H), # xs < h0, n + # xs ≤ h0, n ≤ # xs + # ys, ys = [] ∨ # ys = h0 ⊦ ⟪tree_buffer_heap_get#(H, rxs, rys, h0; ; x)⟫ ⟨caterpillar_get#(h0, xs, ys; ; x0)⟩ ((∃ n0. ((ls(rxs, xs) * ls(rys, ys) * del-list(to_delete, n0)))(H) ∧ n0 ≤ # xs + # ys ∧ n0 + # xs ≤ h0) ∧ x = x0)
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ # x = 0 ↔ x = []; (s)