| ∀ 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), @(m, m0, m1) ∈ as0 |
0 = as0.size ↔ (∀ adr. adr ∈ as0 → adr.size = 0), ∀ 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), @(m, m0, m1) ∈ as0
Used simplifier rules: ⊦ ¬ adr ∈ as → #(as ++ adr) = # as + 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: as0