  Quantum programs are notoriously difficult to code and verify due to
unintuitive quantum knowledge associated with quantum programming. Automated
tools relieving the tedium and errors associated with low-level quantum details
would hence be highly desirable. In this paper, we initiate the study of
program synthesis for quantum unitary programs that recursively define a family
of unitary circuits for different input sizes, which are widely used in
existing quantum programming languages. Specifically, we present QSynth, the
first quantum program synthesis framework, including a new inductive quantum
programming language, its specification, a sound logic for reasoning, and an
encoding of the reasoning procedure into SMT instances. By leveraging existing
SMT solvers, QSynth successfully synthesizes ten quantum unitary programs
including quantum adder circuits, quantum eigenvalue inversion circuits and
Quantum Fourier Transformation, which can be readily transpiled to executable
programs on major quantum platforms, e.g., Q#, IBM Qiskit, and AWS Braket.
