Definition Ers (* Extern read share *) := 
  Share.lub extern_retainer (fst (Share.split Share.Rsh)).

(* Specifications: *)
Lemma readable_nonidentity: forall sh, readable_share sh -> sepalg.nonidentity sh.
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.