| n0 = n ⊦ ⟨caterpillar_init#(n; ; h0, xs, xs_len0, ys)⟩ ∃ n. ((ls(null, xs) * ls(null, ys) * del-list([], n)))(∅) ∧ n ≤ # xs + # ys ∧ n + # xs ≤ h0 ∧ n0 = h0 ∧ 0 = xs_len0, n = 0 |
n ≠ 0 ⊦ ⟨caterpillar_init#(n; ; h0, xs, xs_len0, ys)⟩ (xs = [] ∧ ys = [] ∧ n = h0 ∧ 0 = xs_len0)
Used simplifier rules: ⊦ 0 ≤ m; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ # [] = 0; (s)% ⊦ emp(H) ↔ H = ∅; (s)% ⊦ ⌜bv⌝ (H) ↔ bv; (s)% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep% ⊦ emp * P = P; (s)% ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1); (s)% ⊦ del-list([], n) = (emp ∧ ⌜n = 0⌝ ); (s)% ⊦ ls(null, x) = (emp ∧ ⌜x = []⌝ ); (s)