Set Implicit Arguments.
Definition Tsh : share := Share.top.
Definition nonempty_share (sh: share) :=
sepalg.nonidentity sh.
Definition readable_share (sh: share) :=
nonempty_share (Share.glb Share.Rsh sh).
Definition writable_share (sh: share) :=
nonempty_share (Share.glb Share.Lsh sh) /\ join_sub Share.Rsh sh.
Hint Resolve writable_readable : core.
Arguments glb_Rsh_not_top sh _ : clear implicits.
Hint Resolve writable_share_top : core.
Hint Resolve writable_readable_share : core.
Definition extern_retainer := fst (Share.split Share.Lsh).
Definition Ews (* extern_write_share *) :=
Share.lub extern_retainer Share.Rsh.
Hint Resolve readable_nonidentity : core.
Definition pure_readable_share (sh: Share.t) :=
Share.glb Share.Lsh sh = Share.bot /\ readable_share sh.
Definition rshare := sig pure_readable_share.
Definition readable_part: forall (sh: Share.t) (rsh: readable_share sh), rshare.
intros.
exists (Share.glb Share.Rsh sh).
split.
rewrite <- Share.glb_assoc. rewrite glb_Lsh_Rsh.
rewrite Share.glb_commute. apply Share.glb_bot.
unfold readable_share.
rewrite <- Share.glb_assoc.
rewrite Share.glb_idem.
apply rsh.
Defined.
Arguments readable_not_identity sh P _ _ : clear implicits.

Lemma join_comp_parts:
forall L R : Share.t,
Share.comp L = R ->
forall a b c : Share.t,
join a b c ->
(join (Share.glb L a) (Share.glb L b) (Share.glb L c) /\
join (Share.glb R a) (Share.glb R b) (Share.glb R c)).