انتقل إلى المحتوى الرئيسي

استكشاف عدم اليقين

في هذه الوحدة ضمن مشروع Qiskit in Classrooms، يجب أن يكون لدى الطلاب بيئة Python تعمل بشكل صحيح مع الحزم التالية مثبّتة:

  • qiskit v2.1.0 أو أحدث
  • qiskit-ibm-runtime v0.40.1 أو أحدث
  • qiskit-aer v0.17.0 أو أحدث
  • qiskit.visualization
  • numpy
  • pylatexenc

لإعداد هذه الحزم وتثبيتها، راجع دليل تثبيت Qiskit. لتشغيل المهام على حواسيب كمية حقيقية، يحتاج الطلاب إلى إنشاء حساب على IBM Quantum® باتباع الخطوات في دليل إعداد حساب IBM Cloud الخاص بك.

تم اختبار هذه الوحدة واستخدمت 8 دقائق من وقت QPU. هذا تقدير فقط، وقد يختلف الاستخدام الفعلي. حسابان مكثفان تم الإشارة إليهما في تعليقات العناوين ويمكن إجراؤهما على المحاكيات إذا كان وقت QPU لدى الطلاب محدودًا. بدونهما، تتطلب الوحدة ~30 ثانية فقط من وقت QPU.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-aer 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'

شاهد شرح الوحدة بواسطة الدكتورة Katie McCormick أدناه، أو اضغط هنا لمشاهدته على YouTube.


مقدمة

على الأرجح سمعت بمبدأ عدم اليقين حتى خارج مقررات الفيزياء. إعادة صياغة شائعة لعدم اليقين هي "بمجرد أن تنظر إلى شيء، تؤثر عليه." وهذا صحيح بالتأكيد. لكن الطريقة الأكثر دقة فيزيائيًا لوصف عدم اليقين هي أن هناك قياسات فيزيائية معينة تتعارض مع بعضها البعض، مما يمنع معرفة كلتيهما في آنٍ واحد بدقة تعسفية. يصادف كثير من الطلاب لأول مرة ثنائية المتغيرات المتعارضة xx وpxp_x، وهما الموضع على المحور xx والزخم الخطي في تلك الاتجاه على التوالي. وللمتغيرين معًا، يُكتب قيد عدم اليقين كالتالي: ΔxΔpx2.\Delta x \Delta p_x \geq \frac{\hbar}{2}. هنا، Δx\Delta x تُسمى "عدم اليقين في xx"، وتعريفها مطابق للانحراف المعياري في الإحصاء، وتُعرَّف بالصيغة: Δx=x2x2.\Delta x = \sqrt{\langle x^2 \rangle - \langle x \rangle^2}. وΔpx\Delta p_x تُعرَّف بنفس الطريقة. لن نشتق هذه العلاقة هنا؛ سنشير فقط إلى أنها تتسق مع فهمنا للأمواج الكلاسيكية. أي أن موجة لها تردد ff وطول موجي λ\lambda مثاليان يمتدان إلى ما لا نهاية كجيب تمام مثالي. كميًا، يقابل ذلك معرفة الزخم بدقة تامة وفق فرضية دي برولي: λ=h/p\lambda = h/p. لكن لكي نعرف wherewhere يتواجد الجسيم الشبيه بالموجة، يجب أن تصبح الموجة التي تصفه أكثر حدةً في الفضاء، كتوزيع غاوسي ضيق جدًا مثلًا. نعرف أننا نستطيع التعبير عن أي دالة مستمرة، بما فيها دوال الموجة الحادة هذه، كمتسلسلة فورييه من دوال جيبية بأطوال موجية مختلفة. لكن كلما أصبحت دالة الموجة أكثر حدةً (وصار الموضع أكثر معرفةً)، نحتاج إلى مزيد من الحدود في متسلسلة فورييه، أي مزيج من أطوال موجية أكثر (وبالتالي، كميًا، قيم زخم أكثر).

بشكل أبسط: حالة ذات زخم محدد جيدًا (جيب تمام مثالي في الفضاء) لها موضع غير محدد جدًا. وحالة ذات موضع محدد جيدًا (كتوزيع ديراك دلتا) لها زخم غير محدد جدًا.

هناك متغيرات أخرى تُظهر هذا التعارض. على سبيل المثال، قد يكون لجسيم إسقاط محدد جيدًا على محور واحد، لكننا لا نعرف شيئًا عن إسقاطه على محور عمودي. على سبيل المثال، الحالة 0|0\rangle \sim |\uparrow\rangle (لكيوبت أو جسيم ذو سبين 1/2) لها إسقاط محدد على المحور zz (يساوي 1 في سياق الكيوبت، و/2\hbar/2 في سياق جسيم السبين 1/2). لكن هذه الحالة يمكن كتابتها كتراكب لحالتين كل منهما لها إسقاط محدد على المحور xx: 0=12(+x+x)|0\rangle = \frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) أو بصورة مكافئة: (10)=12[12(11)+12(11)].\begin{pmatrix} 1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\left[\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1\end{pmatrix}+\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ -1\end{pmatrix}\right]. +x|+\rangle_x لها إسقاط محدد على xx، وكذلك x|-\rangle_x. إذا حددنا إسقاط حالة ما على المحور xx، فإننا لا نعرف الإسقاط على المحور zz. وإذا حددنا الإسقاط على المحور zz، فلا نعرف الإسقاط على xx. هناك اختلافات طفيفة عند مناقشة هذا في سياق السبين والكيوبتات. لكن بشكل عام، للحالات الذاتية لمصفوفات باولي علاقة مثيرة للاهتمام يمكننا استكشافها. طوال هذا الدرس، سنتحقق تجريبيًا من حدسنا بشأن عدم اليقين في هذه المتغيرات المتعارضة، ونتحقق من صحة علاقات عدم اليقين على حواسيب IBM® الكمية.

