Hint Resolve writable_readable_share.
Definition extern_retainer := fst (Share.split Share.Lsh).
Definition Ews (* extern_write_share *) :=
Share.lub extern_retainer Share.Rsh.

(* Specifications: *)
Lemma writable_Ews: writable_share Ews.
Lemma writable_Rsh: writable_share Share.Rsh.
Hint Resolve readable_nonidentity.
Lemma sub_glb_bot:
forall r a c : share,
sepalg.join_sub a c ->
Share.glb r c = Share.bot ->
Share.glb r a = Share.bot.
Lemma glb_split: forall sh,
Share.glb (fst (Share.split sh)) (snd (Share.split sh)) = Share.bot.
Lemma Lsh_nonidentity:   sepalg.nonidentity Share.Lsh.
Lemma Rsh_nonidentity:   sepalg.nonidentity Share.Rsh.
Lemma nonidentity_extern_retainer: ~identity extern_retainer.
Lemma glb_split_x:
forall a, Share.glb a (fst (Share.split a)) = fst (Share.split a).
Lemma readable_Ers: readable_share Ers.
Lemma join_sub_readable:
forall sh sh', sepalg.join_sub sh sh' -> readable_share sh -> readable_share sh'.
Lemma join_unreadable_shares:
forall sh1 sh2 sh,
sepalg.join sh1 sh2 sh ->
~ readable_share sh1 ->
~ readable_share sh2 ->
~ readable_share sh.
Lemma readable_share_join_left:
forall sh1 sh2 sh,
sepalg.join sh1 sh2 sh ->
readable_share sh1 -> readable_share sh.
Lemma readable_share_join:
forall sh1 sh2 sh,
sepalg.join sh1 sh2 sh ->
readable_share sh1 \/ readable_share sh2 -> readable_share sh.
Lemma Lsh_bot_neq: Share.Lsh <> Share.bot.
Lemma not_nonunit_bot: forall sh, ~ nonunit sh <-> sh = Share.bot.
Lemma join_readable1:
forall sh1 sh2 sh3,
join sh1 sh2 sh3 ->
readable_share sh1 -> readable_share sh3.
Lemma join_readable2:
forall sh1 sh2 sh3,
join sh1 sh2 sh3 ->
readable_share sh2 -> readable_share sh3.
Lemma bot_unreadable: ~readable_share Share.bot.
Definition pure_readable_share (sh: Share.t) :=
Share.glb Share.Lsh sh = Share.bot /\ readable_share sh.