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 inject_surject (str : list tau) (str' : list sig) :
(forall t, t el str -> exists s, Retr_g t = Some s) ->
surjectSymbols str = str' ->
str = injectSymbols str'.