La puerta Controlled NOT (CNOT) , combina la lógica de una puerta NOT cuántica con un condicional.
Al igual que el resto de puertas controladas, existe un cubit que actúa de control y otro de objetivo. El de control determina si aplicar o no la puerta al objetivo, en este caso aplicando un NOT si el valor del primer cubit es 1.
Su representación matricial es la siguiente:
C N O T = [ 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 ] CNOT=\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0\\
\end{bmatrix}
CNOT = 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
La puerta r t r^t r t genera un estado aleatorio que cambia según el tiempo.
Se desarrollan pruebas matemáticas de la aplicación de la puerta CNOT en cubits en estado de superposición.
C N O T ∣ + + ⟩ = C N O T 1 2 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) = C N O T 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 10 ⟩ + ∣ 11 ⟩ ) = 1 2 ( C N O T ∣ 00 ⟩ + C N O T ∣ 01 ⟩ + C N O T ∣ 10 ⟩ + C N O T ∣ 11 ⟩ ) = 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 11 ⟩ + ∣ 10 ⟩ ) = 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 10 ⟩ + ∣ 11 ⟩ ) = 1 2 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) = 1 2 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ 1 2 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) = ∣ + ⟩ ⊗ ∣ + ⟩ = ∣ + + ⟩ \begin{align}
CNOT\ket{++}=& CNOT\frac{1}{2}\left((\ket{0}+\ket{1})\otimes(\ket{0}+\ket{1})\right)\\
=& CNOT\frac{1}{2}\left(\ket{00}+\ket{01}+\ket{10}+\ket{11}\right)\\
=&\frac{1}{2}\left(CNOT\ket{00}+CNOT\ket{01}+CNOT\ket{10}+CNOT\ket{11}\right)\\
=&\frac{1}{2}\left(\ket{00}+\ket{01}+\ket{11}+\ket{10}\right)\\
=&\frac{1}{2}\left(\ket{00}+\ket{01}+\ket{10}+\ket{11}\right)\\
=&\frac{1}{2}\left((\ket{0}+\ket{1})\otimes(\ket{0}+\ket{1})\right)\\
=&\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})\otimes\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})\\
=&\ket{+}\otimes\ket{+}\\
=&\ket{++}
\end{align}
CNOT ∣ + + ⟩ = = = = = = = = = CNOT 2 1 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) CNOT 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 10 ⟩ + ∣ 11 ⟩ ) 2 1 ( CNOT ∣ 00 ⟩ + CNOT ∣ 01 ⟩ + CNOT ∣ 10 ⟩ + CNOT ∣ 11 ⟩ ) 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 11 ⟩ + ∣ 10 ⟩ ) 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ + ∣ 10 ⟩ + ∣ 11 ⟩ ) 2 1 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) 2 1 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ 2 1 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ∣ + ⟩ ⊗ ∣ + ⟩ ∣ + + ⟩ C N O T ∣ + − ⟩ = C N O T 1 2 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) = C N O T 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 10 ⟩ − ∣ 11 ⟩ ) = 1 2 ( C N O T ∣ 00 ⟩ − C N O T ∣ 01 ⟩ + C N O T ∣ 10 ⟩ − C N O T ∣ 11 ⟩ ) = 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 11 ⟩ − ∣ 10 ⟩ ) = 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 10 ⟩ + ∣ 11 ⟩ ) = 1 2 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) = 1 2 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ 1 2 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) = ∣ − ⟩ ⊗ ∣ − ⟩ = ∣ − − ⟩ \begin{align}
CNOT\ket{+-}=& CNOT\frac{1}{2}\left((\ket{0}+\ket{1})\otimes(\ket{0}-\ket{1})\right)\\
=& CNOT\frac{1}{2}\left(\ket{00}-\ket{01}+\ket{10}-\ket{11}\right)\\
=&\frac{1}{2}\left(CNOT\ket{00}-CNOT\ket{01}+CNOT\ket{10}-CNOT\ket{11}\right)\\
=&\frac{1}{2}\left(\ket{00}-\ket{01}+\ket{11}-\ket{10}\right)\\
=&\frac{1}{2}\left(\ket{00}-\ket{01}-\ket{10}+\ket{11}\right)\\
=&\frac{1}{2}\left((\ket{0}-\ket{1})\otimes(\ket{0}-\ket{1})\right)\\
=&\frac{1}{\sqrt{2}}(\ket{0}-\ket{1})\otimes\frac{1}{\sqrt{2}}(\ket{0}-\ket{1})\\
=&\ket{-}\otimes\ket{-}\\
=&\ket{--}
\end{align}
CNOT ∣ + − ⟩ = = = = = = = = = CNOT 2 1 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) CNOT 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 10 ⟩ − ∣ 11 ⟩ ) 2 1 ( CNOT ∣ 00 ⟩ − CNOT ∣ 01 ⟩ + CNOT ∣ 10 ⟩ − CNOT ∣ 11 ⟩ ) 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 11 ⟩ − ∣ 10 ⟩ ) 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 10 ⟩ + ∣ 11 ⟩ ) 2 1 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) 2 1 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ 2 1 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ∣ − ⟩ ⊗ ∣ − ⟩ ∣ − − ⟩ C N O T ∣ − + ⟩ = C N O T 1 2 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) = C N O T 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 10 ⟩ − ∣ 11 ⟩ ) = 1 2 ( C N O T ∣ 00 ⟩ + C N O T ∣ 01 ⟩ − C N O T ∣ 10 ⟩ − C N O T ∣ 11 ⟩ ) = 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 11 ⟩ − ∣ 10 ⟩ ) = 1 2 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 10 ⟩ − ∣ 11 ⟩ ) = 1 2 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) = 1 2 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ 1 2 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) = ∣ − ⟩ ⊗ ∣ + ⟩ = ∣ − + ⟩ \begin{align}
CNOT\ket{-+}=& CNOT\frac{1}{2}\left((\ket{0}-\ket{1})\otimes(\ket{0}+\ket{1})\right)\\
=& CNOT\frac{1}{2}\left(\ket{00}+\ket{01}-\ket{10}-\ket{11}\right)\\
=&\frac{1}{2}\left(CNOT\ket{00}+CNOT\ket{01}-CNOT\ket{10}-CNOT\ket{11}\right)\\
=&\frac{1}{2}\left(\ket{00}+\ket{01}-\ket{11}-\ket{10}\right)\\
=&\frac{1}{2}\left(\ket{00}+\ket{01}-\ket{10}-\ket{11}\right)\\
=&\frac{1}{2}\left((\ket{0}-\ket{1})\otimes(\ket{0}+\ket{1})\right)\\
=&\frac{1}{\sqrt{2}}(\ket{0}-\ket{1})\otimes\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})\\
=&\ket{-}\otimes\ket{+}\\
=&\ket{-+}
\end{align}
CNOT ∣ − + ⟩ = = = = = = = = = CNOT 2 1 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) CNOT 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 10 ⟩ − ∣ 11 ⟩ ) 2 1 ( CNOT ∣ 00 ⟩ + CNOT ∣ 01 ⟩ − CNOT ∣ 10 ⟩ − CNOT ∣ 11 ⟩ ) 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 11 ⟩ − ∣ 10 ⟩ ) 2 1 ( ∣ 00 ⟩ + ∣ 01 ⟩ − ∣ 10 ⟩ − ∣ 11 ⟩ ) 2 1 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ) 2 1 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ 2 1 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ∣ − ⟩ ⊗ ∣ + ⟩ ∣ − + ⟩ C N O T ∣ − − ⟩ = C N O T 1 2 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) = C N O T 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 10 ⟩ + ∣ 11 ⟩ ) = 1 2 ( C N O T ∣ 00 ⟩ − C N O T ∣ 01 ⟩ − C N O T ∣ 10 ⟩ + C N O T ∣ 11 ⟩ ) = 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 11 ⟩ + ∣ 10 ⟩ ) = 1 2 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 10 ⟩ − ∣ 11 ⟩ ) = 1 2 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) = 1 2 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ 1 2 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) = ∣ + ⟩ ⊗ ∣ − ⟩ = ∣ + − ⟩ \begin{align}
CNOT\ket{--}=& CNOT\frac{1}{2}\left((\ket{0}-\ket{1})\otimes(\ket{0}-\ket{1})\right)\\
=& CNOT\frac{1}{2}\left(\ket{00}-\ket{01}-\ket{10}+\ket{11}\right)\\
=&\frac{1}{2}\left(CNOT\ket{00}-CNOT\ket{01}-CNOT\ket{10}+CNOT\ket{11}\right)\\
=&\frac{1}{2}\left(\ket{00}-\ket{01}-\ket{11}+\ket{10}\right)\\
=&\frac{1}{2}\left(\ket{00}-\ket{01}+\ket{10}-\ket{11}\right)\\
=&\frac{1}{2}\left((\ket{0}+\ket{1})\otimes(\ket{0}-\ket{1})\right)\\
=&\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})\otimes\frac{1}{\sqrt{2}}(\ket{0}-\ket{1})\\
=&\ket{+}\otimes\ket{-}\\
=&\ket{+-}
\end{align}
CNOT ∣ − − ⟩ = = = = = = = = = CNOT 2 1 ( ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) CNOT 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 10 ⟩ + ∣ 11 ⟩ ) 2 1 ( CNOT ∣ 00 ⟩ − CNOT ∣ 01 ⟩ − CNOT ∣ 10 ⟩ + CNOT ∣ 11 ⟩ ) 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ − ∣ 11 ⟩ + ∣ 10 ⟩ ) 2 1 ( ∣ 00 ⟩ − ∣ 01 ⟩ + ∣ 10 ⟩ − ∣ 11 ⟩ ) 2 1 ( ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ) 2 1 ( ∣ 0 ⟩ + ∣ 1 ⟩ ) ⊗ 2 1 ( ∣ 0 ⟩ − ∣ 1 ⟩ ) ∣ + ⟩ ⊗ ∣ − ⟩ ∣ + − ⟩ from qiskit import QuantumCircuit
qc. cx ( 0 , 1 ) # condicion en 0, objetivo en 1
La puerta Toffoli cuántica, también conocida como CCNOT , lleva su nombre en honor a Tomasso Toffoli . Es una extensión de la puerta CNOT que utiliza dos cubits de control y un cubit objetivo. Su funcionamiento es equivalente a la puerta Toffoli lógica en los casos de que los cubits sean 0 o 1, pero difiere en estados de superposición.
Su representación matricial es la siguiente:
T o f f o l i = [ 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 ] Toffoli=\begin{bmatrix}
1&0&0&0&0&0&0&0\\
0&1&0&0&0&0&0&0\\
0&0&1&0&0&0&0&0\\
0&0&0&1&0&0&0&0\\
0&0&0&0&1&0&0&0\\
0&0&0&0&0&1&0&0\\
0&0&0&0&0&0&0&1\\
0&0&0&0&0&0&1&0\\
\end{bmatrix}
T o ff o l i = 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0
La puerta Toffoli puede ser generalizada para múltiples cubits de control y múltiples cubits objetivo. En este caso, la puerta aplica un NOT a el/los cubit/s objetivo solo si todos los cubits de control están en el estado ∣ 1 ⟩ \ket{1} ∣ 1 ⟩ .
Los puntos negros representan que la puerta se activa con 1, mientras que los puntos blancos o sin relleno implican que la puerta se activa con 0.
from qiskit import QuantumCircuit
from qiskit.circuit.library import CXGate
qc. append ( toff ,[ 0 , 2 , 1 ] ) # condicion en 0 y 2, objetivo en 1
qc. append ( toff ,[ 0 , 1 , 2 ] ) # condicion en 0 y 1, objetivo en 2