Lean4
/-- O(m * log(|m ∪ n| + 1)), m ≤ n. Intersection of two sets, preferring members of
`t₁` over those of `t₂` when equivalent elements are encountered.
inter {1, 2} {2, 3} = {2}
inter {1, 3} {2} = ∅ -/
def inter : Ordnode α → Ordnode α → Ordnode α
| nil, _ => nil
| t₁@(node _ l₁ x r₁), t₂ =>
cond t₂.empty t₁ <|
let (l₂, y, r₂) := split3 x t₂
let l₁₂ := inter l₁ l₂
let r₁₂ := inter r₁ r₂
cond y.isSome (link l₁₂ x r₁₂) (merge l₁₂ r₁₂)