Notation Stream := (Stream A).(** Streams *)

CoInductive Stream (A : Type) :=
  Cons : A -> Stream A -> Stream A.Definition hd (x:Stream) := match x with
                            | Cons a _ => a
                            end.Definition tl (x:Stream) := match x with
                            | Cons _ s => s
                            end.Fixpoint Str_nth_tl (n:nat) (s:Stream) : Stream :=
  match n with
  | O => s
  | S m => Str_nth_tl m (tl s)
  end.Definition Str_nth (n:nat) (s:Stream) : A := hd (Str_nth_tl n s).

Lemma Str_nth_tl_plus : forall (n m:nat) (s:Stream), Str_nth_tl n (Str_nth_tl m s) = Str_nth_tl (n + m) s.