| # x = # lax2 + # lax1 + 1, # x0 = # lax0, st1[m] = mkblock(x0, lax0, m3), st0[m] = mkblock(x, lax2 + @(m0, m1) ' + lax1, m2), m ∈ st1, m ∈ st0, @(m, m0, m1) ∈ st1, lax2 + @(m0, m1) ' + lax1 ⊑ lax0, x ⊑ x0, ∀ n. n ∈ st0 → n ∈ st1 ⊦ x[# lax2] = st1[@(m, m0, m1).lnum].list[pos(@(@(m, m0, m1).pos, @(m, m0, m1).size), st1[@(m, m0, m1).lnum].ladrlist)], @(m0, m1) ∈ lax2 |
# x = # lax2 + # lax1 + 1, # x0 = # lax0, st1[m] = mkblock(x0, lax0, m3), st0[m] = mkblock(x, lax2 + @(m0, m1) ' + lax1, m2), m ∈ st1, m ∈ st0, @(m0, m1) ∈ lax0, lax2 + @(m0, m1) ' + lax1 ⊑ lax0, x ⊑ x0, ∀ n. n ∈ st0 → n ∈ st1 ⊦ x[# lax2] = x0[pos(@(m0, m1), lax0)], @(m0, m1) ∈ lax2
Used simplifier rules: in: ⊦ adr ∈ st ↔ adr.lnum ∈ st ∧ @(adr.pos, adr.size) ∈ st[adr.lnum].ladrlist;% ⊦ mkblock(x, lax, m).ladrlist = lax; (s)% ⊦ mkblock(x, lax, m).list = x; (s)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ @(m, m0, m1).pos = m0; (s)% ⊦ @(m, m0, m1).lnum = m; (s)