  Probabilistic programming combines general computer programming, statistical
inference, and formal semantics to help systems make decisions when facing
uncertainty. Probabilistic programs are ubiquitous, including having a
significant impact on machine intelligence. While many probabilistic algorithms
have been used in practice in different domains, their automated verification
based on formal semantics is still a relatively new research area. In the last
two decades, it has attracted much interest. Many challenges, however, remain.
The work presented in this paper, probabilistic relations, takes a step towards
our vision to tackle these challenges.
  Our work is based on Hehner's predicative probabilistic programming, but
there are several obstacles to the broader adoption of his work. Our
contributions here include (1) the formalisation of its syntax and semantics by
introducing an Iverson bracket notation to separate relations from arithmetic;
(2) the formalisation of relations using Unifying Theories of Programming (UTP)
and probabilities outside the brackets using summation over the topological
space of the real numbers; (3) the constructive semantics for probabilistic
loops using Kleene's fixed-point theorem; (4) the enrichment of its semantics
from distributions to subdistributions and superdistributions to deal with the
constructive semantics; (5) the unique fixed-point theorem to simplify the
reasoning about probabilistic loops; and (6) the mechanisation of our theory in
Isabelle/UTP, an implementation of UTP in Isabelle/HOL, for automated reasoning
using theorem proving.
  We demonstrate our work with six examples, including problems in robot
localisation, classification in machine learning, and the termination of
probabilistic loops.
