(** ** SR with finite types to SR *)

(* 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).
Lemma reduction : SR_fin ⪯ SR.
Definition SRH' '(Rs, x, A) := exists y, rewt Rs x y /\ exists a, a el A /\ a el y.