  We propose a new probabilistic programming language for the design and
analysis of cyber-physical systems, especially those based on machine learning.
Specifically, we consider the problems of training a system to be robust to
rare events, testing its performance under different conditions, and debugging
failures. We show how a probabilistic programming language can help address
these problems by specifying distributions encoding interesting types of
inputs, then sampling these to generate specialized training and test data.
More generally, such languages can be used to write environment models, an
essential prerequisite to any formal analysis. In this paper, we focus on
systems like autonomous cars and robots, whose environment at any point in time
is a 'scene', a configuration of physical objects and agents. We design a
domain-specific language, Scenic, for describing scenarios that are
distributions over scenes and the behaviors of their agents over time. As a
probabilistic programming language, Scenic allows assigning distributions to
features of the scene, as well as declaratively imposing hard and soft
constraints over the scene. We develop specialized techniques for sampling from
the resulting distribution, taking advantage of the structure provided by
Scenic's domain-specific syntax. Finally, we apply Scenic in a case study on a
convolutional neural network designed to detect cars in road images, improving
its performance beyond that achieved by state-of-the-art synthetic data
generation methods.