اختبار بسيط للحدس

في هذه التجربة الأولى وطوال الوحدة، سنستخدم إطار العمل الخاص بالحوسبة الكمية المعروف بـ"أنماط Qiskit"، والذي يُقسّم سير العمل إلى الخطوات التالية:

  • الخطوة 1: تحويل المدخلات الكلاسيكية إلى مسألة كمية
  • الخطوة 2: تحسين المسألة للتنفيذ الكمي
  • الخطوة 3: التنفيذ باستخدام Qiskit Runtime Primitives
  • الخطوة 4: المعالجة اللاحقة والتحليل الكلاسيكي

سنتبع هذه الخطوات بشكل عام، وإن كنا لن نصنّفها صراحةً في كل مرة.

لنبدأ بتحميل بعض الحزم الضرورية بما فيها Runtime primitives. سنختار أيضًا الحاسوب الكمي الأقل انشغالًا المتاح لنا.

يوجد في الكود أدناه كود لحفظ بيانات الاعتماد عند الاستخدام الأول. تأكد من حذف هذه المعلومات من الدفتر بعد حفظها في بيئتك، حتى لا تُشارَك بيانات اعتمادك بالخطأ عند مشاركة الدفتر. راجع إعداد حساب IBM Cloud الخاص بك وتهيئة الخدمة في بيئة غير موثوقة لمزيد من التوجيهات.

from numpy import pi

# 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 (
Batch,
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)

# Use the least busy backend
backend = service.least_busy(min_num_qubits=127)
print(backend.name)
ibm_sherbrooke

إذا نفد وقت الحوسبة الكمية المتاح للطالب أثناء الدرس، يمكن إلغاء تعليق الأسطر أدناه واستخدامها لإعداد محاكٍ يحاكي جزئيًا سلوك الضوضاء للحاسوب الكمي المختار أعلاه.

# Import an estimator, this time from qiskit (we will import from Runtime for real hardware)
from qiskit_aer.primitives import SamplerV2, EstimatorV2
from qiskit_aer.noise import NoiseModel

# Generate the noise model from the backend properties
noise_model = NoiseModel.from_backend(backend)

noisy_sampler = SamplerV2(options={"backend_options": {"noise_model": noise_model}})
noisy_estimator = EstimatorV2(options={"backend_options": {"noise_model": noise_model}})

ربما تتذكر أن الحالة الذاتية لمؤثر Z ليست حالة ذاتية لمؤثر X. سنلاحظ ذلك الآن تجريبيًا عن طريق إجراء قياسات على المحورين xx وzz. للقياس على zz، نستخدم ببساطة qc.measure()، لأن الحواسيب الكمية من IBM مُهيأة للقياس على zz. أما للقياس على xx، فنحتاج إلى تدوير النظام لنقل محور xx إلى اتجاه القياس بفعالية. يتحقق ذلك ببوابة هادامارد. هناك خطوة مماثلة مطلوبة للقياسات على yy. الخطوات اللازمة مجموعة هنا للرجوع إليها:

  • للقياس على zz: qc.measure()
  • للقياس على xx: qc.h() ثم qc.measure()
  • للقياس على yy: qc.sdg()، qc.h()، qc.s ثم qc.measure()

الخطوة 1: تحويل المدخلات الكلاسيكية إلى مسألة كمية

في هذه الحالة، خطوة التحويل هي ببساطة التعبير عن القياسات والتدويرات الموضحة أعلاه في دائرة كمية:

# Step 1: Map

# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Add a first measurement
qc.measure(qr, cr[0])
qc.barrier()

# Change basis so that measurements made on quantum computer which normally tell us about z, now tell us about x.
qc.h(qr)

# Add a second measurement
qc.measure(qr, cr[1])

qc.draw("mpl")

Output of the previous code cell

الخطوة 2: تحسين المسألة للتنفيذ الكمي

تأخذ هذه الخطوة العمليات التي نريد إجراءها وتُعبّر عنها بعبارات وظائف حاسوب كمي محدد. كما تُعيّن مسألتنا على تخطيط الحاسوب الكمي.

# Step 2: 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(qc)

الخطوة 3: التنفيذ باستخدام Qiskit Runtime primitives

يمكننا استخدام Sampler لجمع إحصائيات القياسات. سنُنشئ الـ Sampler primitive للتشغيل على حاسوب كمي حقيقي باستخدام mode = backend. هناك أوضاع أخرى لسير عمل مختلفة، وسنستخدم واحدًا منها أدناه. سيُستخدم Sampler باستدعاء الدالة run() مع قائمة من "pubs" (Primitive Unified Blocs). كل pub يحتوي على ثلاث قيم كحد أقصى تُعرّف معًا وحدة عمل حسابية للـ estimator: الدوائر، والمراقبات، والمعاملات. يمكنك أيضًا تقديم قائمة دوائر وقائمة مراقبات وقائمة معاملات. لمزيد من المعلومات، اقرأ نظرة عامة على PUBs.

