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.

(* Specifications: *)
Lemma readable_not_identity: forall sh P, readable_share sh -> identity sh -> P.
Lemma comp_parts: forall L R : Share.t, Share.comp L = R -> forall sh: Share.t, sh = Share.lub (Share.glb L sh) (Share.glb R sh).
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)).
Lemma join_pure_readable: forall sh1 sh2 sh3, join sh1 sh2 sh3 -> pure_readable_share sh1 -> pure_readable_share sh2 -> pure_readable_share sh3.