| g(r) = a0, (a1[_∃(λ o. r => o)] * R)[rs, f, g(r; a1)] ⊦ (a0[_∃(λ o. r => o)] * R)[rs, f, g] |
(a1[r => o] * R)[rs, f, g(r; a1)] ⊦ ∃ o. (g(r)[r => o] * R)[rs, f, g]
Used simplifier rules: lift-ex-o: ⊦ a[_∃ oP] = _∃(λ o, a0. a[oP(o)]);%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]% ⊦ (_∃ oR * R)[rs, f, g] ↔ (∃ o, a. (oR(o, a) * R)[rs, f, g]); (s)