| n ∈ below(ns0, m) ↔ n ∈ ns0 ∧ n < m, n0 < m, n ∈ (n0 < m ⊃ below(ns0, m) ++ n0;below(ns0, m)), ∀ ns1, n, m. # ns1 < #(ns0 ++ n0) → true → (n ∈ below(ns1, m) ↔ n ∈ ns1 ∧ n < m) ⊦ # (n0 < m ⊃ below(ns0, m) ++ n0;below(ns0, m)) = 0, below(ns0, m) ++ n0 = ∅, n0 ∈ ns0, (n = n0 ∨ n ∈ ns0) ∧ n < m |
n ∈ below(ns0, m) ↔ n ∈ ns0 ∧ n < m, n0 < m, n = n0 ∨ n ∈ ns0 ∧ n < m, ∀ ns1, n, m. # ns1 < #(ns0 ++ n0) → true → (n ∈ below(ns1, m) ↔ n ∈ ns1 ∧ n < m) ⊦ #(below(ns0, m) ++ n0) = 0, n0 ∈ ns0, (n = n0 ∨ n ∈ ns0) ∧ n < m
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%size-zero: ⊦ # ns ≠ 0 → ns ≠ ∅; (forward) from specification set-basic[nat-set]%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ n ∈ ns ++ n0 ↔ n = n0 ∨ n ∈ ns; (s)% ⊦ ∅ ≠ ns ++ n; (s)