Lumaktaw sa pangunahing nilalaman

Quantum Coins — isang modyul tungkol sa superposition at interference

Para sa Qiskit in Classrooms na modyul na ito, kailangang may gumaganang Python environment ang mga estudyante na may mga sumusunod na naka-install na package:

  • qiskit v2.1.0 o mas bago
  • qiskit-ibm-runtime v0.40.1 o mas bago
  • qiskit-aer v0.17.0 o mas bago
  • qiskit.visualization
  • numpy
  • pylatexenc

Para i-set up at i-install ang mga package sa itaas, tingnan ang gabay na I-install ang Qiskit. Para makapag-run ng mga job sa tunay na mga quantum computer, kailangang mag-set up ng account sa IBM Quantum® ang mga estudyante sa pamamagitan ng pagsunod sa mga hakbang sa gabay na I-set up ang iyong IBM Cloud account.

Ang modyul na ito ay nasubok at gumamit ng 47 segundo ng QPU time. Tantyá lamang ito. Maaaring mag-iba ang iyong aktwal na paggamit.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

Panoorin ang walkthrough ng modyul ni Dr. Katie McCormick sa ibaba, o i-click ang dito para mapanood sa YouTube.


Panimula

Sa modyul na ito, tatalakayin natin ang isa sa mga pangunahing prinsipyo sa puso ng quantum theory: ang superposition. Sa ating pang-araw-araw na karanasan, laging may tiyak na katangian ang mga bagay. Ang kanilang lokasyon, sukat, hugis, kulay — lahat ng tungkol sa kanila — ay natukoy at tiyak, kahit hindi pa natin ito nasukat bilang tagamasid. Sa mundo ng quantum, hindi laging ganito ang kaso. Ang isang quantum na bagay ay maaaring nasa tinatawag na "superposition" ng maraming klasikal na pinahintulutang estado. Kapag nasukat ang superposition, ito ay "mag-co-collapse" nang random sa isa sa mga estadong iyon.

Sa ilang paraan, ang pagsukat ng isang superposition state ay parang paghagis ng barya: walang paraan para malaman nang maaga kung alin ang mapupuntahan nito. Ang pundamental na indeterminismong ito ay isang hindi komportableng aspeto ng quantum mechanics na nahirapan pati na si Einstein. Sikat niyang sinabi, "Hindi naglalaro ng dais ang Diyos" tungkol sa randomness na ito. Ngunit, tulad ng makikita natin, sa katunayan ay naglalaro nga ng dais ang Diyos — at naghahagis ng barya.

Iisipin natin ang klasikal na paghagis ng barya bilang analohiya sa pagsukat ng isang superposition state. At — sa pamamagitan ng paglalaro sa isang "quantum coin" gamit ang Qiskit at isang qubit sa IBM® quantum processor — mabilis na makikita natin ang mga limitasyon ng analohiyang iyon.

Klasikal na barya

Magsimula tayo sa isang klasikal na barya. Ihagis ang isang barya, at mahuhulog ito nang ulo pataas o ulo pababa, na may 50 ~% na posibilidad ng bawat isa. Bagama't sa prinsipyo, maaaring kalkulahin ng isang tao kung aling gilid ang mahuhulog ng barya kung alam nila ang tiyak na mga paunang kondisyon ng barya at ang puwersa/torque ng paghagis, sa katotohanan, walang paraan para malaman nang a priori kung aling gilid ang mahuhulog ng barya. Kaya naman ginagamit natin ang paghagis ng barya bilang isang kanoniko na halimbawa ng isang klasikal na probabilistic state, kung saan ang resulta ay mahalagang random. Maaari nating isulat ang estado ng barya bago ito mahulog upang ipakita ang 50/50 na posibilidad na ito:

S(coin)=12up+12downS(coin) = \frac{1}{2}|up\rangle + \frac{1}{2}|down\rangle

Dito, ang dalawang termino ay kumakatawan sa dalawang posibleng resulta ng paghagis, at ang kanilang mga koepisyente ay kumakatawan sa mga posibilidad ng bawat isa sa mga resulta. Tandaan na karaniwan, ang "|\rangle" (kilala bilang "ket") ay ginagamit upang kumatawan sa isang quantum state, ngunit dito, pinag-uusapan natin ang isang klasikal na probabilistic state. Tingnan ang Aralin 1: Mga Solong Sistema sa kursong Basics of Quantum Information para matuto pa tungkol sa kung paano natin kinakatawan ang klasikal at quantum na impormasyon.

Kung ihahagis natin ang barya nang 1000 beses at itatala ang bilang ng ulo pataas at pababa, makakakuha tayo ng ganito:

# import necessary packages:
import numpy as np
import matplotlib.pyplot as plt
import random

nflips = 1000
fliplist = [random.randint(0, 1) for f in range(nflips)]

# bar plots using get_gaussian_probs function
plt.hist(fliplist)
plt.show()

Output ng nakaraang code cell

Quantum na barya

