Fixpoint extend {A} (l : list A) ls :=
  match l, ls with
  | x :: xs, y :: ys => (x :: y) :: extend xs ys
  | _, _ => ls
  end.

Lemma readable_share_list_join : forall sh shs sh', sepalg_list.list_join sh shs sh' -> readable_share sh \/ Exists readable_share shs -> readable_share sh'.