Section Parks_Principle.
Variable A : Set.
Variable    R      : Stream A -> Stream A -> Prop.
Hypothesis  bisim1 : forall s1 s2:Stream A, R s1 s2 ->
head s1 = head s2.
Hypothesis  bisim2 : forall s1 s2:Stream A, R s1 s2 ->
R (tail s1) (tail s2).
CoFixpoint park_ppl     : forall s1 s2:Stream A, R s1 s2 ->
EqSt s1 s2 :=
fun s1 s2 (p : R s1 s2) =>
eqst s1 s2 (bisim1  p)
(park_ppl  (bisim2  p)).
End Parks_Principle.
Ltac infiniteproof f :=
cofix f; constructor; [clear f| simpl; try (apply f; clear f)].

Theorem map_iterate' : forall (A:Set)(f:A->A)(x:A),
EqSt (iterate f (f x)) (map f (iterate f x)).