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