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_app (str : list tau) (str2 str3 : list sig) :
surjectSymbols str = str2 ++ str3 ->
exists (str' str'' : list tau),
str = str' ++ str'' /\
surjectSymbols str'  = str2 /\
surjectSymbols str'' = str3.