Local Open Scope logic.
(*Require Import tweetnacl20140427.split_array_lemmas.*)
unfold Byte.max_unsigned, Int.max_unsigned. simpl. omega. Qed.
induction l1; intros.
destruct l2; simpl in L. trivial. omega.
destruct l2; simpl in L. omega.
rewrite (IHl1 l2) with (d:=d).
specialize (N O). simpl in N. rewrite N; trivial. omega.
omega.
intros. apply (N (S i)). simpl; omega.
Qed.
(*Lemma map_Znth {A B : Type}{d: Inhabitant A} (f : A -> B) l n: Znth n (map f l) = f (Znth n l). *)

Lemma listGE16 {A} (l:list A): 16 <= Zlength l ->
exists v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 t,
l = [v0; v1; v2; v3; v4; v5; v6; v7; v8; v9; v10; v11; v12; v13; v14; v15] ++ t
/\ Zlength t = Zlength l - 16.