Program Definition stream_app {A: Type} (h1 h2: stream A): stream A :=
  fun n: nat =>
    match partial_stream_len h1 n return option A with
    | None => h1 n
    | Some m => h2 (n - m)
    end.

Lemma stream_map_stream_app {A B: Type}: forall (f: A -> B) (h1 h2: stream A), stream_map f (stream_app h1 h2) = stream_app (stream_map f h1) (stream_map f h2).