| (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 |
⊦ (o0[r => ce] * R)[rs, cf, af] ↔ (o1[r => ce] * R)[rs, cf, af(r; o1)] ∧ af(r) = o0
Used simplifier rules: ls-unique-strng: ⊦ (o[ls(r, x)] * R)[rs, cf, af] ∧ (o[ls(r, x0)] * R0)[rs, cf, af] → (x = x0 ↔ true);%map2: ⊦ (o1[r => ce] * R)[rs, cf, af] ∧ (o1[r => ce0] * R0)[rs, cf, af] → ce = ce0; (forward) from specification embed-aux[cell-heap-aux]% ⊦ a × r = a0 × r0 ↔ a = a0 ∧ r = r0; (ws)% ⊦ a ' + x = b ' + y ↔ a = b ∧ x = y; (ws)%a: ⊦ (x + y) + z = x + y + z; from specification list%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] Used terms: o, af, cf, rs, true * o[ls(r0, x0)], a × r0, r, o0