# How to implement general 2-qubit gate in n-qubit system?

I am trying to implement a general 2-qubit gate in an n-qubit system (not using qiskit or cirq). Example: Consider 4 qubits. Assume we want to act a CX on qubit 2 as control and qubit 3 as target. The right implementation would be $$I \otimes CX \otimes I$$ (most significant qubit is left-most). For two neighboring qubits it will always be a tensor product. How would you implement a CX gate if we wanted to act it, let's say, on qubit 1 as control and qubit 3 as target? I'm assuming it's playing around with the projectors, but I was hoping there is a systematic way of doing it, especially since I need to do this for an n-qubit system.

• Depends on what you want precisely. For example one way is to insert SWAPs and use the tensor product rule you described. Another way is to view your quantum circuit as a tensor with multiple legs and perform tensor contraction with the gate legs. Dec 27, 2021 at 18:58
• Are you asking about how to show the matrix representation? Dec 28, 2021 at 15:38
• @RonCohen yes. How would you represent a matrix operator including an arbitrary 2-qubit gate (4-by-4 matrix) acting on any 2 qubits in an n-qubit system? Dec 28, 2021 at 17:17
• @gquant it is legal to write things like $X_3\otimes X_1$ , it is also common to represent CNOT act from Q0 to Q1 as $CNOT_0_1$ so you can write in your example $I_1 \otimes I_3 \otimes CNOT_0_2$. is this helpful? Dec 29, 2021 at 6:55

$$\begin{matrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \end{matrix}$$
which you can brutally generate by checking which of the states get mapped to which other ones (for ex. $$0000\rightarrow0000$$, $$1100\rightarrow1101$$, $$1101\rightarrow1100$$ etc.)