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

(* Specifications: *)
Lemma Zlength_extend : forall {A} (l : list A) ls, Zlength (extend l ls) = Zlength ls.
Lemma Znth_extend_in : forall {A}{d: Inhabitant A} (l : list A) ls i, 0 <= i < Zlength l -> Zlength l <= Zlength ls -> Znth i (extend l ls) = Znth i l :: Znth i ls.
Lemma Znth_extend_ge : forall {A}{d: Inhabitant A} (l : list A) ls i, Zlength l <= i -> Znth i (extend l ls) = Znth i ls.
Lemma Zlength_extendr : forall {A} (l : list A) ls, Zlength (extendr l ls) = Zlength ls.
Lemma Znth_extendr_ge : forall {A}{d: Inhabitant A} (l : list A) ls i, Zlength l <= i -> Znth i (extendr l ls) = Znth i ls.
Lemma list_join_eq : forall (b : list share) a c c' (Hc : sepalg_list.list_join a b c) (Hc' : sepalg_list.list_join a b c'), c = c'.
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'.
Lemma sublist_0_cons' : forall {A} i j (x : A) l, i <= 0 -> j > i -> sublist i j (x :: l) = x :: sublist i (j - 1) l.
Lemma sublist_combine : forall {A B} (l1 : list A) (l2 : list B) i j, sublist i j (combine l1 l2) = combine (sublist i j l1) (sublist i j l2).
Lemma sublist_extend : forall {A} (l : list A) ls i j, sublist i j (extend l ls) = extend (sublist i j l) (sublist i j ls).
Lemma sublist_extendr : forall {A} (l : list A) ls i j, sublist i j (extendr l ls) = extendr (sublist i j l) (sublist i j ls).
Lemma data_at__eq : forall {cs : compspecs} sh t p, data_at_ sh t p = data_at sh t (default_val t) p.
Lemma func_tycontext_sub : forall f V G A V2 G2 (HV : incl V V2) (HG : incl G G2) (Hdistinct : NoDup (map fst V2 ++ map fst G2)), tycontext_sub (func_tycontext f V G A) (func_tycontext f V2 G2 A).
Lemma semax_body_mono : forall V G {cs : compspecs} f s V2 G2 (HV : incl V V2) (HG : incl G G2) (Hdistinct : NoDup (map fst V2 ++ map fst G2)), semax_body V G f s -> semax_body V2 G2 f s.
Lemma weak_exclusive_conflict : forall P, predicates_hered.derives ((weak_exclusive_mpred P && emp) * P * P) FF.
Lemma exclusive_sepcon1 : forall (P Q : mpred) (HP : exclusive_mpred P), exclusive_mpred (P * Q).
Lemma exclusive_sepcon2 : forall (P Q : mpred) (HP : exclusive_mpred Q), exclusive_mpred (P * Q).
Lemma exclusive_andp1 : forall P Q (HP : exclusive_mpred P), exclusive_mpred (P && Q).
Lemma exclusive_andp2 : forall P Q (HQ : exclusive_mpred Q), exclusive_mpred (P && Q).
Lemma lock_inv_exclusive : forall v sh R, exclusive_mpred (lock_inv sh v R).
Lemma selflock_exclusive : forall R sh v, exclusive_mpred R -> exclusive_mpred (selflock R v sh).
Lemma exclusive_FF : exclusive_mpred FF.
Lemma mapsto_exclusive : forall (sh : Share.t) (t : type) (v : val), sepalg.nonunit sh -> exclusive_mpred (EX v2 : _, mapsto sh t v v2).
Lemma field_at__exclusive : forall (cs : compspecs) (sh : Share.t) (t : type) (fld : list gfield) (p : val), sepalg.nonidentity sh -> 0 < sizeof (nested_field_type t fld) -> exclusive_mpred (field_at_ sh t fld p).
Lemma ex_field_at_exclusive : forall (cs : compspecs) (sh : Share.t) (t : type) (fld : list gfield) (p : val), sepalg.nonidentity sh -> 0 < sizeof (nested_field_type t fld) -> exclusive_mpred (EX v : _, field_at sh t fld v p).