Let us argue why we believe \((i)\)  and \((ii)\)  are
indeed limitations. First of all, if a specification is not
realizable by a synchronous transducer, then a classical synthesis algorithm stops with a negative
answer. However, the specification could be realizable in a larger
class of implementations \(\mathcal {I}\) . As an example, if \(S\)  is the
set of words \(i_0o_0\dots \)  such that \(o_\ell = i_{\ell +1}\) , then \(S\) 
is not realizable synchronously because it is impossible to produce
\(o_\ell \)  before knowing \(i_{\ell +1}\) . But this specification is
realizable by a program which can delay its output
production by one time unit. Enlarging the class of implementations can
therefore allow one to give finer answers to the synthesis problem in cases
where the specification is not synchronously realizable. We refer to
this type of relaxations as asynchronous
implementations. An asynchronous implementation can be
modelled in automata-theoretic terms as a transducer which, whenever
it reads an input \(i\in \Sigma \) , produces none or several outputs,
i.e. a finite word \(u\in \Gamma ^*\) . Generalizations of reactive
system synthesis to asynchronous implementations have been
considered in
[1]}, [2]}, [3]}. In
these works however,
the specification is still synchronous, given by an automaton which
strictly alternates between reading input and output
symbols. Here, we also assume that specifications are asynchronous, as it gives more flexibility in the relations that can be expressed. For instance, one can specify that some response has to be delayed, or, when transforming of data streams, allow for erasure and/or duplication of some data values.
