| kar[3 + 2 * m1] = key-index(key1, m3), kar[4 + 2 * m1] = key-index(key2, m4), kar[m1 + 1] = key-index(key3, m5), kar[m1 / 2] = key-index(key4, m6), key-index(key2, m4) = key-index(key, m0), 3 + 2 * m1 < # kar, m1 + 1 < # kar, m1 + 1 < n, key < key4, 3 + 2 * m1 < n, 4 + 2 * m1 < n, key2 < key1, n ≤ # kar, ∀ m. m < n ∧ m ≠ 0 → ¬ kar[m].key < kar[(m - 1) / 2].key ⊦ key3 < key4 |
kar[3 + 2 * m1] = key-index(key1, m3), kar[4 + 2 * m1] = key-index(key, m4), kar[m1 + 1] = key-index(key3, m5), kar[m1 / 2] = key-index(key4, m6), 4 + 2 * m1 < # kar, 3 + 2 * m1 < # kar, m1 + 1 < # kar, m1 + 1 < n, key < key4, 3 + 2 * m1 < n, 4 + 2 * m1 < n, key < key1, n ≤ # kar, ∀ m. m < n ∧ m ≠ 0 → ¬ kar[m].key < kar[(m - 1) / 2].key ⊦ key3 < key4
Used simplifier rules: fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%lel: ⊦ key < key0 ∧ key = key1 → key1 < key0; (forward) from specification oelem[binheap-key]% ⊦ key-index(key, m) = key-index(key0, m0) ↔ key = key0 ∧ m = m0; (ws)