  We introduce a new paradigm for analysing and finding bugs in quantum
circuits. In our approach, the problem is given by a triple $\{P\}\,C\,\{Q\}$
and the question is whether, given a set $P$ of quantum states on the input of
a circuit $C$, the set of quantum states on the output is equal to (or included
in) a set $Q$. While this is not suitable to specify, e.g., functional
correctness of a quantum circuit, it is sufficient to detect many bugs in
quantum circuits. We propose a technique based on tree automata to compactly
represent sets of quantum states and develop transformers to implement the
semantics of quantum gates over this representation. Our technique computes
with an algebraic representation of quantum states, avoiding the inaccuracy of
working with floating-point numbers. We implemented the proposed approach in a
prototype tool and evaluated its performance against various benchmarks from
the literature. The evaluation shows that our approach is quite scalable, e.g.,
we managed to verify a large circuit with 40 qubits and 141,527 gates, or catch
bugs injected into a circuit with 320 qubits and 1,758 gates, where all tools
we compared with failed. In addition, our work establishes a connection between
quantum program verification and automata, opening new possibilities to exploit
the richness of automata theory and automata-based verification in the world of
quantum computing.
