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').

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.