Section SurjectInject.
Variable (sig tau : Type).
Variable def : sig.
Variable retr : Retract sig tau.
Definition injectSymbols : list sig -> list tau := map Retr_f.
Definition surjectSymbols : list tau -> list sig := map (surject Retr_g def).

(* This can be easyly proven without induction. *)
Lemma surject_inject (str : list sig) (str' : list tau) :
injectSymbols str = str' ->
str = surjectSymbols str'.