(* * 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}.

(* Specifications: *)
Lemma cjoin_sub_join_sub{A} {JOIN: Join A}:
forall {w1 w3}, constructive_join_sub w1 w3 -> join_sub w1 w3.
Lemma cjoin_sub_irr {A} `{Perm_alg A}{CA: Canc_alg A}:
forall {w1 w3: A} (j1 j2: constructive_join_sub w1 w3), proj1_sig j1 = proj1_sig j2.
Lemma cjoin_sub_trans {A} `{Perm_alg A}: forall a b c,
constructive_join_sub a b -> constructive_join_sub b c -> constructive_join_sub a c.
Lemma constructive_join_sub_refl {A} `{Perm_alg A}{SA: Sep_alg A}: forall x, constructive_join_sub x x.
Hint Resolve @constructive_join_sub_refl.