Definition ThirtyTwoByte (q:SixteenByte * SixteenByte) (v:val) : mpred :=
  match q with (q1, q2) =>
    @data_at CompSpecs Tsh (Tarray tuchar 32 noattr) ((SixteenByte2ValList q1) ++ (SixteenByte2ValList q2)) v
  end.Definition QByte (q:QuadByte) (v:val) : mpred :=
  data_at Tsh (Tarray tuchar 4 noattr) (QuadByte2ValList q) v.Definition QuadChunks2ValList (l: list QuadByte) : list val :=
  List.fold_right (fun q vals => QuadByte2ValList q ++ vals) nil l.Definition flatten16 (B:SixteenByte) : list QuadByte :=
  match B with (q0, q1, q2, q3) => [q0; q1; q2; q3] end.

(* Specifications: *)
Lemma SixteenByte2ValList_flatten B: QuadChunks2ValList (flatten16 B) = SixteenByte2ValList B.
Lemma QuadByteByteList_ZLength q: 4 = Zlength (QuadByte2ByteList q).
Lemma QuadByteValList_ZLength q: 4 = Zlength (QuadByte2ValList q).
Lemma SixteenByte2ValList_Zlength C: 16 = Zlength (SixteenByte2ValList C).