| 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 |
(o0[r => a × r0] * o[ls(r0, x0)] * true)[rs, cf, af], ((o[r => a0 × r1] * o[ls(r1, x1)]) * true)[rs, cf, af(r; o)] ⊦ a0 ' + x1 = a ' + x0, o = o0
Used simplifier rules: ls-rec: ⊦ ls(r, a ' + x) = _∃(λ r0. r => a × r0 * ls(r0, x));%sep-com: ⊦ R0 * R1 = R1 * R0; from specification heap-sep[heap-aux]%sep-ass: ⊦ (R0 * R1) * R2 = R0 * R1 * R2; from specification heap-sep[heap-aux]% ⊦ (_∃ rR * R)[rs, cf, af] ↔ (∃ r. (rR(r) * R)[rs, cf, af]); (s)%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep% ⊦ o[P0 * P1] = o[P0] * o[P1]; (s)% ⊦ o[_∃ rP] = _∃(λ r. o[rP(r)]); (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ a + x = a ' + x; (s)