(** Infinitely many silent transitions *)
CoInductive forever_silent : state -> Prop :=
| forever_silent_intro: forall s1 s2,
step s1 E0 s2 -> forever_silent s2 ->
forever_silent s1.
(** An alternate definition. *)
CoInductive forever_silent_N : A -> state -> Prop :=
| forever_silent_N_star: forall s1 s2 a1 a2,
star s1 E0 s2 ->
order a2 a1 ->
forever_silent_N a2 s2 ->
forever_silent_N a1 s1
| forever_silent_N_plus: forall s1 s2 a1 a2,
plus s1 E0 s2 ->
forever_silent_N a2 s2 ->
forever_silent_N a1 s1.

(* Specifications: *)
Lemma forever_silent_N_inv:
forall a s,
forever_silent_N a s ->
exists s', exists a',
step s E0 s' /\ forever_silent_N a' s'.
Lemma forever_silent_N_forever:
forall a s, forever_silent_N a s -> forever_silent s.