Example strcat_preloop2_new : forall {cs : compspecs} n ld,
n > Zlength ld ->
data_subsume (tarray tschar n)
(map Vbyte (ld ++ [Byte.zero]) ++ list_repeat (Z.to_nat (n - (Zlength ld + 1))) Vundef)
(map Vbyte ld ++ list_repeat (Z.to_nat (n - Zlength ld)) Vundef).

Lemma split_data_at_app_tschar:
forall {cs : compspecs} sh n (al bl: list val) p ,
n = Zlength (al++bl) ->
data_at sh (tarray tschar n) (al++bl) p =
data_at sh (tarray tschar (Zlength al)) al p
* data_at sh (tarray tschar (n - Zlength al)) bl
(field_address0 (tarray tschar n) [ArraySubsc (Zlength al)] p).