Maaari tayong lumikha ng katulad na probabilistic state gamit ang isang qubit sa ating quantum computer. Tulad ng paghagis ng barya, ang isang qubit ay maaari ring masukat sa dalawang posibleng estado: 0|0\rangle at 1|1\rangle. Nililikha natin ang probabilistic, "superposition" na estado sa pamamagitan ng pagsisimula sa estado na 0|0\rangle, at pagkatapos ay nag-aapply ng tinatawag na Hadamard gate sa qubit. Inilalagay nito ito sa isang pantay na superposition ng 0|0\rangle at 1|1\rangle. Tandaan na habang maaaring magmukhang katulad ng barya ang superposition state na ito sa unang tingin, mabilis nating makikita na may mas maraming ito kaysa doon. Ang layunin ng modyul na ito ay ipakita sa iyo na ang isang superposition ay hindi katulad ng klasikal na paghagis ng barya.

Kaya, dahil ang qubit ay nasa pantay na superposition ng 0 at 1, kapag sinukat natin ang qubit, magkakaroon ng 50% na posibilidad na masukat natin ang 0|0\rangle, at 50% na posibilidad na masukat natin ang 1|1\rangle. Isinusulat natin ang estadong ito nang medyo naiiba mula sa klasikal na probabilistic na kaso, para sa mga dahilang magiging malinaw sa dakong huli:

ψ=120+121|\psi\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle

Dito, ang mga posibilidad ng pagsukat ng bawat isa sa dalawang estado ay hindi na katumbas ng mga koepisyente, tulad ng kaso sa klasikal na probabilistic state sa itaas. Sa halip, ito ay ang parisukat ng mga koepisyente ang nagbibigay sa atin ng mga posibilidad, at ang bawat isa sa mga koepisyenteng ito ay maaaring maging kumplikado na ngayon, ibig sabihin, maaari silang magkaroon ng parehong tunay at haka-hakang bahagi.

Kabila ng mga pagkakaibang ito, ang resulta ng pagsukat ng estadong ito ay mahalagang katulad ng paghagis ng barya.

from qiskit import QuantumCircuit

qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()

qcoin.draw("mpl")

Output ng nakaraang code cell

Kaya, sa katunayan, ang pag-apply ng Hadamard gate ay katumbas ng paghagis ng barya. At tulad ng paghagis ng barya nang 1000 beses upang tingnan ang mga istatistika ng barya na nahuhulog nang ulo pataas o pababa, maaari tayong gumawa ng katulad na bagay sa Qiskit gamit ang ating "quantum coin." Maaari tayong gumamit ng Qiskit primitive na tinatawag na Sampler, na uulitin ang isang Circuit nang ilang beses upang i-sample ang mga istatistika ng resultang estado.

Una, ini-load natin ang Qiskit Runtime service at mga primitive, pagkatapos ay pumipili tayo ng Backend kung saan iri-run ang Circuit.

Mayroong code sa ibaba para sa pag-save ng iyong mga kredensyal sa unang paggamit. Tiyaking burahin ang impormasyong ito mula sa notebook pagkatapos itong i-save sa iyong environment, upang hindi aksidenteng maibahagi ang iyong mga kredensyal kapag ibinabahagi mo ang notebook. Tingnan ang I-set up ang iyong IBM Cloud account at I-initialize ang service sa isang hindi pinagkakatiwalaang environment para sa karagdagang gabay.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import (
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)

# Use the least busy backend
backend = service.least_busy()
print(backend.name)
ibm_kingston

Kung wala ka nang oras na available sa iyong account, maaari ka ring pumili na i-run ito sa isang simulator. I-uncomment lang ang code at i-run ang cell sa ibaba para gawin ito:

## Use a local simulator

# from qiskit_aer import AerSimulator

## Generate a simulator that mimics the real quantum system

# backend_sim = AerSimulator.from_backend(backend)

## Import an estimator, this time from qiskit (we will import from Runtime for real hardware)

# from qiskit.primitives import BackendSamplerV2
# sampler_sim = BackendSamplerV2(backend = backend_sim)
# from qiskit.primitives import BackendEstimatorV2
# estimator_sim = BackendEstimatorV2(backend = backend_sim)
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin)
## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analysis
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output ng nakaraang code cell

Sa 1000 sample ng Circuit sa itaas, mayroon tayong isang bagay na mukhang kapareho ng klasikal na coin histogram, maliban sa ilang istatistikal na pagbabago.

Bukod sa pag-sample ng mga istatistika ng quantum coin, maaari rin tayong gumamit ng isa pang Qiskit primitive na tinatawag na Estimator upang masukat ang tinatawag na expectation value ng isang observable ng estado. Upang mailarawan kung ano ang expectation value na ito, gamitin natin ang klasikal na barya bilang halimbawa. Sabihin nating ginagamit mo ang barya para magsugal: sa tuwing ihahagis mo ang barya at mahuhulog itong "ulo pataas," mananalo ka ng isang dolyar. Ngunit sa tuwing mahuhulog itong "ulo pababa," mawawalan ka ng isang dolyar. Kung gusto mong malaman kung magkano ang inaasahan mong makuha sa bawat paghagis (ang expectation value ng observable na "pera"), kalkulahin mo ang:

E(money)=12(+1 dollar)+12(1 dollar)=0 dollarsE(money) = \frac{1}{2} (+ \text{1 dollar}) + \frac{1}{2} (- \text{1 dollar}) = \text{0 dollars}

