Section Unifiability.
Definition unifies sigma s t := sigma • s = sigma • t.
Definition Unifies sigma E := forall e, e ∈ E -> unifies sigma (fst e) (snd e).
Global Instance unifies_equiv sigma: Equivalence (unifies sigma).
Hint Rewrite Unifies_app : simplify.
Definition equi_unifiable (E1 E2: eqs X) :=
forall sigma, Unifies sigma E1 <-> Unifies sigma E2.
Notation "E1 ≈ E2" := (equi_unifiable E1 E2) (at level 80).
Global Instance equi_unifiable_equivalence: Equivalence equi_unifiable.
Instance equi_unifiable_app:
Proper (equi_unifiable ++> equi_unifiable ++> equi_unifiable)
(@List.app (eq X)).
Hint Resolve equi_unifiable_refl equi_unifiable_app equi_unifiable_comm
equi_unifiable_cons equi_unifiable_decompose_app
: equi_unifiable.

Lemma equi_unifiable_decomp s t E:
decomp s t = Some E -> [(s,t)] ≈ E.