| ∀ as1. # as1 < #(as0 ++ @(m, m0, m1)) → true → (0 = as1.size ↔ (∀ adr. adr ∈ as1 → adr.size = 0)) ⊦ 0 = as0.size + m1 ↔ (∀ adr0. adr0 = @(m, m0, m1) ∨ adr0 ∈ as0 → adr0.size = 0), 0 = as0.size, @(m, m0, m1) ∈ as0, ∀ adr. adr ∈ as0 → adr.size = 0 |
adr ∈ as0, ∀ adr0. adr0 = @(m, m0, m1) ∨ adr0 ∈ as0 → adr0.size = 0, ∀ as1. # as1 < #(as0 ++ @(m, m0, m1)) → true → (0 = as1.size ↔ (∀ adr. adr ∈ as1 → adr.size = 0)) ⊦ # as0 = 0, adr.size = 0, 0 = as0.size, 0 = as0.size + m1, as0 = ∅, @(m, m0, m1) ∈ as0
Used simplifier rules: size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[address-store]%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws)%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[address-store]