Dahil pantay ang posibilidad na manalo ka ng dolyar at mawalan ng dolyar, ang expectation value ay $0.

Katulad nito, sa isang quantum state, maaari nating kalkulahin ang expectation value ng observable na "Z", kung saan ang Z ay ang Pauli matrix na may mga halaga na +1 at -1 na nauugnay sa mga estado na 0|0\rangle at 1|1\rangle, ayon sa pagkakasunod.

ψZψ=120Z0+121Z1=12(+1)+12(1)=0\langle \psi|Z|\psi \rangle = \frac{1}{2} \langle 0 | Z | 0 \rangle + \frac{1}{2} \langle 1 | Z | 1 \rangle = \frac{1}{2} (+1) + \frac{1}{2}(-1) = 0
from qiskit.quantum_info import Pauli

qcoin = QuantumCircuit(1)
qcoin.h(0)

# for Estimator, we do not apply the measurement to the circuit
<qiskit.circuit.instructionset.InstructionSet at 0x136df1ba0>
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

obs = Pauli("Z")

qc_isa = pm.run(qcoin)
obs_isa = obs.apply_layout(layout=qc_isa.layout)
## Execute

# On real hardware:
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()

# On a simulator:
# job = estimator_sim.run([[qc_isa, obs_isa]])
# res=job.result()

print(res[0].data.evs)
-0.014799284701239441

Nakakakuha tayo ng expectation value na 0, gaya ng inaasahan (ha). Ito ay isa pang paraan upang kumpirmahin na mayroon nga itong pantay na posibilidad ng pagsukat ng 0 at 1, at tila kumikilos tulad ng paghagis ng barya.

Sa puntong ito, ang "quantum coin" ay mukhang kapareho ng klasikal na barya. Ngunit sa susunod na seksyon, magsasagawa tayo ng ilang eksperimento na magpapakita ng mga pundamental na pagkakaiba sa pagitan ng dalawa.

Ang quantum na nahayag: isang eksperimento sa tatlong dimensyon

Gumawa tayo ng isang thought experiment: Sabihin nating naghagis ka ng barya sa hangin, at sa halip na hayaang mahulog sa lupa, kaya mong pumalakpak habang dumadaan ito sa pagitan ng iyong mga kamay at mai-sandwich ang barya sa pagitan ng iyong mga palad. Ngayon, sa halip na nakatihaya ang barya nang mukha pataas o pababa, nandoon ang ulo nito sa kaliwa o sa kanan.

Suriin ang iyong pag-unawa

Basahin ang tanong/mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos ay i-click ang tatsulok upang makita ang solusyon.

Ano ang posibilidad ng bawat isa sa mga resultang ito — mukha sa kaliwa o mukha sa kanan?

Sagot:

Ang posibilidad ay 50-50 pa rin. Hindi dapat mahalaga kung sa aling dimensyon natin pinili na sukatin ang resulta ng paghagis ng barya.

Sana ay nasagot mo na ang posibilidad ng makita ang ulo sa kaliwa o kanan ay 50-50 pa rin. Ang dimensyon kung saan sinusukat ang paghagis ng barya ay hindi dapat makaapekto sa posibilidad ng mga resulta.

Ngunit paano magiging magkaiba ang hitsura para sa ating quantum na barya? Tingnan natin.

Maaari nating gawin ang ating quantum superposition sa parehong paraan tulad ng ginawa natin noong nakaraan — gamit ang isang Hadamard Gate. Upang sukatin ang "mukha sa kaliwa o kanan" sa ating quantum na barya, magagawa natin ang ginawa sa klasikal na barya: sukatin sa ibang aksis. Ang ating karaniwang mga sukat sa quantum computer ay nasa patayong aksis, tulad ng karaniwang sukat na "mukha pataas o pababa" ng klasikal na barya. Ngunit maaari din nating itanong sa ating quantum na barya kung ito ay mukha sa kaliwa o kanan, o katumbas, kung ito ay nasa mga estado +|+\rangle o |-\rangle, na nakaturo sa kahabaan ng xx-aksis. Ang Sampler ay nagsa-sample lamang sa Z na measurement basis, ngunit maaari nating gamitin ang Estimator upang bigyan tayo ng expectation value ng X. Ang mga halaga ng X ay +1 at -1 para sa mga estado +|+\rangle o |-\rangle, ayon sa pagkakabanggit.

Suriin ang iyong pag-unawa

Basahin ang tanong sa ibaba, isipin ang iyong sagot, pagkatapos ay i-click ang tatsulok upang makita ang solusyon.

Kung ang quantum na barya ay kumikilos tulad ng klasikal na barya sa kasong ito, magkakaroon tayo ng 50-50 na posibilidad ng pagsukat ng estado sa +|+\rangle at |-\rangle. Anong expectation value ng X ang inaasahan nating ibabalik ng Estimator, kung ito ang kaso?

Sagot:

Kapag inilapat natin ang X sa estado +|+\rangle, makukuha natin ang halagang +1, at sa estado |-\rangle makukuha natin ang -1, kaya kung mayroon tayong 50-50 na pamamahagi, makakakuha tayo ng expectation value na 0.

