Proof using.
unfold list_serialize, list_deserialize.
cheerios_crush.
now rewrite list_serialize_deserialize_id_rec.
Qed.
Global Instance list_Serializer : Serializer (list A).
Fixpoint vector_serialize {n} (v : Vector.t A n) : IOStreamWriter.t :=
match v with
| Vector.nil => IOStreamWriter.empty
| Vector.cons a v' => IOStreamWriter.append (fun _ => serialize a)
(fun _ => vector_serialize v')
end.
Fixpoint vector_deserialize {n} : ByteListReader.t (Vector.t A n) :=
match n as n0 return ByteListReader.t (Vector.t A n0) with
| 0 => ByteListReader.ret Vector.nil
| S n' => a <- deserialize ;;
v <- vector_deserialize ;;
ByteListReader.ret (Vector.cons a v)
end.

(* Specifications: *)
Lemma vector_serialize_deserialize_id :
forall n, serialize_deserialize_id_spec vector_serialize (@vector_deserialize n).