Program Definition stream_capp {A: Type} (h: nat -> stream A): stream A :=
fun n: nat =>
match partial_stream_clen' h n return option A with
| Some (k, m) => h k m
| None => None
end.
Next Obligation.
assert (x <= y) by omega; clear H.
rewrite partial_stream_clen'_None_iff in H0 |- *.
induction H1; auto.
clear H0 H1 x.
Opaque partial_stream_clen.
simpl.
Transparent partial_stream_clen.
destruct (partial_stream_clen h (S m)) as [k n].
rewrite IHle.
destruct (h k n); auto.
Qed.

Lemma stream_map_stream_capp {A B: Type}: forall (f: A -> B) (h: nat -> stream A),
stream_map f (stream_capp h) = stream_capp (fun n => stream_map f (h n)).