نريد التشغيل على حاسوب كمي حقيقي لكي نُجري تجربة فيزياء كمية حقيقية. إذا نفد وقتك المخصص على الحواسيب الكمية الحقيقية، يمكنك التعليق على الكود أدناه الخاص بالحاسوب الكمي، وإلغاء التعليق على الكود الخاص بالتشغيل على محاكٍ.

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

sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()

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

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()

الخطوة 4: المعالجة اللاحقة

هذه حالة بسيطة بشكل خاص من المعالجة اللاحقة، حيث نكتفي بتصوير الأعداد.

لاحظ أن Qiskit يرتّب الكيوبتات والقياسات وغيرها بوضع العنصر ذو الرقم الأصغر في الآخر/على اليمين، وهو اتفاق يُعرف بـ"little-endian". هذا يعني أن العمود أدناه المسمى "10" يشير إلى الأعداد حيث أعطى القياس الأول "0"، وأعطى القياس الثاني "1".

# Step 4: Post-process

from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

إذا لم يُعجبك هذا الاتفاق، يمكنك استخدام marginal_counts لتصوير نتائج كل قياس على حدة:

from qiskit.result import marginal_counts

plot_histogram(
marginal_counts(counts, indices=[0]), title="Counts after first measurement"
)

Output of the previous code cell

plot_histogram(
marginal_counts(counts, indices=[1]), title="Counts after second measurement"
)

Output of the previous code cell

بشكل افتراضي، تُهيأ الحالات في Qiskit في حالة 0|0\rangle. لذا ليس من المفاجئ أن تُسفر معظم القياسات الأولى عن 0|0\rangle. لاحظ مع ذلك أن هناك انقسامًا شبه متساوٍ تقريبًا في القياس الثاني (الذي يُعطي معلومات عن إسقاطات الحالة على xx). يبدو أن هذه الحالة التي تُعطينا نتيجة يمكن التنبؤ بها جدًا للقياسات على zz تُعطينا نتائج غير قابلة للتنبؤ تمامًا للقياسات على xx. دعنا نستكشف هذا.

ماذا يحدث لو أجرينا القياسات بالترتيب المعاكس؟ يمكننا البدء باستخدام بوابة هادامارد للحصول على إحصائيات حول احتمال قياس 0|0\rangle في ±x|\pm\rangle_x. ثم للقياس الثاني، سنعود إلى أساس zz باستخدام بوابة هادامارد ثانية.

# Step 1:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Change basis to measure along x.
qc.h(qr)
qc.measure(qr, cr[0])
qc.barrier()

# Change our basis back to z and make a second measurement
qc.h(qr)
qc.measure(qr, cr[1])

qc.draw("mpl")

Output of the previous code cell

# Step 2: Transpile the circuit for running on a quantum computer

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer

sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()
counts = res[0].data.c.get_counts()

# Run the job on the Aer simulator with noise model from real backend
# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()
# Step 4: Post-process
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

هنا، يبدو أن لدينا قدرًا أقل من إمكانية التنبؤ! سابقًا، كنا نعرف على الأقل ما ستكون عليه نتيجة القياس الأول، أما الآن فلدينا توزيع متساوٍ تقريبًا على جميع الحالات الممكنة. ليس من الصعب فهم سبب حدوث هذا. بدأنا في 0|0\rangle، وهي خليط 50-50 من +x|+\rangle_x وx|-\rangle_x، وفقًا لـ: 0=12(+x+x)|0\rangle=\frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) لذا من الواضح أن يكون احتمال الحصول على الحالة + أو - (المُعيَّنة على 0 و1 في الرسم البياني) متساويًا تقريبًا للقياس الأول. يُنهار القياس على xx الحالة إلى إما الحالة الذاتية +x|+\rangle_x أو الحالة الذاتية x|-\rangle_x. كل من هاتين الحالتين هي خليط 50-50 من 0|0\rangle و1|1\rangle، وفقًا لـ: +x=12(0+1)|+\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle) x=12(01)|-\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle-|1\rangle) فعندما يكون النظام في حالة ذاتية من xx، من الواضح أن القياسات على zz ستُعطي كلًا من 0|0\rangle و1|1\rangle، وستفعل ذلك باحتمالية متساوية تقريبًا. إذن المثال الأول أظهر لنا أن بعض الحالات ستُعطي نتائج يمكن التنبؤ بها جدًا لبعض القياسات، لكن نتائج غير قابلة للتنبؤ لقياسات أخرى. أما المثال الحالي فيُظهر لنا أننا قد نُحقق نتائج أسوأ من ذلك. هناك حالات يمكن أن تُعطينا نتائج غير قابلة للتنبؤ لكلا القياسين، حتى لو اكتفينا بتبديل ترتيب القياسات. دعنا نبحث في مدى اليقين أو عدم اليقين لكمية ما لحالة معينة.

حساب عدم اليقين

يمكننا تكميم هذا باستخدام عدم اليقين، أو التباين. "عدم اليقين" غالبًا يُعرَّف على أنه الجذر التربيعي لـ"تباين" توزيع معيّن. أي أن عدم اليقين لمشاهَد ما SS يُرمَز له بـΔS\Delta S ومعطى بالصيغة

