Lean4
/-- O(log n). Remove an element from the set equivalent to `x`. Does nothing if there
is no such element.
erase 1 {1, 2, 3} = {2, 3}
erase 4 {1, 2, 3} = {1, 2, 3}
Using a preorder on `ℕ × ℕ` that only compares the first coordinate:
erase (1, 1) {(0, 1), (1, 2)} = {(0, 1)}
erase (3, 1) {(0, 1), (1, 2)} = {(0, 1), (1, 2)} -/
def erase (x : α) : Ordnode α → Ordnode α
| nil => nil
| _t@(node _ l y r) =>
match cmpLE x y with
| Ordering.lt => balanceR (erase x l) y r
| Ordering.eq => glue l r
| Ordering.gt => balanceL l y (erase x r)