We present a new set CRDT, CLSet (causal-length set), where the meta data associated with an element is simply a natural number (called causal length).
In simple terms, it's a count of how many times the element has been added or removed. If it's odd, the element is present; if it's even, the element has been removed. The ⊔ operator works by taking the maximum value of this counter across all its inputs.
It's neat, and avoids any issues with clock skew or information leakage caused by using timestamps. It still requires keeping a tombstone entry when an element has been removed, but I think that might be OK, provided we don't have to keep the associated entry data.