Proof with try tauto.
intros. rewrite Share.lub_rel_recompose in H.
generalize (Share.decompose_recompose (Share.lub a1 a2, Share.lub b1 b2));intro.
rewrite H in H0.
rewrite Share.lub_rel_recompose in H0.
rewrite Share.decompose_recompose in H0.
split;congruence.
Qed.

(* Specifications: *)
Lemma share_rel_unrel:
forall r sh,
join_sub sh r ->
Share.rel r (Share.unrel r sh) = sh.
Lemma glb_rel_Lsh_Rsh:
forall a b, Share.glb (Share.rel Share.Lsh a) (Share.rel Share.Rsh b) = Share.bot.
Lemma glb_Rsh_rel_Lsh_sh:
forall sh,
Share.glb Share.Rsh (Share.rel Share.Lsh sh) = Share.bot.
Lemma right_nonempty_readable:
forall rsh sh, sepalg.nonidentity sh <->
readable_share (Share.splice rsh sh).
Lemma writable_share_right: forall sh, writable_share sh -> Share.unrel Share.Rsh sh = Share.top.
Lemma unrel_bot:
forall sh, nonidentity sh -> Share.unrel sh Share.bot = Share.bot.
Lemma join_splice2_aux1:
forall a1 a2 b1 b2,
Share.lub (Share.rel Share.Lsh (Share.glb a1 a2)) (Share.rel Share.Rsh (Share.glb b1 b2)) = Share.bot ->
Share.glb a1 a2 = Share.bot /\ Share.glb b1 b2 = Share.bot.
Lemma join_splice:
forall a1 a2 a3 b1 b2 b3,
sepalg.join a1 a2 a3 ->
sepalg.join b1 b2 b3 ->
sepalg.join (Share.splice a1 b1)  (Share.splice a2 b2)  (Share.splice a3 b3).
Lemma splice_bot2:
forall sh, Share.splice sh Share.bot = Share.rel Share.Lsh sh.
Lemma splice_unrel_unrel:
forall sh,
Share.splice (Share.unrel Share.Lsh sh) (Share.unrel Share.Rsh sh) = sh.
Lemma join_splice2:
forall a1 a2 a3 b1 b2 b3 : Share.t,
join (Share.splice a1 b1) (Share.splice a2 b2) (Share.splice a3 b3) ->
join a1 a2 a3 /\ join b1 b2 b3.
Lemma nonidentity_rel_Lsh: forall t, nonidentity (Share.rel Share.Lsh t) -> nonidentity t.
Lemma readable_share_unrel_Rsh: forall sh, readable_share sh <-> nonunit (Share.unrel Share.Rsh sh).
unfold readable_share in *.