| (¬ 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]) |
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
Used simplifier rules: ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic