Codificación superdensa
La codificación superdensa es una aplicación simple de la mecánica cuántica elemental, ya que combina todas las ideas básicas de dicha rama, y es por lo tanto un ejemplo ideal de las tareas de procesamiento de la información que pueden llevarse a cabo mediante la mecánica cuántica. Se trata de un protocolo que adquiere un rol complementario a la Teleportación cuántica. La diferencia radica en que en lugar de permitir la transmisión de un cubit usando dos bits clásicos de comunicación (con el costo de un e-bit de entrelazamiento), permite la transmisión de dos bits cásicos usando un cubit de comunicación cuántica (también con el costo de un e-bit de entrelazamiento).
Protocolo
Sección titulada «Protocolo»La codificación superdensa involucra dos partes, conocidas tradicionalmente como ‘Alice’ y ‘Bob’, quienes se encuentran a una gran distancia uno de otro. Su objetivo es transmitir información clásica desde Alice hacia Bob. Supóngase que Alice posee dos bits clásicos de información que desea enviar a Bob, pero solamente tiene permitido enviarle un solo cubit. Clásicamente, Alice debería enviarle los dos bits a Bob, uno no sería suficiente porque solamente tiene dos estados o . Cuánticamente, dicha tarea puede resolverse utilizando un solo cubit mediante la codificación superdensa. Para esto, Alice y Bob deben compartir inicialmente un par de cubits en el siguiente estado de entrelazamiento:
Donde Alice posee el primer cubit y Bob posee el segundo cubit. Notar que es un estado fijo, por lo cual no hay necesidad de que Alice haya enviado a Bob ningún cubit para preparar dicho estado. En su lugar, un tercero podría haber preparado el estado de entrelazamiento previamente, enviando uno de los cubits a Alice y el otro a Bob.
Dependiendo de cuál de las cuatro opciones Alice desee comunicar a Bob (00, 01, 10 o 11), ella puede aplicar puertas cuánticas a su cubit, para luego enviárselo a Bob de manera que él tenga ambos cubits.
- Si Alice quiere enviar , entonces no le hace nada a su cubit, y se lo envía a Bob.
- Si Alice quiere enviar , entonces aplica la puerta sobre su cubit, lo cual transforma en
y luego envía el cubit a Bob.
- Si Alice quiere enviar , entonces aplica la puerta a su cubit, lo cual transforma en
y luego envía su cubit a Bob.
- Finalmente, si Alice quiere enviar , aplica tanto como a su cubit. Aplicar transforma en , y aplicar transforma en
y luego Alice envía su cubit a Bob.
Ahora Bob posee ambos cubits, los cuales pueden estar en uno de los siguientes cuatro estados:
Dado que estos estados son ortonormales, forman una base de medición llamada base de Bell. Bob puede medir los dos cubits en la base de Bell para distinguirlos, y por lo tanto determinar qué envió Alice. Este proceso se conoce como medición de Bell.
Otra forma de entender la medición de Bell consiste en aplicar y luego , para finalmente medir en la base Z. Esto es,
Computacionalmente este protocolo aún requiere dos cubits para funcionar, pero como protocolo de comunicación requiere que se envíe un único cubit. Generalizando la codificación superdensa, notar que si Alice y Bob comparten pares de cubits entrelazados ( e-bits conforman un total de cubits), entonces Alice puede medir cada uno de sus cubits y enviárselos a Bob, disminuyendo notablemente la cantidad de cubits a enviar.
Por último es importante destacar que un teorema famoso en la teoría de la información cuántica, conocido como teorema de Holevo, dice que sin el uso de estados entrelazados compartidos es imposible comunicar más de un bit de información clásica enviando un solo cubit. Así, mediante la codificación superdensa, el entrelazamiento compartido permite duplicar efectivamente la capacidad de transferencia de información clásica al enviar cubits.

Figura (1): Protocolo de codificación superdensa, indicando las responsabilidades de Alice y Bob en las distintas partes del circuito.
Ejemplos
Sección titulada «Ejemplos»Para finalizar este artículo se presentará un ejemplo que involucre la acción de dos cubits, donde Alice desea enviar los bits de información mediante el cubit que ella tiene en su poder. Tal como se explicó anteriormente, se asume que los dos cubits se encuentran en un estado de entrelazamiento, y que un tercero le otorgó uno a Alice y otro a Bob.
A continuación se elaborará un paso a paso de la aplicación del protocolo.

