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_capp_empty0 {A: Type}: forall (h: nat -> stream A),
is_empty_stream (h 0) ->
is_empty_stream (stream_capp h).