# Step 1: map problem

qcoin_lr = QuantumCircuit(1)
qcoin_lr.h(0)

obs = Pauli("X")

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_lr)
obs_isa = obs.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# job = estimator_sim.run([[qc_isa,obs_isa]])
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)
0.9985207100591716

Ang expectation value ng X para sa estado na ito ay 1. Kaya, hindi 50-50 ang posibilidad ng pagsukat ng +|+\rangle at |-\rangle.

Suriin ang iyong pag-unawa

Basahin ang tanong/mga tanong sa ibaba, isipin ang iyong sagot, pagkatapos ay i-click ang tatsulok upang makita ang solusyon.

Ano ang sinasabi sa atin ng expectation value na ito tungkol sa estado ψ|\psi\rangle? Ano ang mga posibilidad ng pagsukat ng +|+\rangle at |-\rangle sa X basis na ito?

Sagot:

Dahil ang expectation value ay kapareho ng halaga ng X para sa estado +|+\rangle, ibig sabihin ay 100% ang posibilidad ng pagsukat ng estado +|+\rangle kapag sinukat tayo sa kahabaan ng X.

Ano ang nangyayari dito? Tila ang ating quantum na barya ay maaaring magkaroon ng random, probabilistikong mga resulta sa isang dimensyon, ngunit perpektong mahuhulaan ang mga resulta sa isa pa. Ito ay katulad ng paghagis ng barya at ginagarantiyahan na sa tuwing mahuhuli ito sa pamamagitan ng pagsa-sandwich sa pagitan ng dalawang kamay, ang ulo ay palaging hahara sa kanan.

Ang quantum phase

Ang pangunahing pagkakaiba ng quantum na barya ay mayroon itong isa pang katangian na wala ang klasikal na barya. Alalahanin na sa isang klasikal na probabilistikong estado,

S(coin)=c1up+c2downS(coin) = c_1|up\rangle + c_2|down\rangle

ang bawat coefficient ay isang simpleng tunay, positibong numero na kumakatawan sa posibilidad ng pagsukat ng isang partikular na estado. Sa isang quantum na estado,

ψ=c10+c21|\psi\rangle = c_1 |0\rangle + c_2 |1\rangle

ang mga coefficient ay kumplikado, kaya naglalaman sila ng tunay at imaginary na bahagi. Ang bawat coefficient cic_i ay maaaring ipahayag bilang isang dalawang-dimensyonal na vector sa complex plane, na may magnitude ci|c_i| at anggulo ϕi\phi_i na ginagawa nito sa tunay na aksis:

ci=cieiϕi.c_i = |c_i| e^{i \phi_i}.

A circle in a complex plane. The quantum state is represented as an arrow of length 1 that can rotate to point to any point on the circle. The horizontal component of the arrow is its real amplitude, and the vertical is its complex amplitude.

Tinatawag natin ang ϕi\phi_i na phase. Sinasabi sa atin ng phase kung paano mag-i-interfere ang dalawang termino sa isang quantum na estado, o kung paano sila magdadagdag o magkakansela tulad ng mga alon. Kung ang dalawang alon ay nasa phase sa isa't isa — ibig sabihin, magkatugma ang kanilang mga tuktok at lambak — magtatambalan sila upang makabuo ng alon na doble ang taas. Tinatawag natin ito na constructive interference. Kung sila ay nasa labas ng phase, ibig sabihin ang isang tuktok mula sa isa ay nakatugma sa isang lambak mula sa isa pa, at kabaliktaran, nagdi-destructively interfere sila at ganap na nagkakansela sa isa't isa.

Tulad ng mga alon, ang mga quantum na estado ay maaari ding magdagdag nang constructive o destructive. Maaaring mas mahirap itong makita dahil madalas, hindi tayo nagsasalita tungkol sa isang aktwal na alon sa pisikal na espasyo. Sa kaso ng ating mga Qubit, ang interference ay nangyayari sa abstract, information space ng mga Qubit. Tandaan din na dahil ang relatibong phase sa pagitan ng dalawang alon lamang ang mahalaga sa kung paano sila mag-i-interfere — ibig sabihin, ang pagkakaiba sa mga phase na Δϕ=ϕ2ϕ1\Delta \phi = \phi_2 - \phi_1 ng dalawang coefficient — karaniwan naming inilalapat ang isang global phase na ϕ1-\phi_1 sa buong estado upang ang c1c_1 ay purong tunay at ang relatibong phase ay ganap na nakuha sa c2c_2.

Upang makita kung paano maaaring magdulot ng interference ang phase sa ating quantum na barya, subukan nating ilapat ang Hadamard nang dalawang beses sa halip na isang beses lamang. Sa klasikal na paraan, walang katuturan ito — kung ang paglapat ng Hadamard ay katumbas ng paghagis ng barya, hindi mo maaaring ihagis ang isang barya na naghahagis na. Ngunit tingnan natin kung ano ang mangyayari sa quantum na barya:

qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()

qcoin_0.draw("mpl")

Output of the previous code cell

