Program Definition fstn_stream {A: Type} (n: nat) (h: stream A) : stream A :=
fun m => if le_lt_dec n m then None else h m.
Next Obligation.
destruct (le_lt_dec n x), (le_lt_dec n y); try congruence.
+ omega.
+ apply (stream_sound1 h x y); auto; omega.
Qed.
Definition skipn_stream {A: Type} (n: nat) (h: stream A) : stream A.
exists (fun m => h (m + n)).
intros.
revert H0; apply (stream_sound1 h).
omega.
Defined.

(* Lemma fstn_stream_is_n_stream_inf {A: Type}: forall m (h: stream A), is_inf_stream h -> is_n_stream m (fstn_stream m h).  Lemma fstn_stream_is_n_stream' {A: Type}: forall n m (h: stream A), n <= m -> is_n_stream n h -> is_n_stream n (fstn_stream m h). *)
Lemma skipn_stream_spec {A: Type}: forall n m (h: stream A), (skipn_stream n h) m = h (m + n).