Квантовая телепортация

This commit is contained in:
2025-10-14 17:54:27 +03:00
parent 152db4bd80
commit 8fbcb933a6

81
task7/main.py Normal file
View File

@@ -0,0 +1,81 @@
from __future__ import annotations
import random
import cirq
import numpy as np
def make_quantum_teleportation_circuit(ranX, ranY):
circuit = cirq.Circuit()
msg, alice, bob = cirq.LineQubit.range(3)
# Создаём запутанную пару кубитов между Алисой и Бобом
circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)])
# Создаём случайное состояние для сообщения
circuit.append([cirq.X(msg) ** ranX, cirq.Y(msg) ** ranY])
# Запутываем сообщение и кубит Алисы
circuit.append([cirq.CNOT(msg, alice), cirq.H(msg)])
# Измеряем сообщение и кубит Алисы
circuit.append(cirq.measure(msg, key="msg"))
circuit.append(cirq.measure(alice, key="alice"))
# Используем два классических бита
# для восстановления исходного квантового сообщения на кубите Боба
circuit.append(cirq.X(bob).with_classical_controls("alice"))
circuit.append(cirq.Z(bob).with_classical_controls("msg"))
return circuit
def main(seed=None):
random.seed(seed)
ranX = random.random()
ranY = random.random()
circuit = make_quantum_teleportation_circuit(ranX, ranY)
print("Circuit:")
print(circuit)
sim = cirq.Simulator(seed=seed)
# Запускаем простую симуляцию, которая применяет случайные X и Y-гейты,
# создающие наше сообщение
q0 = cirq.LineQubit(0)
message = sim.simulate(cirq.Circuit([cirq.X(q0) ** ranX, cirq.Y(q0) ** ranY]))
print("\nBloch Sphere of Message After Random X and Y Gates:")
expected = cirq.bloch_vector_from_state_vector(message.final_state_vector, 0)
print(
"x: ",
np.around(expected[0], 4),
"y: ",
np.around(expected[1], 4),
"z: ",
np.around(expected[2], 4),
)
final_results = sim.simulate(circuit)
print("\nBloch Sphere of Qubit 2 at Final State:")
teleported = cirq.bloch_vector_from_state_vector(
final_results.final_state_vector, 2
)
print(
"x: ",
np.around(teleported[0], 4),
"y: ",
np.around(teleported[1], 4),
"z: ",
np.around(teleported[2], 4),
)
return expected, teleported
if __name__ == "__main__":
main()