| H[r] = a × r0, ((_∃(λ x. ls(r, x) * del-list(rx0, n - # x) ∧ ⌜r ≠ null ∧ n ≥ # x⌝ ) * P))(H) ⊦ r0 = null, (1 ≤ n → ((del-list(r0 ' + rx0, n - 1) * P))(H -- r)) ∧ n ≠ 0 |
((r => a0 × r0 * ls(r0, y) * del-list(rx0, n - # y + 1) * P))(H), # y < n, 1 ≤ n ⊦ r = null, r0 = null, ((del-list(r0 ' + rx0, n - 1) * P))(H -- r)
Used simplifier rules: not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat% ⊦ m < n → n ≠ 0; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + 1 ≤ n ↔ m < n; (s)% ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s)%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)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ m +1 = m + 1; (s)% ⊦ #(a ' + x) = (# x)+1; (s)%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)% ⊦ ⌜bv⌝ (H) ↔ bv; (s)% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep% ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1); (s)% ⊦ ((_∃ xP * P))(H) ↔ (∃ x. ((xP(x) * P))(H)); (s)% ⊦ n ≥ m ↔ m ≤ n; (s)