En este ejercicio comprobaremos que un circuito de dos qubits, con dos Hadamard y una CX intermedia es equivalente a un circuito con la CX inversa.
En esta ocasión, incluiremos una parte de código para "pintar" una líneas verticales que nos sirvan de guía para comentar la evolución de los estados de los qubits.
Tenemos como novedad una puerta "I"; no hace nada, se llama "puerta identidad" y la hemos incluido para alinear a conveniencia todas las puertas con las guías verticales.
Tras la ejecución veremos el diagrama con las líneas y lo comentaremos.
# CIRCUITO-03 : DOBLE HADAMAR CON CX = CX from qiskit import QuantumCircuit # Importa la clase QuantumCircuit de Qiskit from qiskit_aer import Aer # Importa el módulo Aer de Qiskit Aer qc = QuantumCircuit(2, 2) qc.id(0) # esto es una PUERTA DE IDENTIDAD, no hace nada, la hemos puesto para alinear el dibujo del circuito qc.h(0) qc.x(1) qc.h(1) qc.cx(0, 1) qc.h(0) qc.h(1) # qc.append(mcx_gate, [1, 0, 2, 3]) qc.measure (0,0) qc.measure (1,1) qc.draw('mpl')
# CIRCUITO-03 : LO EJECUTAMOS 10.000 VECES Y VEMOS LOS RESULTADOS # Configuración del simulador cuántico Procesando = Aer.get_backend('qasm_simulator') # Obtiene el backend 'qasm_simulator' de Qiskit Aer # Ejecución del circuito cuántico en el simulador cuántico Proceso = Procesando.run(qc, shots=10000).result() # Ejecuta el circuito cuántico 10000 veces y obtiene los resultados # Obtención de los resultados de la ejecución Resultados = Proceso.get_counts(qc) # Obtiene los conteos de los resultados de la ejecución del circuito print(Resultados) # Imprime los resultados en la consola
Todas las ejecuciones nos dan el mismo resultado: {'11': 10000} A continuación veremos la explicación, tras "pintar" el circuito con líneas guía para poder comentarlo:
# CIRCUITO 03 : AHORA PINTAREMOS EL CIRCUITO CON LINEAS VERTICALES PARA COMENTARLAS (en pdf) import matplotlib.pyplot as plt fig, ax = plt.subplots() qc.draw(output='mpl', ax=ax) # Agregar líneas verticales y comentarios # Estos valores de x y y necesitan ser ajustados dependiendo de la posición en el circuito donde quieres la línea/comentario ax.axvline(x=0.3, color='r', linestyle='--') ax.text(0.2, 1.3, 'Punto 1', rotation=90, verticalalignment='center', color='red') ax.axvline(x=1.3, color='b', linestyle='--') ax.text(1.2, 1.3, 'Punto 2', rotation=90, verticalalignment='center', color='blue') ax.axvline(x=2.3, color='r', linestyle='--') ax.text(2.2, 1.3, 'Punto 3', rotation=90, verticalalignment='center', color='red') ax.axvline(x=3.3, color='b', linestyle='--') ax.text(3.2, 1.3, 'Punto 4', rotation=90, verticalalignment='center', color='blue') # Mostrar el gráfico plt.show()
1/2· (∣00⟩ + ∣11⟩ - ∣10⟩ - ∣01⟩) =
= 1/2· ( ∣0⟩·(∣0⟩ - ∣1⟩) - ∣1⟩·(∣0⟩ - ∣1⟩) =
= 1/√2 ·(∣0⟩ - ∣1⟩) · 1/√2 ·(∣0⟩ - ∣1⟩) = ∣- - ⟩ Esta sería la salida del punto 3
(Ese 11 es exactamente el es el resultado que hemos medido en las 10.000 ejecuciones)