End NatChoice.
End NatChoice.
Export NatChoice.

(* Specifications: *)
Lemma nat_coinduction {A: Type}: forall (P: A -> Prop) (R: A -> A -> Prop) a0,
P a0 ->
(forall a, P a -> exists b, R a b /\ P b) ->
exists l: nat -> A, l 0 = a0 /\ (forall k, R (l k) (l (S k))).
Lemma nat_coinduction' {A: Type}: forall (P: A -> Prop) (R: A -> A -> Prop) a0,
P a0 ->
(forall a, P a -> exists b, R a b /\ P b) ->
exists l: nat -> A, l 0 = a0 /\ (forall k, R (l k) (l (S k))) /\ (forall k, P (l k)).