| 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, ablock] \ (ns -- n)) ∧ (∀ n0. 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) |
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)
Used simplifier rules: ⊦ dom st[n, ablock] = dom st ++ n; (s)% ⊦ ns \ (ns0 ++ n) = (ns \ ns0) -- n; (s)% ⊦ dom(st \ ns) = dom st \ ns; (s)