| scan(key, zbrar, 0, nused) = 0, nused < # zbrar, sorted(zbrar, 0, nused), nused ≠ 0 → ¬ zbrar[0].key < key, ∀ n. n ≤ nused → key-range(zbrar, n, nused + 1, ri0) = key-range(zbrar, n, nused + 1, ri1), ∀ n. n ≠ 0 ∧ n < nused → key < zbrar[n].key ⊦ key ∈ key-range(zbrar, 0, nused + 1, ri1), key ∈ key-range(zbrar, 0, nused + 1, ri0), (key ∈ ri0 ↔ key ∈ ri1) ∧ (key ∈ ri0 → ri0[key] = ri1[key]) |
⊦ nused ≠ 0 ∧ nused < # zbrar → key-range(zbrar, 0, nused + 1, ri) = ri |≤ zbrar[0].key
Used simplifier rules: ⊦ nused ≠ 0 ∧ nused < # zbrar → key-range(zbrar, 0, nused + 1, ri) = ri |≤ zbrar[0].key; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ key0 ∈ ri |≤ key1 ↔ key0 ∈ ri ∧ ¬ key1 < key0; (s)% ⊦ ¬ zbrar[m].key < key → scan(key, zbrar, m, n) = m; (s)% ⊦ scan(key, zbrar, m, 0) = m; (s)% ⊦ 0 < m ↔ m ≠ 0; (s)% ⊦ sorted(zbrar, n, 0); (s)% ⊦ key-range(zbrar, 0, 1, ri) = ri; (s)% ⊦ ¬ m < 0; (s)% ⊦ m ≤ 0 ↔ m = 0; (s) Used terms: ri0, nused, zbrar