(ΔS)2(SS)2(ΔS)2=S22SS+S2(ΔS)2=S2S2\begin{aligned} (\Delta S)^2 & \equiv \langle (S - \langle S \rangle)^2 \rangle\\ (\Delta S)^2 & = \langle S^2 - 2 S \langle S \rangle +\langle S \rangle^2 \rangle\\ (\Delta S)^2 & = \langle S^2 \rangle - \langle S \rangle^2 \end{aligned}

في حالة مصفوفات باولي، التي فيها S2=IS^2 = I، تصبح المعادلة

(ΔS)2=1S2(\Delta S)^2 = 1 - \langle S \rangle^2

لنطبّق هذا على مثال ملموس. نبدأ بالحالة ψ=+y=12(1i),|\psi\rangle = |+\rangle_y = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ i \end{pmatrix}, ونحدد عدم اليقين للمشاهَد XX في تلك الحالة.

تحقّق من فهمك

اقرأ السؤال التالي، فكّر في إجابتك، ثم انقر على المثلث لإظهار الحل.

احسب عدم اليقين لـXX في الحالة +y=+i|+\rangle_y = |+i\rangle، يدويًا.

الجواب:

ΔX=+iX2+i+iX+i2\Delta X =\sqrt{\langle+i| X^2 |+i\rangle - \langle+i| X |+i\rangle^2}

في الحالة المعطاة، ينتج:

ΔX=12(1i)(0110)(0110)12(1i)(12(1i)(0110)12(1i))2ΔX=12(1i)(1001)(1i)(12(1i)(i1))2ΔX=12(1i)(1i)(12(0)))2ΔX=12(2)=1\begin{aligned} \Delta X & =\sqrt{\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}i \\ 1\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}(0))\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}(2)} = 1 \end{aligned}

يمكننا إنشاء حالة ابتدائية اعتباطية باستخدام qc.initialize(). لاحظ أن صيغة الوحدة التخيلية هنا هي 1j1j.

# Step 1: Map the problem into a quantum circuit

from qiskit.quantum_info import SparsePauliOp
import numpy as np

obs = SparsePauliOp("X")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1j] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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 = noisy_estimator.run([[qc_isa,obs_isa]])
# res=job.result()

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

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

بناءً على معادلتنا أعلاه، (ΔX)2=1X2=1(0.0015...)2ΔX=0.999...(\Delta X)^2 = 1 - \langle X \rangle^2 = 1-(0.0015...)^2 \rightarrow \Delta X = 0.999... لنبقَ مع نفس الحالة، لكن نوجد قيمة التوقع لـZZ الآن:

# Step 1: Map the problem into a quantum circuit

obs = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state to |+>_y
qc.initialize([1, 1j] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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(pubs)
res = job.result()

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

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

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

يمكننا إجراء نفس الحسابات السابقة، لكن سنرى أن التباين قريب جدًا من 1.0 مجددًا. يمكننا أن نستنتج أن ΔXΔZ1.0\Delta X \Delta Z \approx 1.0. وهذا صحيح تقريبًا للحالة التي اخترناها. لكن هل يمكننا تحقيق نتيجة أفضل؟ أو أسوأ؟

تذكّر أن هناك علاقة عدم يقين بين الموضع على اتجاه معيّن، x,x, وكمية التحرك على نفس الاتجاه، px.p_x. بالنسبة لتلك المتغيرات، الصيغة الأكثر شهرة على الأرجح هي ΔxΔpx/2\Delta x \Delta p_x \geq \hbar/2 لو هذا كل ما نتذكره، قد يغرينا التفكير أن ΔX\Delta X وΔZ\Delta Z يمكن أيضًا أن يكون لهما حد أدنى أساسي لعدم اليقين. ربما يستحيل أن يبلغ حاصل ضرب ΔXΔZ\Delta X \Delta Z الصفر؟ لنجرب حالة أخرى ونرَ إذا كان هذا صحيحًا. هذه المرة، سنستخدم ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. لنرَ ماذا يحدث. لاحظ أنه في الكود أدناه، يستطيع estimator قبول مجموعتين من الدوائر والمشاهَدات في نفس تقديم الوظيفة.

# Step 1: Map the problem into a quantum circuit

obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Z")

# Define registers

qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1] / np.sqrt(2))

# Step 2: Transpile the circuit

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

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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, obs1_isa), (qc_isa, obs2_isa)]
job = estimator.run(pubs)
res = job.result()
batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([[qc,obs1],[qc,obs2]])
# res=job.result()

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

print("The expectation value of the first observable is: ", res[0].data.evs)
print("The expectation value of the second observable is: ", res[1].data.evs)
The expectation value of the first observable is:  1.0011036174126302
The expectation value of the second observable is: 0.0029429797670141016

قيمة توقع XX يجب أن تكون قريبة من 1.0، لكن لا تتجاوز 1.0. لا تقلق إذا تجاوزتها بمقدار صغير جدًا. هذا يمكن إرجاعه لعوامل مثل الضوضاء و/أو خطأ القراءة. رغم أن هذا موضوع مهم جدًا، يمكننا تجاهله في الوقت الحالي.

حصلنا على قيمة توقع لـXX قريبة جدًا من 1.0 (ما يقابل تباينًا منخفضًا جدًا لـXX). هذا يجعل حاصل ضرب التباينين منخفضًا جدًا:

