(** _Remark_: For three mutually coinductive predicates, the constructors are [paco{n}_3_0], [paco{n}_3_1], and [paco{n}_3_2]. *)
(*Proving the safety thing*)
Context (X:Type)
(P: X -> X -> Prop).
CoInductive path x: Prop:=
| step x': path x' -> P x x' -> path x.
CoInductive stutter_path x: nat -> Prop :=
| step' n1 n2 x':  stutter_path x' n1 -> P x x' -> stutter_path x n2
| stutter n : stutter_path x n -> stutter_path x (S n).
Inductive path_gen path : X -> Prop :=
| _path_gen : forall x x', P x x' -> path x' -> path_gen path x.
Definition path' := paco1 path_gen.
Inductive stutterpath_gen (stutterpath : X -> nat -> Prop) : X -> nat -> Prop:=
| _stutterpath_step : forall n1 n2 x x', P x x' -> stutterpath x' n1 -> stutterpath_gen stutterpath x n2
| _stutterpath_stut : forall n x, stutterpath x n -> stutterpath_gen stutterpath x (S n).
Definition stutterpath' := paco2 stutterpath_gen.

(* Specifications: *)
Theorem theorem :
forall x n,
stutterpath' bot2 x n ->
path' bot1  x.