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_spec1 {A: Type}: forall (h: nat -> stream A) (m: nat),
is_at_least_n_stream (S m) (h 0) ->
stream_capp h m = h 0 m.