Instance list_PCM (P : Ghost) : Ghost := { valid a := True; Join_G := list_join }.Definition ghost_list {P : Ghost} g l := own(RA := list_PCM P) g l NoneP.Definition list_incl {A} (l1 l2 : list (option A)) := (length l1 <= length l2)%nat /\
  forall n a, nth n l1 None = Some a -> nth n l2 None = Some a.

Lemma list_join_app : forall {P : Ghost} l1 l2 m1 m2 n1 n2, length l1 = length m1 -> length l1 = length n1 -> list_join l1 m1 n1 -> list_join l2 m2 n2 -> list_join (l1 ++ l2) (m1 ++ m2) (n1 ++ n2).