Figura (2): Protocolo de codificación superdensa, con separadores ante la aplicación de cada puerta.
Se analizará paso a paso el estado de los cubits segun los separadores provistos en el circuito, donde \(\phi_i\) es el estado en el paso \(i\), empezando con \(i=1\) y finalizando con \(i=5\).
El paso representa los valores con los cuales se inicializó el circuito. En este caso, se inicia el circuito con el estado , es decir, los cubits ya se encuentran entrelazados.
Se aplica una puerta sobre el primer cubit con el valor del bit más significativo como bit de control, cuyo valor es 1, por lo que se aplica un cambio de fase en 180º sobre dicho cubit. Se alcanza el estado .
Se aplica una puerta sobre el primer cubit con el valor del bit menos significativo como bit de control, cuyo valor es 1, por lo que se aplica NOT sobre dicho cubit. Se alcanza el estado , que convenientemente es equivalente a , aplicando una fase global .
Se opera con la puerta con el primer cubit como control y el segundo cubit como target. Se alcanza el estado .
Se aplica Hadamard sobre el primer cubit para deshacer el entrelazamiento y poder medir los cubits. Se llega al estado .
Se realiza la medición sobre ambos cubits, obteniendo el valor con de probabilidad (la fase global no afecta en la medición), donde el primer cubit toma el valor del bit y el segundo cubit toma el valor del bit .
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpilefrom qiskit_aer import QasmSimulator
def run_circuit(qc: QuantumCircuit): sim = QasmSimulator() transpiled = transpile(qc) result = sim.run(transpiled).result() return result
# estados cuánticosdata = QuantumRegister(2, name="data")entangledpair = QuantumRegister(2, name="parentrelazado")
# estados clásicosdata_c = ClassicalRegister(2, name="dataclasica")entangledpair_c = ClassicalRegister(2, name="parentrelazadoclasico")
# circuito cuánticoqc = QuantumCircuit( data, entangledpair, data_c, entangledpair_c)
# Entrelazamiento de qubitsqc.h(entangledpair[0])qc.cx(entangledpair[0], entangledpair[1])qc.barrier()
# Establecer bits a transmitir en 11 a partir de dos qubitsqc.x(data)qc.measure(data, data_c)qc.barrier()
# Aplicar Z y X condicionalmente para encodear 2 bits en un qubit entrelazadowith qc.if_test((data_c[0], 1)): qc.z(entangledpair[0])with qc.if_test((data_c[1], 1)): qc.x(entangledpair[0])qc.barrier()
# Aplicar CNOT con primer qubit como control y segundo como targetqc.cx(entangledpair[0], entangledpair[1])qc.barrier()
# Aplicar H sobre primer qubit para quitar entrelazamientoqc.h(entangledpair[0])qc.barrier()
# Medir ambos qubitsqc.measure(entangledpair[0], entangledpair_c[0])qc.measure(entangledpair[1], entangledpair_c[1])qc.barrier()
res = run_circuit(qc)
print(qc.draw())counts = res.get_counts()
measure_eq_11 = 0measure_neq_11 = 0for key in counts: if key[-2:] == "11": measure_eq_11 += counts[key] else: measure_neq_11 += counts[key]
print("Probabilidad de recibir 11 en los qubits entrelazados: ", measure_eq_11 / (measure_eq_11 + measure_neq_11))
░ ┌───┐┌─┐ ░ ░ ░ ░ ░ data_0: ───────────░─┤ X ├┤M├────░──────────────────────────────────────────────────────────────────────────░───────░───────░────────░─ ░ ├───┤└╥┘┌─┐ ░ ░ ░ ░ ░ data_1: ───────────░─┤ X ├─╫─┤M├─░──────────────────────────────────────────────────────────────────────────░───────░───────░────────░─ ┌───┐ ░ └───┘ ║ └╥┘ ░ ┌──────┐ ┌───┐┌───────┐ ┌──────┐ ┌───┐┌───────┐ ░ ░ ┌───┐ ░ ┌─┐ ░ parentrelazado_0: ┤ H ├──■───░───────╫──╫──░────────┤ If-0 ├────────┤ Z ├┤ End-0 ├──────┤ If-0 ├──────┤ X ├┤ End-0 ├──░───■───░─┤ H ├─░─┤M├────░─ └───┘┌─┴─┐ ░ ║ ║ ░ └──╥───┘ └───┘└───────┘ └──╥───┘ └───┘└───────┘ ░ ┌─┴─┐ ░ └───┘ ░ └╥┘┌─┐ ░ parentrelazado_1: ─────┤ X ├─░───────╫──╫──░───────────╫───────────────────────────────────╫──────────────────────────░─┤ X ├─░───────░──╫─┤M├─░─ └───┘ ░ ║ ║ ░ ┌─────────╨─────────┐ ┌─────────╨─────────┐ ░ └───┘ ░ ░ ║ └╥┘ ░ dataclasica: 2/═══════════════════╩══╩════╡ dataclasica_0=0x1 ╞═══════════════╡ dataclasica_1=0x1 ╞═══════════════════════════════════╬══╬════ 0 1 └───────────────────┘ └───────────────────┘ ║ ║parentrelazadoclasico: 2/═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩══╩════ 0 1Probabilidad de recibir 11 en los qubits entrelazados: 1.0