| m0 = n0, n1 + 1 < # kar, n1 < # kar, n0 < # kar, m0 < # kar, n1 < m0, n0 ≤ m0, ∀ n1, n0, kar. n1 < m0 ∧ n0 < m0 ∧ n1 < # kar ∧ n0 < # kar ∧ m0 ≤ # kar → keyset(kar[n0, kar[n1]][n1, kar[n0]], m0) = keyset(kar, m0) ⊦ keyset(kar[n0, kar[n1]][n1, kar[n0]], m0) ++ kar[n0, kar[n1]][m0] = keyset(kar, m0) ++ kar[m0], m0 = n1 |
n1 + 1 < # kar, n1 < # kar, n0 < # kar, n1 < n0, ∀ n1, n, kar. n1 < n0 ∧ n < n0 ∧ n1 < # kar ∧ n < # kar ∧ n0 ≤ # kar → keyset(kar[n, kar[n1]][n1, kar[n]], n0) = keyset(kar, n0) ⊦ keyset(kar[n0, kar[n1]][n1, kar[n0]], n0) ++ kar[n1] = keyset(kar, n0) ++ kar[n0], n0 = n1
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≤ m; (s)% ⊦ m < # kar → kar[m, ki][m] = ki; (s)