以下のpageに掲載されてあるteleportationの実装に関する少し補足です。
当teleportationの実装
transmit one qubit using two classical bits
Simple Version(qubit-Qの値: 0)
- Code
Codeを見る(変数名少し修正した)
qubit = QuantumRegister(1, "Q")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
m_A = ClassicalRegister(1, "m_A")
m_Q = ClassicalRegister(1, "m_Q")
protocol = QuantumCircuit(qubit, ebit0, ebit1, m_Q, m_A)
# protocol.x(qubit)
# Prepare ebit used for teleportation
protocol.h(ebit0)
protocol.cx(ebit0, ebit1)
protocol.barrier()
# Alice's operations
protocol.cx(qubit, ebit0)
protocol.h(qubit)
protocol.barrier()
# Alice measures and sends classical bits to Bob
protocol.measure(ebit0, m_A)
protocol.measure(qubit, m_Q)
protocol.barrier()
# Bob uses the classical bits to conditionally apply gates
with protocol.if_test((m_A, 1)):
protocol.x(ebit1)
with protocol.if_test((m_Q, 1)):
protocol.z(ebit1)
m_B = ClassicalRegister(1, "m_B")
protocol.add_register(m_B)
protocol.measure(ebit1, m_B)
display(protocol.draw("mpl"))
result = AerSimulator().run(protocol).result()
statistics = result.get_counts()
display(plot_histogram(statistics, title="Fig-1: Transportation for qubit-Q(value: 0)", legend =['measure result(B A Q)']))
要は、qubit-Qがqubit-Bに"伝送"できたという意味
Simple Version(qubit-Qの値: 1)
- Code(All)
Codeを見る
qubit = QuantumRegister(1, "Q")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
m_A = ClassicalRegister(1, "m_A")
m_Q = ClassicalRegister(1, "m_Q")
protocol = QuantumCircuit(qubit, ebit0, ebit1, m_Q, m_A)
# set qubit-q: 1
protocol.x(qubit)
# Prepare ebit used for teleportation
protocol.h(ebit0)
protocol.cx(ebit0, ebit1)
protocol.barrier()
# Alice's operations
protocol.cx(qubit, ebit0)
protocol.h(qubit)
protocol.barrier()
# Alice measures and sends classical bits to Bob
protocol.measure(ebit0, m_A)
protocol.measure(qubit, m_Q)
protocol.barrier()
# Bob uses the classical bits to conditionally apply gates
with protocol.if_test((m_A, 1)):
protocol.x(ebit1)
with protocol.if_test((m_Q, 1)):
protocol.z(ebit1)
m_B = ClassicalRegister(1, "m_B")
protocol.add_register(m_B)
protocol.measure(ebit1, m_B)
display(protocol.draw("mpl"))
result = AerSimulator().run(protocol).result()
statistics = result.get_counts()
display(plot_histogram(statistics, title="Fig-2: Transportation for qubit-Q(value: 1)", legend =['measure result(B A Q)']))
- Code(diff)
protocol = QuantumCircuit(qubit, ebit0, ebit1, m_Q, m_A)
+ # set qubit-q: 1
+ protocol.x(qubit)
# Prepare ebit used for teleportation
要は、qubit-Qがqubit-Bに"伝送"できたという意味