Proof with auto.
intros.
icase x;icase y;icase z;icase z';try inversion H;try inversion H0;try congruence.
f_equal.
eapply ijoin_eq; eauto.
eapply join_eq; eauto.
elimtype False; clear - pa_A sa_A H1 H4 A_top_full.
destruct sh; destruct sh0; destruct sh1.
red in H1; red in H4; simpl in H4.
generalize (join_eq H1 H4); intro; subst x1.
unfold midObj in *.
tauto.
elimtype False; clear - pa_A sa_A H2 H3 A_top_full.
destruct sh;destruct sh0;destruct sh1.
red in H3; red in H2; simpl in H2.
generalize (join_eq H2 H3);intro;subst x1.
unfold midObj in *.
tauto.
rewrite (combjoin_eq _ _ _ _ H1 H3)...
Qed.

(* Specifications: *)
Lemma combineJ_assoc: forall a b c d e : combiner,
join a b d -> join d c e ->
{f : combiner & join b c f /\ join a f e}.