| ((adP0 ∧_ st))(H), ∀ a, H. a ∈ st ∧ adP0(a, st[a])(H) → adP(a, st[a])(H), ∀ st0, adP0, H, adP. # st0 < # st → ((adP0 ∧_ st0))(H) ∧ (∀ a, H. a ∈ st0 ∧ adP0(a, st0[a])(H) → adP(a, st0[a])(H)) → ((adP ∧_ st0))(H) ⊦ ((adP ∧_ st))(H), ∀ a, d, st0. ¬(st = st0[a, d] ∧ ¬ a ∈ st0) |
adP0(a, d)(H), ((adP0 ∧_ st0))(H), ∀ a0, H. a0 ∈ st0[a, d] ∧ adP0(a0, st0[a, d][a0])(H) → adP(a0, st0[a, d][a0])(H), ∀ st1, adP0, H, adP. # st1 < # st0[a, d] → ((adP0 ∧_ st1))(H) ∧ (∀ a, H. a ∈ st1 ∧ adP0(a, st1[a])(H) → adP(a, st1[a])(H)) → ((adP ∧_ st1))(H) ⊦ a ∈ st0, adP(a, d)(H) ∧ ((adP ∧_ st0))(H)
Used simplifier rules: And-ins: ⊦ ¬ a ∈ st → adP ∧_ st[a, d] = (adP(a, d) ∧ adP ∧_ st);%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)