Ngayon, bago natin gamitin ang Sampler upang sukatin ang resultang estado, isipin natin kung paano magbabago ang Qubit na ito sa bawat Gate. Nagsisimula ito, tulad ng dati, sa 0|0\rangle. Pagkatapos, ang unang Hadamard ay nagbabago ng estado sa superposition, tulad ng nakita na natin:

H0=120+121.H|0\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle.

Sa kasong ito, ang parehong mga coefficient ay ganap na tunay at positibo, ibig sabihin ang phase ay ϕ=0\phi=0.

Ang pangalawang Hadamard ay inilalapat naman sa bawat bahagi ng superposition state nang hiwalay. Alam na natin kung paano binabago ng Hadamard ang estado 0|0\rangle. Ngunit paano naman ang 1|1\rangle?

H1=120121H|1\rangle = \frac{1}{\sqrt{2}} |0\rangle - \frac{1}{\sqrt{2}} |1\rangle

Ito ay, muli, isang pantay na superposition ng 0 at 1, katulad ng paghagis ng barya, ngunit ang coefficient ng estado na ito sa harap ng 1|1\rangle ay may phase na ϕ=π\phi = \pi upang bigyan ito ng negatibong tanda.

Suriin ang iyong pag-unawa

Basahin ang tanong sa ibaba, isipin ang iyong sagot, pagkatapos ay i-click ang tatsulok upang makita ang solusyon.

Kalkulahin ang resultang estado pagkatapos ilapat ang pangalawang Hadamard. Ibig sabihin, kalkulahin ang: H(120+121)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Tandaan na ang HH ay distributive, kaya maaari nating ilapat ito sa bawat termino nang hiwalay.

Sagot:

H(120+121)=12H0+12H1=12[(0+1)+(01)]=0H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle) = \frac{1}{\sqrt{2}} H|0\rangle + \frac{1}{\sqrt{2}} H|1\rangle = \frac{1}{2} [(|0\rangle + |1\rangle) + (|0\rangle - |1\rangle)] = |0\rangle

Ngayon, suriin natin ang ating hula gamit ang Sampler.

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_0)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Output of the previous code cell

Kinansela ng pangalawang Hadamard ang una, at bumalik tayo sa estado 0 na pinagmulan natin! Ito ay dahil ang Hadamard ay nagbabago ng parehong mga estado na 0|0\rangle at 1|1\rangle sa magkaparehong mga estado, ngunit may magkasalungat na mga phase. Pagkatapos ng pangalawang Hadamard, makikita natin na ang mga termino ng 0|0\rangle ay constructively nagde-interfere, ngunit ang mga termino ng 1|1\rangle ay destructively nagde-interfere at nagkakansela sa isa't isa.

Tuklasin pa natin: maaari nating baguhin ang phase gamit ang isang "PHASE" Gate. Kaya ngayon, ilapat natin ang isang Hadamard upang lumikha ng superposition, mag-apply ng phase shift na π\pi radians, pagkatapos ay ilapat ang pangalawang Hadamard:

qcoin_pi = QuantumCircuit(1)
qcoin_pi.h(0)
qcoin_pi.p(np.pi, 0)
qcoin_pi.h(0)
qcoin_pi.measure_all()

qcoin_pi.draw("mpl")

Output of the previous code cell

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_pi)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Output of the previous code cell

At ngayon ang Qubit ay nasukat sa estado 1 sa halip na 0.

Kaya, kahit sa ilang simpleng eksperimento lang, makikita mo na ang malaking pagkakaibang magagawa ng phase na ito sa isang quantum Circuit. Maaari itong maging banayad at mahirap mapansin sa una. Sa ating unang eksperimento, kung saan simpleng inihagis natin ang ating quantum na barya gamit ang isang Hadamard Gate at sinukat ang resulta ng paghagis — walang naibunyag na anumang epekto ng phase. Nang mas malalim na tumingin lang tayo natuklasan natin ang pagkakaiba na maaaring gawin ng phase. Maaari itong magdulot na ang parehong quantum Gate ay magkaroon ng literal na kabaliktarang epekto sa isang Qubit.

Subukan mo mismo:

I-edit ang code cell sa ibaba upang baguhin ang phase upang ang pangalawang Hadamard ay lumikha ng superposition state na may posibilidad na 25% at 75% ng paghanap ng estado sa 0|0\rangle at 1|1\rangle, ayon sa pagkakabanggit. I-verify ang iyong sagot gamit ang matematika.

qcoin_phase = QuantumCircuit(1)
qcoin_phase.h(0)
# replace "x" below with a phase from 0 to 2*np.pi (this cell won't run if you leave x)
# qcoin_phase.rz(x, 0)
qcoin_phase.h(0)
qcoin_phase.measure_all()

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_phase)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Output of the previous code cell

Isa pang (mas magandang) analohiya ng barya gamit ang NOT\sqrt{\text{NOT}} Gate

Sa puntong ito, natutunan na natin na ang paghagis ng barya ay medyo naiiba sa paglikha ng superposition state. Mayroon bang mas magandang analohiya sa barya na mas maraming nakukuhang phenomena na katulad ng superposition? Oo. Oo, mayroon.

