| n < # asar ⊦ ((btree(rp, r, adr, height, dirty, ri, iast | union(asar, 0, # asar), asar[n], alladrs, nstat) * P))(zh) ↔ ((btree(rp, r, adr, height, dirty, ri, iast | asar[n], asar[n], alladrs, nstat) * P))(zh) |
⊦ ((btree(rp, r0, adr, height, dirty0, ri, iast, as, alladrs, nstat) * P))(zh0) → ((btree(rp, r0, adr, height, dirty0, ri, iast | as, as, alladrs, nstat) * P))(zh0)
((btree(rp, r, adr, height, dirty, ri, iast, asar[n], alladrs, nstat) * P))(zh), n < # asar ⊦ ((btree(rp, r, adr, height, dirty, ri, iast | union(asar, 0, # asar), asar[n], alladrs, nstat) * P))(zh) ↔ true
Used simplifier rules: btree-istore-restrict: ⊦ (( btree (rp, r0, adr, height, dirty0, ri, iast | as0, as, alladrs, nstat) * P) )(zh0) → (( btree (rp, r0, adr, height, dirty0, ri, iast, as, alladrs, nstat) * P) )(zh0);%sep-ass: ⊦ (P * P3) * P4 = P * P3 * P4; from specification heap-sep[zheap]%sep-com: ⊦ P * P2 = P2 * P; from specification heap-sep[zheap] Used terms: zh, P, nstat, alladrs, asar[n], iast, ri, dirty, height, adr, r, rp