Currently, circuit transpilation into single- and two-qubit gates does not transpile multi-controlled single-qubit rotations. For instance,
from qibo import Circuit, gates
nqubits = 4
theta = 0.1
circuit = Circuit(nqubits)
circuit.add(gates.GIVENS(2, 3, theta).controlled_by(0, 1))
circuit.draw()
print()
decomposed = circuit.decompose()
decomposed.draw()
returns
0: ─o─
1: ─o─
2: ─G─
3: ─G─
0: ─────o──o──────
1: ─────o──o──────
2: ─H─o─RY─|──o─H─
3: ───X────RY─X───
without transpiling the multi-controlled RY gates.
To transpile such gates, we would like to implement the techniques in Vale et al. (2023). More specifically, generic multi-controlled $\textrm{SU}(2)$ rotations should follow Lemma 1 and Theorem 1. Real-valued $\textrm{SU}(2)$ rotations should follow Lemma 2 and Theorem 2. Two-qubit gate complexities should respect the upper bounds stated in Theorems 3, 4, and 5.
The authors of the paper have their own open-source implementation in https://github.com/qclib/qclib, which could serve as inspiration for the independent implementation here.
Currently, circuit transpilation into single- and two-qubit gates does not transpile multi-controlled single-qubit rotations. For instance,
returns
without transpiling the multi-controlled
RYgates.To transpile such gates, we would like to implement the techniques in Vale et al. (2023). More specifically, generic multi-controlled$\textrm{SU}(2)$ rotations should follow Lemma 1 and Theorem 1. Real-valued $\textrm{SU}(2)$ rotations should follow Lemma 2 and Theorem 2. Two-qubit gate complexities should respect the upper bounds stated in Theorems 3, 4, and 5.
The authors of the paper have their own open-source implementation in https://github.com/qclib/qclib, which could serve as inspiration for the independent implementation here.