# How to decompose unitary quantum gate in current simulator or emulator?

I have a question about how to decompose a unitary quantum gate in a currently existing simulator or emulator. I have read some papers about SK algorithm and other algorithms which aim to decompose unitary quantum gates. Is there any specific method to decompose a quantum gate in a currently existing simulator? Some papers about decomposition methods mention Trotter-Suzuki decomposition but I don't exactly know if this is true? To be more specific, what is the decomposition algorithm in Qiskit or Project Q?

In Qiskit, the iso() function allows you to add a gate, defined by means of a unitary, to your quantum circuit:

https://qiskit.org/documentation/stubs/qiskit.circuit.QuantumCircuit.iso.html

The decomposition used in the iso() function was introduced by Iten et al. in https://arxiv.org/abs/1501.06911.

Of course this is related to the circuit, not to the backend (which can be real or simulated).

• So all the simulator or emulator decompose a unitary gate in that way? I mean, the decomposion strategy is same in existing simulators or emulators or it is depend on specific simulators or emulators? Thx – Henry_Fordham Jun 9 at 12:14
• In Qiskit, you may either build the circuit from the scratch by adding gates, or by providing the unitary matrix of the circuit and decompose it using iso(). As I wrote in my answer, decomposition is independent on whether you want to run the circuit on a real backend or in a simulated one. Once you have the decomposition, then you choose the backend. – Michele Amoretti Jun 9 at 12:18
• So after decompose it into CNOT and single qubit gate as the paper mentioned. How to decompose the single qubit gate into universal quantum gates set? like Clifford +T, Thx – Henry_Fordham Jun 9 at 14:01
• Usually, you choose the universal quantum gate set depending on the backend you are using. For IBM Q backends, the most general single qubit gate is $U_3$ (qiskit.org/textbook/ch-states/…). In Qiskit, to compile your circuit using specific gates (e.g., CNOT and $U_3$), you need to use the transpile() function: qiskit.org/documentation/stubs/qiskit.compiler.transpile.html – Michele Amoretti Jun 9 at 14:16
• So, the universal quantum gates {Clifford +T} is not commonly used in any backend or simulated one anymore, right? I read the reference you sent, one U3 gate seems can represent any single qubit gate, However, in SK algorithm, by running the C++ code, the H and T gate grow exponentially. so if the basic gate set canbe {U3 and CNOT}, why we need {Clifford+T},like in SK-algorithm or some of its optimization. – Henry_Fordham Jun 9 at 15:07