Fixpoint allNatsLt (n : nat) :=
  match n with
    | 0 => nil
    | S n' => allNatsLt n' ++ (n' :: nil)
  end.

Theorem allNatsLt_filter_lt : forall (p n : nat), (n <= p)%nat-> filter (fun z => if (lt_dec z n) then true else false) (allNatsLt p) = allNatsLt n.