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)].
infiniteproof map_iterate'.
reflexivity.
Qed.
Arguments LNil [A].
intros;discriminate.
Qed.

Lemma injection_demo : forall (A:Set)(a b : A)(l l': LList A),
LCons a (LCons b l) = LCons b (LCons a l') ->
a = b /\ l = l'.