ΔXΔZ=1(0.9853)2×1(0.00195)2=0.171.\Delta X \Delta Z = \sqrt{1-(0.9853)^2} \times \sqrt{1-(-0.00195)^2} = 0.171.

رغم أن هذا ليس صفرًا بالضبط، إلا أن هذه القيمة باتت صغيرة مقارنةً بالقيم الذاتية لمشغّلات باولي (±1\pm 1). حسنًا، ربما تتذكر أن علاقة عدم اليقين بين الموضع الخطي وكمية التحرك يمكن كتابتها بشكل مختلف، باستخدام علاقة الإبدال بين المشغّلَين xx وpxp_x بشكل صريح:

ΔxΔpx12[x,px]\Delta x \Delta p_x \geq \frac{1}{2}|\langle [x,p_x] \rangle|

حيث

[x,px]=xpxpxx[x,p_x] = xp_x-p_xx

هو مبدّل xx وpxp_x.

هذه هي الصيغة التي يمكن تعميمها بأسهل طريقة على مشغّلات باولي. بشكل عام، لمشغّلَين AA وBB،

ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.

وفي حالة مصفوفتَي باولي XX وZZ، نحتاج [X,Z][X,Z] لحساب

ΔXΔZ12[X,Z].\Delta X \Delta Z \geq \frac{1}{2}|\langle [X,Z] \rangle|.

نبيّن هذا هنا، ونترك حسابات مشابهة للقارئ كتمرين:

[X,Z]=XZZX=(0110)(1001)(1001)(0110)[X,Z] = XZ-ZX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} [X,Z]=(0110)(0110)=2(0110)[X,Z] = \begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}-\begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} = 2\begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}

هذا جواب مقبول تمامًا، لكن بخطوة إضافية واحدة، نرى

[X,Z]=2i(0ii0)=2iY[X,Z] = -2i\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}=-2iY

وبذلك تصبح علاقة عدم اليقين لدينا

ΔXΔZY.\Delta X \Delta Z \geq |\langle Y \rangle|.

تحقّق من فهمك

اقرأ السؤال التالي، فكّر في إجابتك، ثم انقر على المثلث لإظهار الحل.

احسب [X,Y][X,Y] و[Y,Z][Y,Z]. استخدم هذا لكتابة علاقات عدم اليقين بين XX وYY، وبين YY وZZ.

الجواب:

[X,Y]=XYYX=(0110)(0ii0)(0ii0)(0110)=2(i00i)=2iZ[X,Y] = XY-YX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}-\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} = 2 \begin{pmatrix}i & 0 \\ 0 & -i\end{pmatrix}=2iZ[Y,Z]=YZZY=(0ii0)(1001)(1001)(0ii0)=2(0ii0)=2iX[Y,Z] = YZ-ZY = \begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix} = 2 \begin{pmatrix}0 & i \\ i & 0\end{pmatrix}=2iX

بالجمع مع علاقة عدم اليقين العامة، نحصل على

ΔXΔYZ,\Delta X \Delta Y \geq |\langle Z \rangle|,ΔYΔZX.\Delta Y \Delta Z \geq |\langle X \rangle|.

تحقّق من الاتساق

قبل المتابعة، لنتحقق أن هذا كان متسقًا مع ما وجدناه سابقًا. استخدمنا الحالة ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. ووجدنا أن ΔXΔZ=0.171.\Delta X \Delta Z = 0.171. الآن نعرف أن هذا الحاصل يجب أن يكون أكبر من أو يساوي

Y=12(11)(0ii0)12(11)|\langle Y \rangle|=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix} Y=12(11)(ii)=12(i+i)=0.|\langle Y \rangle| = \frac{1}{2}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix} -i \\ i \end{pmatrix} = \frac{1}{2}(-i+i) = 0.

إذن فعلًا، ΔXΔZ=0.171Y=0\Delta X \Delta Z = 0.171 \geq |\langle Y \rangle|=0 استخدم الأسئلة التالية لبناء حدس حول هذه النتائج:

تحقّق من فهمك

اقرأ الأسئلة التالية، فكّر في إجاباتك، ثم انقر على المثلثات لإظهار الحلول.

أجب على العناصر التالية معًا كمجموعة:

(أ) ما الحالات التي تتوقع أن يكون فيها عدم اليقين في XX صفرًا؟

(ب) ما الحالات التي تتوقع أن يكون فيها عدم اليقين في ZZ صفرًا؟

(ج) في أي حالات تحصل على قيمة توقع صفرية Y\langle Y \rangle؟

(د) هل إجابات الأسئلة السابقة متسقة مع الحالة ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|؟

(هـ) اكتب كودًا للتحقق من هذا صراحةً باستخدام estimator.

الأجوبة:

(أ) نتوقع أن الحالات الذاتية لمشغّل XX تعطي عدم يقين صفريًا في XX. فعلًا، باستخدام ψ=+x,|\psi\rangle = |+\rangle_x, نحصل على ΔX=1X2=112=0.\Delta X = \sqrt{1-\langle X \rangle^2} = \sqrt{1-1^2} = 0.

