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_l : forall x s1 s2 s2',
Empty s1 -> Above x s2 -> Add x s2 s2' -> lt s1 s2'.