(** Elements [a] and [b] join. *)
Definition joins {A} {J: Join A} (a b : A) : Prop :=
exists c, join a b c.
Definition overlap {A}{J: Join A} (a b: A) := ~(joins a b).

(* Specifications: *)
Lemma join_joins {A} {J: Join A}: forall {a b c},
join a b c -> joins a b.
Lemma join_joins' {A} {J: Join A} {PA: Perm_alg A}: forall {a b c},
join a b c -> joins b a.
Lemma joins_sym {A}  {J: Join A} {PA: Perm_alg A}: forall a b,
joins a b <-> joins b a.
Lemma joins_sym': forall {A} `{Perm_alg A} {phi1 phi2}, joins phi1 phi2 -> joins phi2 phi1.
Definition join_sub {A} `{Join A} (a c : A) : Prop :=
exists b, join a b c.