| (o[ls(r, x)] * true)[rs, cf, af(r; o)], (o0[r => a × r0] * o[ls(r0, x0)] * true)[rs, cf, af] ⊦ o = o0, x = a ' + x0 |
x = a0 + x1, (o0[r => a × r0] * o[ls(r0, x0)] * true)[rs, cf, af], (o[ls(r, x)] * true)[rs, cf, af(r; o)] ⊦ o = o0, x = a ' + x0
Used simplifier rules: ls-base: ⊦ ls(r, []) = (emp ∧ ⌜r = null⌝ );%list freely generated by [], +;;% ⊦ a ' + x ≠ []; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ o[P0 ∧ P1] = (o[P0] ∧ o[P1]); (s)% ⊦ o[emp] = emp; (s)% ⊦ (o[⌜bv⌝ ] ∧ emp) = (⌜bv⌝ ∧ emp); (s)%and-ass: ⊦ ((R0 ∧ R1) ∧ R2) = (R0 ∧ R1 ∧ R2); from specification heap-sep[heap-aux]%and-com: ⊦ (R0 ∧ R1) = (R1 ∧ R0); from specification heap-sep[heap-aux]%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep% ⊦ (⌜bv⌝ ∧ R0) * R1 = (⌜bv⌝ ∧ R0 * R1); (s)% ⊦ emp * R = R; (s)%sep-ass: ⊦ (R0 * R1) * R2 = R0 * R1 * R2; from specification heap-sep[heap-aux]%sep-com: ⊦ R0 * R1 = R1 * R0; from specification heap-sep[heap-aux]% ⊦ (true ∧ R) = R; (s)% ⊦ ⌜bv⌝ [rs, cf, af] ↔ bv; (s)% ⊦ null => ce = ⌜false⌝ ; (s)% ⊦ ⌜false⌝ = false; (s)% ⊦ o[false] = false; (s)% ⊦ false * R = false; (s)% ⊦ ¬ (false)[rs, cf, af]; (s)