Proof with auto.
intros.
icase a; icase b; icase c; icase d; icase e.
unfold ijoin in *.
destruct (join_assoc H H0) as [f [? ?]].
assert ((~identity f) /\ (~full f)).
unfold midObj in *.
split.
intro.
generalize (split_identity _ _ H1 H3); intro.
tauto.
intro.
specialize ( H3 x). spec H3. exists x3...
specialize ( H3 f x3 H2). subst x3.
apply unit_identity in H2.
tauto.
exists (existT midObj f H3).
split...
Qed.

(* Specifications: *)
Lemma ijoin_canc {A}  {JA: Join A}{SA: Sep_alg A}{CA: Canc_alg A}: forall a a' b c,
ijoin a b c ->
ijoin a' b c ->
a = a'.