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

(* Specifications: *)
Lemma ijoin_eq {A} {JA: Join A}{PA: Perm_alg A} : forall j1 j2 j3 j3',
ijoin j1 j2 j3 ->
ijoin j1 j2 j3' ->
j3 = j3'.
Lemma ijoin_com {A} {JA: Join A}{PA: Perm_alg A} : forall j1 j2 j3,
ijoin j1 j2 j3 -> ijoin j2 j1 j3.