(*The name is legacy. Comes from the time there was two shares. Then
 * The contradiction would look like 
 * forall (sh2 sh3:pshares) -> join pfullshare sh2 sh3 -> False. *)
Local Ltac pfulltac := try solve [exfalso; eapply join_writable0_readable; eauto].

(* Specifications: *)
Lemma readable_part_writable0: forall sh (Hw : writable0_share sh) (Hr : readable_share sh), readable_part (Hr) = exist _ _ pure_readable_Rsh.
Lemma rmap_makelock_join phi1 phi1' loc R length phi2 phi : 0 < length -> rmap_makelock phi1 phi1' loc R length -> join phi1 phi2 phi -> exists phi', rmap_makelock phi phi' loc R length /\ join phi1' phi2 phi'.
Lemma rmap_freelock_join phi1 phi1' m loc R length phi2 phi : 0 < length -> rmap_freelock phi1 phi1' m loc R length -> join phi1 phi2 phi -> exists phi', rmap_freelock phi phi' m loc R length /\ join phi1' phi2 phi'.