(ب) نتوقع أن الحالات الذاتية لمشغّل ZZ تعطي عدم يقين صفريًا في ZZ. فعلًا، باستخدام ψ=1,|\psi\rangle = |1\rangle, نحصل على ΔZ=1Z2=1(1)2=0.\Delta Z = \sqrt{1-\langle Z \rangle^2} = \sqrt{1-(-1)^2} = 0.

(ج) نتوقع أن نجد Y=0\langle Y \rangle=0 لأي حالات تعطي، عند قياسها، إسقاطًا موجبًا على محور yy بنفس تكرار الإسقاط السالب. وتشمل هذه الحالات الحالات الذاتية لـXX وZZ.

(د) نعم. يُتوقع أن تكون قيمة حاصل ضرب حالات عدم اليقين ΔXΔZ\Delta X \Delta Z صغيرة جدًا للحالات الذاتية لـXX أو ZZ: ΔXΔZ0.\Delta X \Delta Z \approx 0. وهذا يمكن أن يتحقق لأننا نتوقع أيضًا Y=0\langle Y \rangle=0 لتلك الحالات نفسها. لذا يمكن تحقيق علاقة عدم اليقين.

(هـ) كود مثل الآتي يُثبت هذا:

obs1 = SparsePauliOp.from_list(
[("X", 1.000)]
)
obs2 = SparsePauliOp.from_list(
[("Y", 1.000)]
)
obs3 = SparsePauliOp.from_list(
[("Z", 1.000)]
)
qc = QuantumCircuit(1,1)
qc.ry(pi/2,0)

job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
res=job.result()

حيث تُرجع النتائج جميع قيم التوقع. لاسترداد جميع قيم التوقع وحساب حالات عدم اليقين، يمكننا استخدام:

xs=res[0].data.evs[0]
ys=abs(res[0].data.evs[1])
zs=res[0].data.evs[2]

import math
prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5

أجب على العناصر التالية معًا كمجموعة:

(أ) هل تستطيع التفكير في حالة تكون فيها قيمة التوقع Y\langle Y \rangle كبيرة؟

(ب) هل تتوقع أن تكون حالة عدم اليقين في XX كبيرة أم صغيرة في تلك الحالة نفسها؟

(ج) هل تتوقع أن تكون حالة عدم اليقين في ZZ كبيرة أم صغيرة في تلك الحالة نفسها؟

(د) هل إجابات الأسئلة السابقة متسقة مع الحالة ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|؟

(هـ) اكتب كودًا للتحقق من هذا صراحةً باستخدام estimator.

الأجوبة:

(أ) نتوقع أن نجد Y1\langle Y \rangle\approx 1 للحالة الذاتية لـYY: +y|+\rangle_y.

(ب) نتوقع أن يكون لـXX عدم يقين كبير في الحالة +y,|+\rangle_y, إذ أن قياس XX في تلك الحالة سيعطي نتيجة موجبة وسالبة بنفس التكرار/الاحتمالية.

(ج) نتوقع أن يكون لـZZ عدم يقين كبير في الحالة +y,|+\rangle_y, إذ أن قياس ZZ في تلك الحالة سيعطي نتيجة موجبة وسالبة بنفس التكرار/الاحتمالية.

(د) نعم. يُتوقع قيمة كبيرة لحاصل ضرب حالات عدم اليقين ΔXΔZ\Delta X \Delta Z للحالات الذاتية لـYY، وبالتحديد لـ+y|+\rangle_y. كما نتوقع Y1\langle Y \rangle\approx 1 لتلك الحالة نفسها. إذن كلٌّ من Y\langle Y \rangle وΔXΔZ\Delta X \Delta Z كبيران نسبيًا في هذه الحالة، ومن المعقول أن تتحقق علاقة عدم اليقين مجددًا.

(هـ) كود مثل الآتي يُثبت هذا:

obs1 = SparsePauliOp.from_list(
[("X", 1.000)]
)
obs2 = SparsePauliOp.from_list(
[("Y", 1.000)]
)
obs3 = SparsePauliOp.from_list(
[("Z", 1.000)]
)
qc = QuantumCircuit(1,1)
qc.rx(-pi/2,0)

job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
res=job.result()

حيث تُرجع النتائج جميع قيم التوقع. لاسترداد جميع قيم التوقع وحساب حالات عدم اليقين، يمكننا استخدام:

xs=res[0].data.evs[0]
ys=abs(res[0].data.evs[1])
zs=res[0].data.evs[2]

import math
prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5

اختبار علاقات عدم اليقين

الاختبار الذي أجريناه أعلاه يُثبت صحة علاقة عدم اليقين لاختيار واحد فقط لمتجه الحالة ψ=+x|\psi\rangle = |+\rangle_x. لكي نقنع أنفسنا أن هذا متوافق بشكل عام مع التجارب، يجب أن نجري حسابات مشابهة باستخدام المُقدِّر لاختيارات كثيرة من متجه الحالة. لنبدأ بتدوير متجه الحالة بعيدًا عن محور zz، باستخدام بوابة RY من أجل إنتاج حالات ابتدائية مختلفة باستخدام معامل θ\theta.

# The calculation below uses approximately 3-4 minutes of QPU time.
# Step 1: Map the problem into a quantum circuit

