Definition reduction_reach_rewrite (p: conf * conf) :=
      let (c1,c2) := p in (TMrules, mk_srconf c1, mk_srconf c2).(** ** SR with finite types to SR *)

Definition trans_R (Sigma : finType) (R : srs Sigma) :=
  map (fun '(x,y) => (map (@index Sigma) x, map (@index Sigma) y)) R.

(* Specifications: *)
Lemma red_rew (Sigma : finType) (R : srs Sigma) (x0 y : list Sigma) : rew' R x0 y <-> rew (trans_R R) (map (index (X:=Sigma)) x0) (map (index (X:=Sigma)) y).
Lemma rew_inv (Sigma : finType) (R : srs Sigma) (x0 : list Sigma) y' : rew (trans_R R) (map (index (X:=Sigma)) x0) y' -> exists y, y' = (map (index (X:=Sigma)) y).
Lemma nrewt_ind_left : forall (R : SRS) s (P : string -> Prop), (P s) -> (forall y z : string, rewt R s y -> rew R y z -> P y -> P z) -> forall s0 : string, rewt R s s0 -> P s0.
Lemma rewt_inv (Sigma : finType) (R : srs Sigma) (x0 : list Sigma) y' : rewt (trans_R R) (map (index (X:=Sigma)) x0) y' -> exists y, y' = (map (index (X:=Sigma)) y) /\ rewt' R x0 y.
Lemma red_rewt (Sigma : finType) (R : srs Sigma) (x0 y : list Sigma) : rewt' R x0 y <-> rewt (trans_R R) (map (index (X:=Sigma)) x0) (map (index (X:=Sigma)) y).