En este artículo, vamos a ver la teletransportación cuántica usando Python.
¿Cuántas veces los episodios de Rick y Morty han comenzado sus historias a través de Rick y Morty caminando a través de su portal hacia alguna dimensión alternativa loca? Si no fuera por el portal, es posible que no hubiéramos tenido el programa de televisión animado favorito de todos. Pero, ¿alguna vez has pensado en cómo funciona ese portal? De eso es de lo que estaremos hablando hoy Teletransportación Cuántica.
¿Cuál es la necesidad de la teletransportación cuántica?
Aparte del hecho de que sería completamente increíble? Bueno, como ya sabemos, las computadoras cuánticas no son realmente similares a las computadoras clásicas. Una de esas diferencias entre los dos es la copia de datos. Si necesita copiar la tarea de su amigo, todo lo que debe hacer es hacer clic en los datos y hacer una copia, ¿verdad? Bueno, lo que pasa con los bits cuánticos es que permanecen en el estado cuántico hasta que pasan desapercibidos. Tan pronto como los observamos (o hacemos clic) en ellos, colapsan a uno de los estados conocidos. Esto también se llama el teorema de no clonación . Por lo tanto, para copiar datos en una computadora cuántica, necesitamos el proceso de teletransportación cuántica. Sin embargo, con los avances tecnológicos, Quantum Teleportation ha pasado de ser una aplicación para transmisiones completamente seguras.
La teoría detrás del algoritmo.
Para simplificar, supongamos que hay dos amigos, Kartik y Sharanya. Sharanya quiere enviar algún tipo de datos cuánticos, posiblemente un qubit a Kartik. Como no puede observar cuál es el estado del qubit debido al teorema de no clonación, toma la ayuda del llamado «portal» para transferir los datos. Entonces, lo que básicamente hace el portal es crear un enredo entre un qubit de Sharanya y un qubit propio y envía el par enredado hacia Kartik. Luego, Kartik tendría que realizar algunas acciones para eliminar el enredo y recibir la salida.
Para aquellos de ustedes que no tienen mucha idea de lo que es Quantum Entanglement , en pocas palabras, establece que si algo le sucede a un qubit, podemos esperar que el otro qubit también tenga algún impacto, incluso si los dos los qubits no están cerca uno del otro. Además, otra cosa interesante a tener en cuenta por qué esto se llama teletransportación cuántica es que Sharanya ya no tiene exactamente el mismo qubit que tenía, que ahora está con Kartik.
Acercarse:
Paso 1: el portal crea un par entrelazado de Qubits, que es un par especial conocido como el par de Bell. Para crear un par de Bell usando Quantum Circuits, necesitamos tomar un qubit y convertirlo en el estado (|+> o |->) usando una puerta Hadamard y luego usando una puerta CNOT en el otro qubit, que será controlado por el primer qubit. Uno de los qubits se entrega a Sharanya (digamos Q1), el otro a Kartik (digamos Q2).
Paso 2: Digamos que el qubit que Sharanya quiere enviar es |Ψ> = |∝> + |β>. Necesita aplicar una puerta CNOT a Q1, controlada por |Ψ>. Una puerta CNOT es básicamente la condición ‘ si esto, entonces aquello’ del mundo cuántico.
Paso 3 : Sharanya toma una medida de los dos qubits que tiene y los almacena en dos bits clásicos. Luego envía esta información a Kartik (se puede hacer una transferencia ya que se están enviando bits clásicos). Dado que los qubits pueden manejar 2 n bits clásicos, podemos decir que los resultados que obtendrá Sharanya con su cálculo siempre serán una respuesta probabilística que contenga 00, 01, 10 y 11 (todas las permutaciones de 0 y 1).
Paso 4 : Ahora, todo lo que Kartik necesita hacer es realizar ciertas transformaciones en el qubit que tiene, Q2, que es parte de un par entrelazado. Esta parte proviene de la Mecánica Cuántica, por lo que puede saberlo como un hecho, o la complejidad del artículo aumentará múltiples veces. Entonces, si Kartik obtiene un 00, debe solicitar una puerta I. Para 01, se debe aplicar una puerta X, para 10, se debe aplicar una puerta Z y para 11, se debe aplicar una puerta ZX.
Y ahí lo tenemos. Kartik ahora tiene un qubit en el mismo estado en el que Sharanya tenía inicialmente su qubit.
Módulo necesario
Qiskit : Qiskit es un marco de código abierto para la computación cuántica. Proporciona herramientas para crear y manipular programas cuánticos y ejecutarlos en prototipos de dispositivos cuánticos en IBM Q Experience o en simuladores en una computadora local. Veamos cómo podemos crear un circuito Quantum simple y probarlo en una computadora Quantum real o simularlo en nuestra computadora localmente
Instalación
pip install qiskit
Implementación paso a paso
Paso 1: Crear el Circuito Cuántico en el que realizaremos operaciones.
QuantumCircuit toma en 2 argumentos, la cantidad de qubits que queremos tomar y la cantidad de bits clásicos que queremos tomar.
Python
from qiskit import * circuit = QuantumCircuit(3, 3) %matplotlib inline # Whenever during any point of the program we # want to see how our circuit looks like, # this is what we will be doing. circuit.draw(output='mpl')
Producción:
Así es como se ve nuestro circuito en este momento. Disponemos de 3 bits cuánticos y 3 bits clásicos, que nos servirán para medir los valores de estos Qubits, cuando queramos. Ahora mismo no tienen ningún valor en ellos.
Paso 2: Aplicar una puerta X en el qubit que tenemos que teletransportar. También agregaremos una barrera, solo para que el circuito sea más claro.
Ahora aquí, lo que hemos hecho hasta ahora es que tenemos 3 qubits. Lo que haremos es usar q1 para transportar datos de q0 a q3. Para esto, usaremos una puerta X para iniciar q0 a 1 estado
Python
circuit.x(0) # used to apply an X gate. # This is done to make the circuit look more # organized and clear. circuit.barrier() circuit.draw(output='mpl')
Producción:
Así es como se ve nuestro circuito en este momento. En uno de los Qubits, hemos agregado una puerta X, que se muestra con la X. Se agrega una barrera para que el circuito esté más organizado a medida que seguimos agregando puertas y otras cosas. Los bits clásicos aún están intactos.
Paso 3: Crear entrelazamiento entre Q1 y Q2 aplicando una puerta Hadamard en Q1 y una puerta CX en Q1 y Q2 de tal manera que el comportamiento de Q1 afecte el comportamiento de Q2.
Aquí, lo que haremos es crear un entrelazamiento para que el comportamiento del primer qubit afecte el comportamiento del segundo qubit.
Python
# This is how we apply a Hadamard gate on Q1. circuit.h(1) # This is the CX gate, which takes two parameters, # one being the control qubit and the # other being the target qubit. circuit.cx(1, 2) circuit.draw(output='mpl')
Producción:
Aquí podemos ver que después de este paso, así queda nuestro circuito. Tenemos una puerta Hadamard aplicada a Q1, que se muestra con el símbolo ‘H’, y una puerta NOT (CX) controlada en Q1 y Q2. Los bits clásicos aún están intactos.
Crear entrelazamiento entre Q0 y Q1 aplicando una puerta Hadamard en Q0 y una puerta CX en Q0 y Q1 de tal manera que el comportamiento de Q1 afecta el comportamiento de Q0. Básicamente, tenemos un sistema en el que el comportamiento de cualquiera de los Qubits afectará el comportamiento de todos los Qubits. Q1 puede considerarse como el portal del que hablamos anteriormente. Ahora también proyectaremos los Qubits en los bits clásicos y mediremos los valores de Q0 y Q1.
Python
# The next step is to create a controlled # gate between qubit 0 and qubit 1. # Also we will be applying a Hadamard gate to q0. circuit.cx(0, 1) circuit.h(0) # Done for clarification of the circuit again. circuit.barrier() # the next step is to do the two measurements # on q0 and q1. circuit.measure([0, 1], [0, 1]) # circuit.measure can take any number of arguments, # and has the following parameters: # [qubit whos value is to be measured, # classical bit where the value is stored] circuit.draw(output='mpl')
Producción:
Aquí podemos ver cómo queda nuestro circuito. Con la ayuda de las barreras, puede distinguir fácilmente lo que se hizo en este paso. Tenemos una puerta Hadamard aplicada a Q0, que se muestra con el símbolo ‘H’, y una puerta NOT (CX) controlada en Q0 y Q1. Los bits clásicos ahora se ponen en uso, con los símbolos negros que muestran que hemos tomado el valor de Q0 y Q1 y lo hemos almacenado en el bit clásico 1 y el bit clásico 2.
La explicación real requerirá una comprensión de la mecánica cuántica, por lo que uno puede entender que para una medición 00 de los bits clásicos, necesitamos aplicar una puerta I. Para 01, se debe aplicar una puerta X, para 10, se debe aplicar una puerta Z y para 11, se debe aplicar una puerta ZX. Dado que no sabemos qué valor se almacenará en los bits clásicos, estamos aplicando las puertas de control X y las puertas de control Z más generalizadas.
El último paso es agregar dos puertas más, una puerta x controlada y una puerta z controlada (hemos hablado de este paso en el texto anterior, que indica qué puertas aplicar para diferentes medidas).
Python
circuit.barrier() circuit.cx(1, 2) circuit.cz(0, 2) circuit.draw(output='mpl')
Producción:
Este es el último circuito requerido para la teletransportación cuántica. Después de la barrera, podemos ver que se ha aplicado una puerta Controlled X en Q1 y Q2, de modo que el comportamiento de Q2 afecta el comportamiento de Q1. Además, se ha aplicado una puerta Control Z como se muestra entre Q0 y Q2.
Ahora que se ha creado nuestro circuito, todo lo que tenemos que hacer es pasar ese circuito a un simulador para que podamos recuperar los resultados del circuito. Una vez que recibimos los resultados, estamos trazando un histograma a partir de los valores de los bits clásicos que hemos recibido. Puede pensar en lo que hayamos hecho ahora como un tipo de datos abstracto creado por nosotros, y el código a continuación es la función principal donde lo pondremos en uso. Cada paso se ha explicado con todo detalle para facilitar la comprensión del lector.
Python
# The first step is to call a simulator # which we will use to perform simulations. from qiskit.tools.visualization import plot_histogram sim = Aer.get_backend('qasm_simulator') # here, like before, we have given the # classical bit 2 the value of the Quantum bit 2. circuit.measure(2, 2) # Now, we run the execute function, # which takes our quantum circuit, # the backend which we are using and # the number of shots we want # (shots are to increase accuracy and # mitigate errors in Quantum Computing). # All of this is stored in a variable called result result = execute(circuit, backend=sim, shots=1000).result() counts = result.get_counts() # This counts variable shows that for each possible combination, # how many times the circuit gave a similar output # (for example, 111 came x times, 101 came y times etc.) # importing plot_histogram which will help us visualize the results. plot_histogram(counts)
Producción:
¿Cómo prueba esto que nuestro algoritmo funcionó?
Bueno, vamos a ver aquí. Para 3 qubits, podemos tener estados como 100, 101, 111, 001, etc. (8 de ellos para ser precisos, cosas básicas de P&C). Ahora, si tomo un valor del eje x, se lee de la siguiente manera:
[100] = [Valor almacenado en el bit clásico 2, valor almacenado en el bit clásico 1, valor almacenado en el bit clásico 0]
Dijimos que produciremos el mismo estado en el primer qubit en el segundo qubit. El estado en el primer qubit (el que tenía Sharanya (Q0)) era 1, y mira aquí, solo hemos recibido las permutaciones, donde el valor del segundo bit clásico es 1, lo que prueba que el valor en el segundo qubit (el que tenía Kartik (Q2)) ¡también era 1!
Publicación traducida automáticamente
Artículo escrito por kartikchinda y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA