| n < # zbrar, nused < # zbrar, sorted(zbrar, 0, nused + 1), n ≤ nused ⊦ key ∈ keys(shl(zbrar, n, nused + 1), 0, nused) ↔ key ≠ zbrar[n].key ∧ key ∈ keys(zbrar, 0, nused + 1) |
m + nused ≤ # zbrar ⊦ key ∈ keys(zbrar, m, nused) ↔ (∃ n. n < nused ∧ zbrar[m + n].key = key)
nused < # zbrar, n < # zbrar, sorted(zbrar, 0, nused + 1), n ≤ nused, 0 + nused ≤ # shl(zbrar, n, nused + 1) ⊦ (∃ n0. n0 < nused ∧ shl(zbrar, n, nused + 1)[0 + n0].key = key) ↔ key ≠ zbrar[n].key ∧ key ∈ keys(zbrar, 0, nused + 1)
Used simplifier rules: ⊦ n + 0 = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ # shl(zbrar, n, m) = # zbrar; (s)% ⊦ m < n → m ≤ n; (s) Used terms: nused, 0, shl(zbrar, n, nused + 1), key