induction ls using rev_ind; intuition; simpl in *.
symmetry in H0.
eapply allNatsLt_nil_inv in H0.
subst.
assert (n1 = O).
omega.
subst.
simpl.
trivial.
destruct n2; simpl in *.
eapply app_eq_nil in H0.
intuition.
discriminate.
eapply app_inj_tail in H0.
intuition.
subst.
destruct (le_gt_dec n1 (length (allNatsLt n2))).
rewrite firstn_app.
eapply (@IHls); eauto.
rewrite allNatsLt_length.
trivial.
trivial.
rewrite allNatsLt_length in g.
assert (n1 = (S n2)).
omega.
subst.
eapply firstn_ge_all.
rewrite allNatsLt_length.
intuition.
Qed.

(* Specifications: *)
Theorem firstn_allNatsLt :
forall n1 n2,
n2 >= n1 ->
firstn n1 (allNatsLt n2) = allNatsLt n1.