Definition Above x s := forall y, In y s -> O.lt x y.
Definition EquivBefore x s s' :=
forall y, O.lt y x -> (In y s <-> In y s').
Definition EmptyBetween x y s :=
forall z, In z s -> O.lt z y -> O.lt z x.
Definition lt s s' := exists x, EquivBefore x s s' /\
((In x s' /\ Below x s) \/
(In x s  /\ exists y, In y s' /\ O.lt x y /\ EmptyBetween x y s')).
#[global]
Instance : Proper (O.eq==>eq==>eq==>iff) EquivBefore.
#[global]
Instance : Proper (O.eq==>eq==>iff) Below.
#[global]
Instance : Proper (O.eq==>eq==>iff) Above.
#[global]
Instance : Proper (O.eq==>O.eq==>eq==>iff) EmptyBetween.
#[global]
Instance lt_compat : Proper (eq==>eq==>iff) lt.
#[global]
Instance lt_strorder : StrictOrder lt.

Lemma lt_empty_r : forall s s', Empty s' -> ~ lt s s'.
Definition Add x s s' := forall y, In y s' <-> O.eq x y \/ In y s.