  In this paper, we propose Proq, a runtime assertion scheme for testing and
debugging quantum programs on a quantum computer. The predicates in Proq are
represented by projections (or equivalently, closed subspaces of the state
space), following Birkhoff-von Neumann quantum logic. The satisfaction of a
projection by a quantum state can be directly checked upon a small number of
projective measurements rather than a large number of repeated executions. On
the theory side, we rigorously prove that checking projection-based assertions
can help locate bugs or statistically assure that the semantic function of the
tested program is close to what we expect, for both exact and approximate
quantum programs. On the practice side, we consider hardware constraints and
introduce several techniques to transform the assertions, making them directly
executable on the measurement-restricted quantum computers. We also propose to
achieve simplified assertion implementation using local projection technique
with soundness guaranteed. We compare Proq with existing quantum program
assertions and demonstrate the effectiveness and efficiency of Proq by its
applications to assert two ingenious quantum algorithms, the
Harrow-Hassidim-Lloyd algorithm and Shor's algorithm.
