0
0

teleportation実装の補足

Last updated at Posted at 2024-05-31

以下の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)']))

  • Circuit
    image.png

  • Result
    image.png

  • analysis

    • qubit-Qの初期値が0
    • 上記のResult図から、qubit-Bの計測結果が0であることを分かった

要は、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
  • Circuit
    image.png

  • Result
    image.png

  • analysis

    • qubit-Qの初期値が1
    • 上記のResult図から、qubit-Bの計測結果が1であることを分かった

要は、qubit-Qがqubit-Bに"伝送"できたという意味

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0