Inductive refl_trans_n1_trace (step : step_relation) : step_relation :=
  | RTn1TBase : forall x, refl_trans_n1_trace step x x []
  | RTn1TStep : forall x x' x'' cs cs',
                  refl_trans_n1_trace step x x' cs ->
                  step x' x'' cs' ->
                  refl_trans_n1_trace step x x'' (cs ++ cs').Inductive refl_trans_n1_trace (step : step_relation) : step_relation :=
  | RTn1TBase : forall x, refl_trans_n1_trace step x x []
  | RTn1TStep : forall x x' x'' cs cs',
                  refl_trans_n1_trace step x x' cs ->
                  step x' x'' cs' ->
                  refl_trans_n1_trace step x x'' (cs ++ cs').Inductive refl_trans_n1_trace (step : step_relation) : step_relation :=
  | RTn1TBase : forall x, refl_trans_n1_trace step x x []
  | RTn1TStep : forall x x' x'' cs cs',
                  refl_trans_n1_trace step x x' cs ->
                  step x' x'' cs' ->
                  refl_trans_n1_trace step x x'' (cs ++ cs').

(* Specifications: *)
Lemma RTn1_step : forall (step : step_relation) x y z l l', step x y l -> refl_trans_n1_trace step y z l' -> refl_trans_n1_trace step x z (l ++ l').
Lemma refl_trans_1n_n1_trace : forall step x y l, refl_trans_1n_trace step x y l -> refl_trans_n1_trace step x y l.
Lemma RT1n_step : forall (step : step_relation) x y z l l', refl_trans_1n_trace step x y l -> step y z l' -> refl_trans_1n_trace step x z (l ++ l').
Lemma refl_trans_n1_1n_trace : forall step x y l, refl_trans_n1_trace step x y l -> refl_trans_1n_trace step x y l.
Lemma refl_trans_1n_trace_n1_ind : forall (step : step_relation) (P : A -> A -> list trace -> Prop), (forall x, P x x []) -> (forall x x' x'' tr1 tr2, refl_trans_1n_trace step x x' tr1 -> step x' x'' tr2 -> P x x' tr1 -> refl_trans_1n_trace step x x'' (tr1 ++ tr2) -> P x x'' (tr1 ++ tr2)) -> forall x y l, refl_trans_1n_trace step x y l -> P x y l.
Theorem true_in_reachable_elim : forall (step : step_relation) init (P : A -> Prop), true_in_reachable step init P -> (P init) /\ (forall a a' out, step a a' out -> reachable step init a -> P a -> P a').