(* * Copyright (c) 2009-2010, Andrew Appel, Robert Dockins and Aquinas Hobor. * *)
Definition constructive_join_sub {A} {JOIN: Join A} (w1 w3: A) := {w2 | join w1 w2 w3}.
Hint Resolve @constructive_join_sub_refl : core.
Definition constructive_joins {A}  {JOIN: Join A} (w1 w2 : A) := {w3 | join w1 w2 w3}.
Definition same_constructive_silhouette {A} {JOIN: Join A} (a b: A) :=
forall c, (constructive_joins c a -> constructive_joins c b) *
(constructive_joins c b -> constructive_joins c a).
Definition sub_constructive_silhouette {A} {JOIN: Join A}  (a b: A) :=
forall c, constructive_joins c b -> constructive_joins c a.

Lemma sub_constructive_silhouette_refl {A} {JOIN: Join A} : forall a, sub_constructive_silhouette a a.