  Reactive synthesis builds a system from a specification given as a temporal
logic formula. Traditionally, reactive synthesis is defined for systems with
Boolean input and output variables. Recently, new theories and techniques have
been proposed to extend reactive synthesis to data domains, which are required
for more sophisticated programs. In particular, Temporal stream logic(TSL)
(Finkbeiner et al. 2019) extends LTL with state variables, updates, and
uninterpreted functions and was created for use in synthesis. We present a
synthesis procedure for TSL(T), an extension of TSL with theories. Synthesis is
performed using a counter-example guided synthesis loop and an LTL synthesis
procedure. Our method translates TSL(T) specifications to LTL and extracts a
system if synthesis is successful. Otherwise, it analyzes the counterstrategy
for inconsistencies with the theory. If the counterstrategy is
theory-consistent, it proves that the specification is unrealizable. Otherwise,
we add temporal assumptions and Boolean predicates to the TSL(T) specification
and start the next iteration of the the loop. We show that the synthesis
problem for TSL (T) is undecidable. Nevertheless our method can successfully
synthesize or show unrealizability of several non-Boolean examples.