from qiskit.circuit import Parameter
import numpy as np

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0>
theta = Parameter("θ")
qc.ry(theta, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
job = estimator.run(pubs, precision=0.01)
res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

Output of the previous code cell

لاحظ أن المنحنى الأحمر (ΔXΔZ)(\Delta X \Delta Z) دائمًا أكبر من المنحنى البرتقالي Y.\langle Y \rangle. أحيانًا ينخفض حاصل ضرب عدم اليقين ويكون قريبًا قليلًا من الحد، وأحيانًا أخرى يرتفع ويبتعد عن الحد، لكنه دائمًا يُطيع علاقة عدم اليقين.

بالطبع، ربما ليس هذا أفضل اختبار لعلاقة عدم اليقين، لأن الحد Y\langle Y \rangle الخاص بنا دائمًا قريب جدًا من الصفر. لنستخدم حالة كمومية لها إسقاط أكبر على الحالات الذاتية لـ YY. بالتحديد، سنستمر في تدوير 0|0\rangle للأسفل بعيدًا عن محور zz بزوايا متغيرة، لكن الآن سندوّر أيضًا الحالة الناتجة حول zz بزاوية معينة، ربما π/4\pi/4، ونرى ما يحدث.

# The calculation below uses approximately 3-4 minutes of QPU time.
from qiskit.circuit import Parameter
import numpy as np

# Step 1: Map the problem to a quantum circuit

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0> along one plane, and then along a transverse direction.
theta = Parameter("θ")
qc.ry(theta, 0)
qc.rz(pi / 4, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)

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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
job = estimator.run(pubs, precision=0.01)
res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

Output of the previous code cell

الآن نرى أن الحد على عدم اليقين (ΔXΔZ)(\Delta X \Delta Z) يُتحدَّى بجدية! المنحنى الأحمر يقترب كثيرًا من المنحنى البرتقالي أكثر من قبل. في الحقيقة، لو لم تكن هناك ضوضاء، لكانت علاقة عدم اليقين قد بلغت حدها الأقصى بالضبط ((ΔXΔZ)=Y(\Delta X \Delta Z) = \langle Y \rangle) في نقطة واحدة. في وجود الضوضاء وأخطاء القراءة، ليس غريبًا لو أن تشغيلة معينة أعطت (ΔXΔZ)(\Delta X \Delta Z) أكبر قليلًا من Y.\langle Y \rangle. هذا ليس انتهاكًا حقيقيًا لمبدأ عدم اليقين؛ إنه فقط نتيجة لأخطاء غير صفرية.

تحقق من فهمك

اقرأ الأسئلة التالية، وفكر في إجاباتك، ثم اضغط على المثلثات لتكشف الحلول.

اشرح كيف يمكنك دفع هذا إلى الحد الأقصى وجعل Y\langle Y \rangle أكبر ما يمكن؟

الإجابة:

الكود حاليًا فيه أسطر تدوّر الحالة الابتدائية الافتراضية 0|0\rangle للأسفل من محور zz بزاوية معاملية θ\theta ثم أيضًا حول محور zz بزاوية π/4,\pi/4, التي تدوّر متجه الحالة جزءًا من الطريق نحو محور yy.

qc.ry(theta,0)

qc.rz(pi/4,0)

يمكن تغيير التدوير حول zz من π/4\pi/4 إلى π/2\pi/2، من أجل تدوير الكل إلى حالة ذاتية لـ YY:

qc.ry(theta,0)

qc.rz(pi/2,0)

لا نحتاج إلى أي تغييرات أخرى.

غيّر الكود أو انسخه وطبّق هذا التحقق من علاقة عدم اليقين مع تعظيم القيمة المتوقعة لـ Y. هل تتحقق علاقة عدم اليقين؟

الإجابة:

سنستخدم بالضبط الكود من المثال الذي أعلاه، مع

qc.rz(pi/2,0)

استبدالاً لـ

qc.rz(pi/4,0).

الشكل الناتج يجب أن يشبه ما هو أدناه، ونعم، مبدأ عدم اليقين يجب أن يكون ساريًا لا يزال.

A plot comparing uncertainty to the maximum expectation value of the Y operator.

عدّل الكود الذي أعلاه من أجل إنشاء صورة مشابهة، وإثبات من القياسات على الحاسوب الكمومي أن حاصل الضرب ΔXΔY\Delta X \Delta Y يتصرف كما ينبغي. اختر أي مجموعة من الحالات تريدها.

الإجابة:

سنستخدم بالضبط الكود من المثال الذي أعلاه، وفعلًا يمكننا استخدام نفس النتائج من أعلاه، لكن باستخدام القيم المتوقعة لحساب حالات عدم يقين مختلفة. مثلًا، يمكننا استخدام

xs=res[0].data.evs[0]
ys=res[0].data.evs[1]
zs=abs(res[0].data.evs[2])
import math
delx = []
dely = []
prodxy=[]
for i in range(len(xs)):
delx.append((1-xs[i]*xs[i])**0.5)
dely.append((1-ys[i]*ys[i])**0.5)
prodxy.append(((1-xs[i]*xs[i])**0.5)*(1-ys[i]*ys[i])**0.5)

ويمكننا رسم

import matplotlib.pyplot as plt
plt.plot(params, delx, label=r'$\Delta$ X')
plt.plot(params, dely, label=r'$\langle$ Y $\rangle$')
plt.plot(params, zs, label=r'$\Delta$ Z')
plt.plot(params, prodxy, label=r'$\Delta$X $\Delta$Z')
plt.xlabel(r'$\theta$')
plt.ylabel('Expectation/Uncertainty Values')
plt.legend()
plt.show()

تحدي: اكتب كودًا يمسح من خلال قيم كثيرة لـ ϕ\phi، كما مسحنا من خلال قيم كثيرة لـ θ\theta، وأنشئ رسمة ثلاثية الأبعاد تُثبت أن علاقة عدم اليقين لا تُنتهَك أبدًا. اختر أي مراقبات تريدها.

الأسئلة

يستطيع المدرّسون طلب نسخ من هذه الدفاتر مع مفاتيح الإجابات والتوجيه بشأن الوضع في المناهج الشائعة عن طريق ملء هذا الاستطلاع السريع عن طريقة استخدام الدفاتر.

المفاهيم الأساسية:

  • هناك علاقات عدم يقين بين مجموعات كثيرة من المراقبات الفيزيائية، مثل الموضع والزخم الخطي، ومكونات السبين.
  • مصفوفات باولي لا تتبادل. هذا انعكاس رياضي لحقيقة أنه ليس بالإمكان معرفة/تحديد جميع مكونات السبين في نفس الوقت.
  • الحوسبة الكمومية تستخدم مشغلات/مصفوفات باولي بشكل كبير، فمن المفيد معرفة علاقة عدم اليقين لمشغلات باولي، وأيضًا مشغلات السبين التي ترتبط بها ارتباطًا وثيقًا.
  • الصيغة العامة لعدم يقين مشغلَين AA و BB هي ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.
  • الحالة الذاتية a|a\rangle لمشغل معين AA تعطي عدم يقين صفريًا في المراقب الفيزيائي المرتبط بهذا المشغل. حتى تجريبيًا، aAa0.\langle a|A|a\rangle \approx 0.
  • الحالة الذاتية a|a\rangle لمشغل معين AA ستعطي عدم يقين أكبر لمشغل BB لا يتبادل مع AA.
  • النتائج التجريبية باستخدام حاسوب كمومي حقيقي تؤكد الحدس الذي نكتسبه من التمثيلات المصفوفية للمشغلات الفيزيائية.

أسئلة صح/خطأ:

  1. ص/خ يمكن قياس XX و YY في نفس الوقت، لكن ليس ZZ.
  2. ص/خ يمكن قياس XX و ZZ في نفس الوقت، لكن ليس YY.
  3. ص/خ مشغلا الموضع الخطي والزخم الخطي لا يتبادلان.
  4. ص/خ حواسيب IBM الكمومية تقيس على طول ZZ بشكل افتراضي، فيجب إجراء تدوير من أجل القياس في أي اتجاه آخر.
  5. ص/خ الدائرة أدناه تقيس ZZ فعليًا ثم XX.

A circuit diagram showing a measurement, a Hadamard gate, and then another measurement.

أسئلة متعددة الاختيار:

  1. الرسم التخطيطي أدناه يُثبت أيًا من علاقات عدم اليقين التالية؟

    • أ. ΔXΔYZ\Delta X \Delta Y \geq |\langle Z \rangle|
    • ب. ΔYΔZX\Delta Y \Delta Z \geq |\langle X \rangle|
    • ج. ΔZΔXY\Delta Z \Delta X \geq |\langle Y \rangle|
    • د. لا شيء مما سبق

A plot comparing uncertainty to the maximum expectation value of the Y operator.

  1. أي مما يلي هو التسلسل المعياري لإجراء قياس على طول xx؟

    • أ. فقط qc.measure()
    • ب. qc.h() ثم qc.measure()
    • ج. qc.h()، qc.h() ثم qc.measure()
    • د. qc.h()، qc.s، qc.h() ثم qc.measure()
    • هـ. qc.sdg()، qc.h()، qc.s ثم qc.measure()
    • و. qc.sdg()، qc.h()، qc.s، qc.h() ثم qc.measure()
  2. أي من الحالات التالية تعطي أكبر قيمة متوقعة X\langle X \rangle؟

    • أ. +x|+\rangle_x
    • ب. x|-\rangle_x
    • ج. +y|+\rangle_y المعروفة أيضًا بـ +i|+i\rangle
    • د. y|-\rangle_y المعروفة أيضًا بـ i|-i\rangle
    • هـ. 0|0\rangle المعروفة أيضًا بـ |\uparrow\rangle
    • و. 1|1\rangle المعروفة أيضًا بـ |\downarrow\rangle
  3. أي من الحالات التالية تعطي أكبر عدم يقين ΔX\Delta X؟

    • أ. +x|+\rangle_x
    • ب. +y|+\rangle_y المعروفة أيضًا بـ +i|+i\rangle
    • ج. 0|0\rangle المعروفة أيضًا بـ |\uparrow\rangle
    • د. أ وب متساويتين
    • هـ. ب وج متساويتين
    • و. أ، ب، وج متساويات

أسئلة نقاشية:

  1. هل هذا المفهوم لعدم اليقين يتعارض بأي طريقة مع فكرة السبين كسهم متجه في الفضاء الديكارتي؟ ما رأيك في مجال بلوخ؟

  2. افترض أنك توجّه جهاز قياس في اتجاه في المنتصف بين محوري xx و yy. ماذا يحدث؟ هل تستطيع إجراء قياس في هذا الاتجاه؟ كيف يرتبط هذا بعدم اليقين في XX و YY؟