Gagawa tayo ng isa pang thought experiment gamit ang barya. Isipin ang barya na nakapatong sa mesa, mukha pataas. Upang gawing mukha pababa, maaari nating i-flip ito. Ito ang computational equivalent ng isang "NOT" Gate.

Sabihin nating gusto nating bumuo ng isang operasyon na, kung ilapat nang dalawang beses, ay katumbas ng NOT Gate. Ibig sabihin, gusto natin ng "squareroot ng NOT," o NOT\sqrt{\text{NOT}}. Magagawa natin ito sa pamamagitan ng pag-iisip kung paano pisikal na ipinapatupad ang NOT Gate sa barya: isang pag-ikot lang ito ng 180 degrees sa paligid ng, halimbawa, x-aksis. Kaya, kung paikutin natin ang barya nang 90 degrees lang sa paligaan ng x-aksis, katumbas ito ng isang NOT\sqrt{\text{NOT}} Gate.

Isipin na pagkatapos ilapat ang NOT\sqrt{\text{NOT}} Gate, gusto nating malaman kung ang barya ay mukha pataas o pababa. Hindi ito alinman — nakatayo ito sa gilid nito kaugnay sa patayong aksis. Ngunit ngayon, muling tukuyin natin ang ating "pagsukat" ng barya bilang una, ang pagbagsak ng barya sa kahabaan ng measurement axis (sa pamamagitan ng pagpindot nito gamit ang iyong kamay upang maging patag ito), at pangalawa, ang pagsuri kung ito ay mukha pataas o pababa.

Kung gagawin natin ang "pagsukat" na ito sa barya na nakatayo sa gilid nito, ang barya ay "magko-collapse" sa mukha pataas at mukha pababa nang may pantay na posibilidad. Tulad ng paghagis ng barya, sa prinsipyo, ang direksyon na mahuhulog ang barya ay maaaring hulaan batay sa mga paunang kondisyon ng barya at kung paano eksaktong inilalapat ang puwersa ng ating kamay upang "ma-collapse" ito. Ngunit sa praktika, mahirap hulaan kung aling gilid ang darating sa itaas, kaya ito ay essentially random.

Maaari naming sukatin ang barya na ito sa tatlong iba't ibang aksis: xx, yy, at zz. Makikita natin na ang gilid ng barya ay nakaturo sa kahabaan ng xx at zz, kaya ang pagsukat sa mga direksyong iyon ay nangangailangan ng "pagbagsak" ng barya — kaya, sa mga aksis na iyon, magkakaroon ng random na 50:50 na posibilidad ng pagsukat ng mukha pataas at pababa. Ngunit sa kahabaan ng yy-aksis, patag na ito, na ang ulo nito ay nakaharap sa -y na direksyon. Maaari nating tawagan iyon na "mukha pasulong."

Kaya, habang ang mga sukat sa x at z ay nagbunga ng mga random na resulta, ang sukat sa y ay palaging magbubunga ng parehong resulta! Kung naaalala mo ang eksperimento sa "quantum coin flip" mula sa nakaraang seksyon, ito ay kahawig ng kung paano kumikilos ang quantum na barya. Nasukat ito bilang 0 o 1 nang may 50/50 na posibilidad sa z-direksyon, ngunit palaging +|+\rangle at hindi |-\rangle sa kahabaan ng X. Iminumungkahi nito na marahil ang isang barya na nakatayo sa gilid nito ay isang mas magandang paraan upang ma-visualize ang superposition state ng isang Qubit kaysa sa barya na lumiligid sa hangin.

Gamitin natin ang Qiskit upang makita kung ang ating "quantum na barya" ay kumikilos sa parehong paraan tulad ng ating klasikal na barya kapag inilapat ang isang NOT\sqrt{\text{NOT}} Gate. Ilalapat natin ang NOT\sqrt{\text{NOT}} sa isang Qubit na nagsisimula sa 0|0\rangle, pagkatapos ay gagamitin ang Estimator upang suriin ang expectation value ng tatlong observable, X, Y, at Z.

qcoin_sx = QuantumCircuit(1)
qcoin_sx.sx(0)

qcoin_sx.draw("mpl")

Output of the previous code cell

obs1 = Pauli("X")
obs2 = Pauli("Y")
obs3 = Pauli("Z")

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_sx)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

estimator = Estimator(mode=backend)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
job = estimator.run(pubs)
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
# job = estimator_sim.run(pubs)
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)
[[-0.01234492]
[-1.00388865]
[ 0.00740695]]

Ang mga expectation value ay 0, -1, at 0 para sa X, Y at Z, ayon sa pagkakabanggit.

Suriin ang iyong pag-unawa

Basahin ang tanong sa ibaba, isipin ang iyong sagot, pagkatapos ay i-click ang tatsulok upang makita ang solusyon.

Batay sa mga expectation value, ano ang mga posibilidad ng pagsukat ng quantum na barya bilang mukha pataas/pababa (o kaliwa/kanan o pasulong/paurong) para sa bawat isa sa 3 measurement axes?

Sagot:

Mayroong 50/50 na posibilidad ng pagsukat ng alinmang estado sa kahabaan ng X at Z, at ang estado ay palaging nasukat sa -y na direksyon sa kahabaan ng Y.

