End type.

(* Specifications: *)
Lemma hlist_hd_fst_hlist_split
: forall t (xs ys : list _) (h : hlist (t :: xs ++ ys)),
hlist_hd (fst (hlist_split (t :: xs) ys h)) = hlist_hd h.
Lemma hlist_tl_fst_hlist_split
: forall t (xs ys : list _) (h : hlist (t :: xs ++ ys)),
hlist_tl (fst (hlist_split (t :: xs) ys h)) =
fst (hlist_split xs ys (hlist_tl h)).
Lemma hlist_tl_snd_hlist_split
: forall t (xs ys : list _) (h : hlist (t :: xs ++ ys)),
snd (hlist_split xs ys (hlist_tl h)) =
snd (hlist_split (t :: xs) ys h).