We know that the CNOT gate together with arbitrary SU(2) gates can be used to perfectly implement arbitrary SU(4) gates with 3 applications of the CNOT.

I am using the Qiskit library and testing how different basis gates compare to the CNOT for different number of applications, when trying to approximate arbitrary SU(4) gates.

As expected, the CNOT gives fid=1.0 for 3 applications, around 0.99 for 2, 0.7 for 1, and 0.5 for 0 applications (the numbers change depending on the SU(4) you are trying to approximate, but the fidelity is always 1.0 when using 3 CNOTS).

My issue is that I'm getting similar results when I put in any SU(4) as my basis gate, even the identity (on two qubits). Its telling me that with 3 applications of the identity and arbitrary SU(2) gates, I can perfectly implement any SU(4) with no approximation error.

Is this an issue with Qiskit, or am I missing something? I thought that the two-qubit gate you use needs to be a universal two-qubit gate, such as the matrix given at the bottom of page two here.

I have changed the 'num_basis_gates()' method from the 'TwoQubitBasisDecomposer()' class in order to output the total fidelity for all applications of the basis gate (0,1,2 and 3), rather than just the maximum fidelity (I just removed the 'argmax[...] part from the return statement).

Thanks for any help

  • 2
    $\begingroup$ Your surprise is justified. The subset of $SU(4)$ that consists of unitaries with unit Schmidt rank is a subgroup that contains the identity and single qubit gates (more precisely, it contains $SU(2)\times SU(2)$). Therefore using single-qubit gates and identity we cannot construct a Schmidt rank $2$ gate such as CNOT. There is probably a software bug somewhere, either in qiskit or in the way you're using it. $\endgroup$ Commented Mar 19, 2021 at 18:10

1 Answer 1


The implementation currently available in TwoQubitBasisDecomposer assumes that the basis gate is supercontrolled (ie has Weyl coordinates $(\pi/4, \beta, 0)$) and it should have emitted a warning if you gave it a non-supercontrolled basis such as identity.

In [4]: id_decomp = TwoQubitBasisDecomposer(np.eye(4))
<ipython-input-4-5b01dc936099>:1: UserWarning: Only know how to decompose properly for supercontrolled basis gate. This gate is ~Ud(0.0, 0.0, 0.0)
  id_decomp = TwoQubitBasisDecomposer(np.eye(4))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.