  Synchronous modeling is at the heart of programming languages like Lustre,
Esterel, or Scade used routinely for implementing safety critical control
software, e.g., fly-by-wire and engine control in planes. However, to date
these languages have had limited modern support for modeling uncertainty --
probabilistic aspects of software's environment or behavior -- even though
modeling uncertainty is a primary activity when designing a control system.
  In this paper we present ProbZelus the first synchronous probabilistic
programming language. ProbZelus conservatively provides the facilities of a
synchronous language to write control software, with probabilistic constructs
to model uncertainties and perform inference-in-the-loop.
  We present the design and implementation of the language. We propose a
measure-theoretic semantics of probabilistic stream functions and a simple type
discipline to separate deterministic and probabilistic expressions. We
demonstrate a semantics-preserving compilation into a first-order functional
language that lends itself to a simple presentation of inference algorithms for
streaming models. We also redesign the delayed sampling inference algorithm to
provide efficient streaming inference. Together with an evaluation on several
reactive applications, our results demonstrate that ProbZelus enables the
design of reactive probabilistic applications and efficient, bounded memory
inference.
