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

Lemma surject_cons (str : list tau) (str2 : list sig) (s : sig) :
surjectSymbols str = s :: str2 ->
exists (t : tau) (str' : list tau),
str = t :: str' /\
surject Retr_g def t = s /\
surjectSymbols str' = str2.