| precise(aP(a)), ∀ a0. a0 ∈ s0 → precise(aP(a0)), ∀ s1, aP. # s1 < #(s0 ++ a) → (∀ a. a ∈ s1 → precise(aP(a))) → precise(aP ⊗_ s1) ⊦ precise(aP(a) * aP ⊗_ s0), a ∈ s0 |
precise(aP(a)), ∀ a0. a0 ∈ s0 → precise(aP(a0)), ∀ s1, aP. # s1 < #(s0 ++ a) → (∀ a. a ∈ s1 → precise(aP(a))) → precise(aP ⊗_ s1) ⊦ precise(aP(a) * aP ⊗_ s0), a ∈ s0, ∀ a. a ∈ s0 → precise(aP(a))
Used simplifier rules: ⊦ precise(P0) ∧ precise(P1) → precise(P0 * P1); (s)%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep% ⊦ ¬ a ∈ s → #(s ++ a) = # s + 1; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ ¬ n < n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic Used terms: s0, aP