Q क्वांटम लर्निंग हब
Quantum computing, आसान भाषा में
EN
$ lab 02 // gates ही gates

Lab 02 — Quantum gates से मिलिए

Lab 01 में एक qubit ने वह किया जो कोई classical bit नहीं कर सकता। इस lab में आप उन tools से मिलेंगे जिनसे यह होता है: quantum gates। आप ऐसे phases को flip करेंगे जो counts में दिखते ही नहीं, qubit को अपनी मर्ज़ी के angle पर rotate करेंगे, और आखिर में 2 qubits को इतना entangle करेंगे कि वे हमेशा एक-दूसरे से agree करें।

~40 minute beginner Lab 01 पर based

अपनी lab जगाएँ

Lab 01 की हर चीज़ आपकी machine पर अभी भी है। Environment दोबारा activate करें और confirm करें कि quantum stack अभी भी जवाब देता है:

conda activate qc-lab   # prompt में (qc-lab) दिखना चाहिए
import qiskit
print(qiskit.__version__)
✓ Checkpoint: 2.x जैसा version print हो। आज कोई reinstall नहीं — सीधे gates पर चलते हैं।
अटक गए? अगर conda न मिले, तो Lab 01 के steps 1–4 छूट गए थे — पहले उन्हें पूरा करें।

State खुद देखें: Statevector

Measurement counts बताते हैं कि qubit measure क्या हुआStatevector बताता है कि qubit असल में है क्या — वह भी जो measurement देख नहीं सकता। इसके लिए बिना measurement वाला circuit चाहिए:

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit_aer import AerSimulator
sim = AerSimulator()

qc = QuantumCircuit(1)
qc.x(0)
sv = Statevector(qc)
print(sv.to_dict())
✓ Checkpoint: {'1': (1+0j)} — qubit है ही |1⟩, इसीलिए वह हमेशा measure 1 होता है। एक ही सच्चाई के 2 नज़रिए: counts outcomes दिखाते हैं, statevector state दिखाता है।

Z gate: अदृश्य flip

Z gate |1⟩ का phase flip करता है: |1⟩ बन जाता है −|1⟩, और |0⟩ को छूता तक नहीं। देखें दोनों नज़रिए क्या कहते हैं:

qc = QuantumCircuit(1)
qc.x(0)
qc.z(0)   # |1> का phase flip करें
print(Statevector(qc).to_dict())
qc2 = QuantumCircuit(1, 1)
qc2.x(0)
qc2.z(0)
qc2.measure(0, 0)
print(sim.run(qc2, shots=1000).result().get_counts())
✓ Checkpoint: statevector कहता है {'1': (-1+0j)} — minus sign सच में है — फिर भी counts {'1': 1000} ही दिखाते हैं। Measurement phase के प्रति अंधा है। Phase तभी दिखता है जब states interfere करें — और अगले steps में हम इसी का फायदा उठाएँगे।

Y gate: twist के साथ flip

Y gate दोनों काम एक साथ करता है — |0⟩ को |1⟩ में flip करता है और phase भी जोड़ता है:

qc = QuantumCircuit(1)
qc.y(0)
print(Statevector(qc).to_dict())
✓ Checkpoint: {'1': 1j} — qubit flip भी हुआ (यह |1⟩ है) और imaginary phase भी मिला। Counts फिर भी boring {'1': 1000} ही होंगे, क्योंकि — मेरे साथ बोलें — measurement phase नहीं देख सकता।

S और T: flip के fractions

Phases fractions में भी आते हैं। S, Z का square root है — 2 बार लगाएँ तो Z मिलता है। T, S का square root है:

qc = QuantumCircuit(1)
qc.x(0)
qc.s(0)
qc.s(0)   # S 2 बार = Z
print(Statevector(qc).to_dict())
qc2 = QuantumCircuit(1)
qc2.x(0)
qc2.t(0)
qc2.t(0)  # T 2 बार = S
print(Statevector(qc2).to_dict())
✓ Checkpoint: पहला {'1': (-1+0j)} print करता है (यह Z है), दूसरा {'1': 1j} (यह S है)। Gates के square roots होते हैं — quantum control सिर्फ on/off से कहीं बारीक है।

आपकी बारी: HZH = X

यह एक मशहूर identity है: 2 Hadamards के बीच लगा Z gate बिल्कुल X gate जैसा behave करता है। चलाने से पहले — ज़ोर से predict करें कि counts क्या आएँगे:

qc = QuantumCircuit(1, 1)
qc.h(0)
qc.z(0)
qc.h(0)
qc.measure(0, 0)
print(sim.run(qc, shots=1000).result().get_counts())
✓ Checkpoint: {'1': 1000} — HZH ने |0⟩ को |1⟩ में flip किया, बिल्कुल X जैसा। क्यों काम करता है: Hadamards basis बदल देते हैं, जिससे phase-flip bit-flip बन जाता है। आपने अभी जानबूझकर interference use किया — वह चीज़ जो measurement देख नहीं सकता था, अब visible काम कर रही है।

Rotation gates: जो angle चाहें

Gates सिर्फ fixed flips तक सीमित नहीं। RY(θ) qubit को आपकी मर्ज़ी के angle θ पर rotate करता है — switch नहीं, dial है। Half-turn का आधा H जैसा behave करता है:

import math

qc = QuantumCircuit(1, 1)
qc.ry(math.pi/2, 0)   # 90-degree rotation
qc.measure(0, 0)
print(sim.run(qc, shots=1000).result().get_counts())

अब इसे 45 degrees पर लाएँ और bias को खुद देखें:

qc2 = QuantumCircuit(1, 1)
qc2.ry(math.pi/4, 0)  # 45-degree rotation
qc2.measure(0, 0)
print(sim.run(qc2, shots=1000).result().get_counts())
✓ Checkpoint: पहला H जैसा ~50/50 है; दूसरा biased है, कुछ ऐसा {'0': 853, '1': 147}। आपने अभी probability चुनी है। कोई classical bit यह नहीं कर सकता — यह continuous control ही quantum algorithms का असली engine है।

2 qubits: CNOT

CNOT (controlled-NOT) पहला gate है जिसे 2 qubits चाहिए: यह target को तभी flip करता है जब control |1⟩ हो। Qubit 0 पर control, qubit 1 पर target:

qc = QuantumCircuit(2, 2)
qc.x(0)        # control qubit -> |1>
qc.cx(0, 1)    # target flip करें, क्योंकि control |1> है
qc.measure(0, 0)
qc.measure(1, 1)
print(qc.draw())
print(sim.run(qc, shots=1000).result().get_counts())
✓ Checkpoint: {'11': 1000} — bitstring को (qubit 1, qubit 0) के क्रम में पढ़ें: दोनों 1 हैं। अब qc.x(0) वाली line हटाकर दोबारा चलाएँ: {'00': 1000}। Control |0⟩ → target को छुआ तक नहीं। यह gate दूसरे qubit पर condition लगाता है — यही conditional power multi-qubit circuits को दिलचस्प बनाती है।

आपकी बारी: Bell pair

Control qubit को पहले superposition में डालें, फिर CNOT। चलाने से पहले predict करें: 4 outcomes — 00, 01, 10, 11 — में से कौन से दिखेंगे?

bell = QuantumCircuit(2, 2)
bell.h(0)       # control -> superposition
bell.cx(0, 1)   # target को इससे entangle करें
bell.measure(0, 0)
bell.measure(1, 1)
counts = sim.run(bell, shots=1000).result().get_counts()
print(counts)
✓ Checkpoint: सिर्फ {'00': ~500, '11': ~500} — कभी 01 नहीं, कभी 10 नहीं। दोनों qubits entangled हैं: एक को measure करें और दूसरे का पता तुरंत चल जाता है, चाहे वे कितनी भी दूर हों। Einstein ने इसे "spooky action at a distance" कहा था। आपने इसे अपने laptop पर 4 lines में बना लिया।
अटक गए? 01 या 10 दिख रहा है? Gate order check करें — H, CNOT से पहले आना चाहिए, और CNOT का control qubit 0 होना चाहिए: cx(0, 1), न कि cx(1, 0)

Debrief — आपने क्या साबित किया?

Gates quantum computing के verbs हैं। आपने verify किया कि phase असली है पर measurement को दिखता नहीं (Z, Y, S, T), कि rotation gates probability पर continuous control देते हैं (RY), और कि एक controlled gate 2 qubits को एक ही entangled fate में बाँध सकता है (CNOT → Bell pair)। 10 gates, एक simulator, zero hardware।

अगले labs में इन्हीं gates को जोड़कर असली protocols बनाएँगे — key distribution, teleportation। और H gate superposition क्यों बनाता है, यह समझने के लिए qubit वाला पाठ देखें।