| dom st0 \ ns ⊆ dom st \ ns, ∀ n. n ∈ st0 \ ns ∧ n ∈ st \ ns → (st0 \ ns)[n].list ⊑ (st \ ns)[n].list ∧ (st0 \ ns)[n].ladrlist ⊑ (st \ ns)[n].ladrlist ∧ # (st0 \ ns)[n].list = # (st0 \ ns)[n].ladrlist ∧ # (st \ ns)[n].list = # (st \ ns)[n].ladrlist ⊦ n ∈ st, (dom st0 \ ns) -- n ⊆ (dom st ++ n) \ (ns -- n) ∧ ( n0 ∈ st0 \ (ns ++ n) ∧ n0 ∈ st[n, ablock] \ (ns -- n) → (st0 \ (ns ++ n))[n0].list ⊑ (st[n, ablock] \ (ns -- n))[n0].list ∧ (st0 \ (ns ++ n))[n0].ladrlist ⊑ (st[n, ablock] \ (ns -- n))[n0].ladrlist ∧ # (st0 \ (ns ++ n))[n0].list = # (st0 \ (ns ++ n))[n0].ladrlist ∧ # (st[n, ablock] \ (ns -- n))[n0].list = # (st[n, ablock] \ (ns -- n))[n0].ladrlist) |
(st0 \ (ns ++ n))[n0] = mkblock(x, lax, m), dom st0 \ ns ⊆ dom st \ ns, ∀ n. n ∈ st0 \ ns ∧ n ∈ st \ ns → (st0 \ ns)[n].list ⊑ (st \ ns)[n].list ∧ (st0 \ ns)[n].ladrlist ⊑ (st \ ns)[n].ladrlist ∧ # (st0 \ ns)[n].list = # (st0 \ ns)[n].ladrlist ∧ # (st \ ns)[n].list = # (st \ ns)[n].ladrlist ⊦ n ∈ st, (dom st0 \ ns) -- n ⊆ (dom st ++ n) \ (ns -- n) ∧ ( n0 ∈ st0 \ (ns ++ n) ∧ n0 ∈ st[n, ablock] \ (ns -- n) → x ⊑ (st[n, ablock] \ (ns -- n))[n0].list ∧ lax ⊑ (st[n, ablock] \ (ns -- n))[n0].ladrlist ∧ # x = # lax ∧ # (st[n, ablock] \ (ns -- n))[n0].list = # (st[n, ablock] \ (ns -- n))[n0].ladrlist)
Used simplifier rules: ⊦ (x = ablock.list ∧ lax = ablock.ladrlist) ∧ m = ablock.ref-size ↔ ablock = mkblock(x, lax, m); (elim) Used terms: (st0 \ (ns ++ n))[n0], x, m, m0, m1