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.Definition skipn_stream {A: Type} (n: nat) (h: stream A) : stream A.

(* Specifications: *)
Lemma fstn_stream_Some {A: Type}: forall n m (h: stream A), m < n -> (fstn_stream n h) m = h m.
Lemma fstn_stream_None {A: Type}: forall n m (h: stream A), n <= m -> (fstn_stream n h) m = None.
Lemma fstn_stream_is_n_stream {A: Type}: forall n (h: stream A), is_at_least_n_stream n h -> is_n_stream n (fstn_stream n h).
Lemma fstn_stream_eq {A: Type}: forall n (h: stream A), is_at_most_n_stream n h -> fstn_stream n h = h.
Lemma fstn_stream_is_fin_stream {A: Type}: forall n (h: stream A), is_fin_stream (fstn_stream n h).
Lemma skipn_stream_spec {A: Type}: forall n m (h: stream A), (skipn_stream n h) m = h (m + n).
Lemma skipn_stream_empty {A: Type}: forall n (h: stream A), is_at_most_n_stream n h -> skipn_stream n h = empty_stream.