Ito ang parehong resulta na nakuha natin sa ating thought experiment na inilapat ang isang "NOT\sqrt{\text{NOT}}" 90-degree na pag-ikot sa klasikal na barya. Sa katunayan, mayroong tiyak na analohiya sa pagitan ng barya at ng Qubit state ngayon. Maaari nating i-visualize ang Qubit state bilang isang vector na nakaturo sa direksyon ng ulo ng barya, normal sa ibabaw ng barya. Kaya, ang mukha pataas, o ang estado 0|0\rangle sa quantum na barya, ay katumbas ng isang vector na nakaturo nang tuwid pataas; ang mukha pababa, o 1|1\rangle, ay nakaturo nang tuwid pababa. Ang anumang pantay na superposition ng 0|0\rangle at 1|1\rangle ay nakaturo nang pahalang. Ang phase ng estado ay nagtatakda ng eksaktong horizontal na direksyon — ang direksyon na nakaturo ito sa kahabaan ng equator ay katumbas ng direksyon na nakaturo ang coefficient na c2c_2 sa complex plane.

Ngayon, ang bawat Gate na nakita natin sa notebook na ito ay maaaring ma-visualize bilang isang pag-ikot (o serye ng mga pag-ikot) ng barya/vector.

  • NOT: 180 degrees sa paligid ng x-aksis

  • NOT\sqrt{\text{NOT}}: 90 degrees sa paligid ng x-aksis

  • PHASE: pag-ikot ng ϕ\phi sa paligid ng z-aksis

  • Hadamard: Ito ay medyo mas kumplikado. Sa simula, inihambing natin ito sa paghagis ng barya, na nagpapalikot ng barya nang walang kontrol sa hangin. Ngunit ang Hadamard ay isang kontrolado, deterministikong pag-ikot ng barya, tulad ng ibang mga Gate. Ang Hadamard ay ginagawa sa pamamagitan ng pag-ikot ng 90 degrees sa paligid ng y-aksis, pagkatapos ay 180 degrees sa paligid ng x-aksis.

Kaya, walang random ang tungkol sa isang quantum superposition state o alinman sa mga karaniwang operasyon na ginagawa natin sa Qubit. Ang bawat operasyon ay deterministiko at reversible. Ang tanging oras na pumapasok ang randomness ay kapag nagpasya tayong sukatin ang quantum state.

Ang Qubit state bilang isang Bloch vector

Ang vector na nakaturo sa direksyon ng "ulo" ng barya ay kilala bilang isang "Bloch vector." Sa pormal na paraan, ang isang arbitrary (isolated) na Qubit state ay maaaring katawanin ng isang vector na nasa ibabaw ng isang sphere na may radius 1 na may mga coordinate (r,θ,ϕ)(r, \theta, \phi). Nakasulat sa mga coordinate na ito, ang Qubit state ay:

ψ=cosθ20+eiϕsinθ21|\psi\rangle = \cos{\frac{\theta}{2}} |0\rangle + e^{i \phi} \sin{\frac{\theta}{2}} |1\rangle

A diagram of the Bloch sphere. The quantum state is a vector in three dimensions. Since it can point in any direction, the quantum state can be specified using polar angles theta and phi to locate a point on a spherical surphace. Ngayon suriin natin gamit ang Qiskit kung paano nagbabago ang Bloch vector kapag inilapat natin ang iba't ibang Gate sa ating Qubit na nagsisimula mula sa estado 0|0\rangle.

NOT

from qiskit.visualization import plot_bloch_multivector

qnot = QuantumCircuit(1)
qnot.x(0)

plot_bloch_multivector(qnot)

Output of the previous code cell

NOT\sqrt{\text{NOT}}

qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)

plot_bloch_multivector(qsqrtnot)

Output of the previous code cell

PHASE (ϕ=π\phi = \pi)

qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)

plot_bloch_multivector(qphase)

Output of the previous code cell

Hadamard

qhadamard = QuantumCircuit(1)
qhadamard.h(0)

plot_bloch_multivector(qhadamard)

Output of the previous code cell

Konklusyon — ano nga ba talaga ang isang superposition state?

Sinimulan natin ang modyul na ito sa pamamagitan ng paghahambing ng randomness ng pagsukat ng isang quantum superposition state sa paghagis ng barya. Inihambing natin ang "Hadamard Gate" na gumagawa ng quantum superposition sa gawa ng paghagis ng barya. Ngunit, sa pamamagitan ng isang serye ng mga eksperimento, natutunan natin na may mga pangunahing pagkakaiba sa pagitan ng isang klasikal na paghagis ng barya at isang quantum superposition.

Natutunan natin na walang "random" ang tungkol sa isang Qubit sa isang superposition state. Ito ay tulad ng isang barya na nakatayo nang tahimik sa tatlong-dimensyonal na espasyo. Sa katunayan, ang isang barya na malaya na umikot sa 3 dimensyon ay isang napakalapit na analohiya sa isang partikular na paraan upang ma-visualize ang quantum state ng isang Qubit, na tinatawag na Bloch vector. Ang mga Quantum Gate ay paikot-ikot ang barya/Bloch vector na ito nang deterministiko at reversible. Kapag sinukat natin ang Qubit lamang naipasok ang anumang randomness. Inihambing natin ang proseso ng pagsukat na ito sa pagpindot ng barya upang maging patag ito sa direksyon ng measurement axis.

