  Variational Quantum Circuits (VQCs), or the so-called quantum
neural-networks, are predicted to be one of the most important near-term
quantum applications, not only because of their similar promises as classical
neural-networks, but also because of their feasibility on near-term noisy
intermediate-size quantum (NISQ) machines. The need for gradient information in
the training procedure of VQC applications has stimulated the development of
auto-differentiation techniques for quantum circuits. We propose the first
formalization of this technique, not only in the context of quantum circuits
but also for imperative quantum programs (e.g., with controls), inspired by the
success of differentiable programming languages in classical machine learning.
In particular, we overcome a few unique difficulties caused by exotic quantum
features (such as quantum no-cloning) and provide a rigorous formulation of
differentiation applied to bounded-loop imperative quantum programs, its
code-transformation rules, as well as a sound logic to reason about their
correctness. Moreover, we have implemented our code transformation in OCaml and
demonstrated the resource-efficiency of our scheme both analytically and
empirically. We also conduct a case study of training a VQC instance with
controls, which shows the advantage of our scheme over existing
auto-differentiation for quantum circuits without controls.
