(* * Copyright (c) 2009-2011, Andrew Appel, Robert Dockins and Aquinas Hobor. * *)
(* A portion of this file was developed by Le Xuan Bach *)
Definition midObj {A} {JA: Join A} (a : A) : Prop := ~identity a /\ ~ full a.
Definition ijoinable A {JA: Join A} : Type := {sh : A & midObj sh}.
Definition ijoin {A} {JA: Join A} (j1 j2 j3 : ijoinable A) : Prop :=
match (j1, j2, j3) with
(existT _ t1 _, existT _ t2 _, existT _ t3 _) => join t1 t2 t3
end.
Proof with auto.
intros.
icase j1; icase j2; icase j3.
red in H; red.
apply join_comm...
Qed.

Lemma ijoin_assoc {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A} : forall a b c d e,
ijoin a b d ->
ijoin d c e ->
{f : ijoinable A | ijoin b c f /\ ijoin a f e}.