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