Kung ang isang quantum state ay nasa superposition man ay nakasalalay talaga sa mata ng nagmamasid. Tulad ng malamang na naranasan mo na, malaya tayong pumili ng ating coordinate system — ang xx, yy, at zz ay maaaring tumuro sa anumang tatlong orthogonal na direksyon. Kaya, kung mayroon tayong superposition ng 0 at 1 sa isang coordinate system, maaari tayong tumukoy ng bagong coordinate system — o katumbas, isang bagong "measurement basis" — kung saan ang estado ay nakaturo nang dalisay sa +z+z na direksyon, at samakatuwid ay wala sa superposition state. Kaya, kapag sinabi natin na ang isang Qubit ay nasa superposition, kailangan din nating sagutin ang tanong, "superposition ng ano?"

Maaari kang umalis sa modyul na ito nang may impresyon na inalis natin ang lahat ng misteryo mula sa quantum mechanics. Pagkatapos ng lahat, ang isa sa mga paratanggap na "pinaka-kakaibang" aspeto, ang superposition state ng isang Qubit, ay simpleng isang tatlong-dimensyonal na vector lang pala. Ngunit alalahanin na ang barya ay analohiya pa rin lamang, at kahit ang Bloch vector ay isang visualization tool lamang upang kalkulahin ang mga posibilidad ng mga resulta ng pagsukat. Hindi natin masasabi kung ano ang talagang ginagawa ng isang quantum state bago ito masukat. Dahil, ang pagsuri sa iyon ay nangangailangan ng pagsukat!

Tatalakayin natin ang suliraning ito kung ano ang "tunay" na kalikasan ng isang quantum state, at kung paano ang quantum phenomenon ng entanglement ay makakatulong sa atin na linawin ito, sa modyul ng Bell's Inequality.

Mga Tanong

Ang mga instructor ay maaaring humiling ng mga bersyon ng mga notebook na ito na may mga susi sa sagot at gabay sa paglalagay sa mga karaniwang kurikulum sa pamamagitan ng pagsagot sa mabilis na survey na ito tungkol sa kung paano ginagamit ang mga notebook.

Mga kritikal na konsepto:

  • Habang ang pagsukat ng isang Qubit sa superposition ay probabilistiko, tulad ng paghagis ng barya, ang superposition state mismo ay kumikilos nang naiiba kaysa sa isang baryang lumiligid.
  • Ang pangunahing pagkakaiba sa pagitan ng isang klasikal na probability distribution at isang superposition ay ang superposition ay may phase coherence, na nagbibigay-daan dito na mag-interfere nang constructively o destructively.
  • Ang estado ng isang solong, isolated na Qubit ay maaaring ma-visualize bilang isang punto sa tinatawag na "Bloch sphere," kung saan ang mga relatibong amplitude ng mga component na 0|0\rangle at 1|1\rangle ay nagtatakda ng polar angle na θ\theta at ang mga relatibong phase sa pagitan ng dalawang component ay nagtatakda ng azimuthal angle na ϕ\phi.
  • Ang lahat ng single-qubit quantum gates ay maaaring tingnan bilang mga pag-ikot ng vector sa sphere na ito.

Mga tanong na T/F:

  1. T/F Ang isang quantum superposition ay essentially katulad ng isang probabilistikong kaganapan sa klasikal na pisika, tulad ng paghagis ng barya.

  2. T/F Ang haba ng Bloch vector na naglalarawan sa estado ng isang solong isolated na Qubit ay palaging 1.

  3. T/F Ang mga single-qubit quantum gates ay hindi nagbabago ng haba ng Bloch vector.

Mga tanong na MC:

  1. Piliin ang tamang Bloch vector na kumakatawan sa estado Ψ=130+eiπ/4231|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle:

Four Bloch spheres are shown. The vector points nearly along +x in option a, halfway between +x and +y and slightly below the xy plane in option b, between +x and -y, and slightly above the xy plane in option c, and along -x in option d.

  1. Inilalarawan ng Bloch sphere ang mga sumusunod na katangian ng isang Qubit: (piliin ang lahat ng naaangkop)

    a. amplitude

    b. entanglement sa ibang mga Qubit

    c. phase

    d. kulay

    e. posibilidad ng mga resulta ng pagsukat

Mga tanong para sa talakayan:

  1. Bakit maaaring ma-visualize ang estado ng isang Qubit sa Bloch sphere, ngunit ang probability distribution ng isang paghagis ng barya ay hindi?

  2. Bakit ang isang barya na lumiligid sa hangin ay hindi ang pinakamahusay na analohiya sa isang quantum superposition state? Anong aspeto ng mga superposition ang hindi nakuha sa analohiyang ito?

Mga hamon na problema:

  1. Gamitin ang Qiskit upang lumikha ng Circuit na nagbabago ng estado 0|0\rangle sa estado 320+12ei5π61\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle