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

الإرسال الكمي عن بُعد

لهذه الوحدة في برنامج 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 الخاص بك.

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

# Added by doQumentation — required packages for this notebook
!pip install -q 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.


المقدمة والخلفية النظرية

الإرسال الكمي عن بُعد هو تقنية في الفيزياء الكمية تتيح نقل المعلومات الكمية من موقع إلى آخر دون تحريك الجسيمات فيزيائيًا. على عكس مفهوم الإرسال عن بُعد في الخيال العلمي، لا تتضمن هذه العملية نقل المادة. بدلًا من ذلك، تعتمد على مبدأ التشابك الكمي، حيث يصبح جسيمان مترابطَين بغض النظر عن المسافة بينهما. من خلال سلسلة من القياسات الدقيقة والتواصل الكلاسيكي، يمكن إعادة إنشاء الحالة الكمية لجسيم واحد في جسيم آخر في موقع بعيد، مما يُحقق "إرسالًا كميًا" للمعلومات عن بُعد. في هذه الوحدة، سنرى كيف يعمل هذا رياضيًا، ثم سننفّذ الإرسال الكمي عن بُعد على حاسوب كمي حقيقي. المقدمة هنا ستكون مختصرة؛ لمزيد من الخلفية حول المعلومات الكمية وشرح أوسع حول عملية الإرسال عن بُعد، نوصي بدورة John Watrous حول أساسيات المعلومات الكمية، وتحديدًا القسم الخاص بـالإرسال عن بُعد.

البتات الكلاسيكية يمكن أن تكون في الحالتين 0 أو 1. أما البتات الكمية (الكيوبتات) فيمكنها أن تكون في حالات كمية يُرمز إليها بـ 0|0\rangle و 1|1\rangle، وكذلك تركيبات خطية من هذه الحالات تُسمى "التراكب"، مثل ψ=α00+α11|\psi\rangle = \alpha_0|0\rangle +\alpha_1|1\rangle، حيث α0,α1C,\alpha_0,\alpha_1 \in \mathbb{C}, و α02+α12=1.|\alpha_0|^2+|\alpha_1|^2 = 1. رغم أن الحالات يمكنها الوجود في هذا التراكب، فإن قياس الحالة سيُحوّلها إلى إحدى الحالتين 0|0\rangle أو 1|1\rangle. المعاملان aa و bb مرتبطان باحتمال كل نتيجة قياس وفقًا لـ

P0=α02P_0 = |\alpha_0|^2 P1=α12P_1 = |\alpha_1|^2

ومن هنا يأتي الشرط α02+α12=1.|\alpha_0|^2+|\alpha_1|^2 = 1.

ميزة أساسية أخرى هي أن البتات الكمية يمكن أن تكون "متشابكة"، مما يعني أن قياس كيوبت واحد يمكن أن يؤثر على نتيجة قياس كيوبت آخر متشابك معه. فهم كيف يختلف التشابك عن الارتباطات الكلاسيكية البسيطة أمر يحتاج إلى بعض التدقيق. لنشرح أولًا طريقة التدوين. لنسمّ كيوبتَين ينتمي أحدهما للصديق 0 (أليس) والآخر للصديق 1 (بوب)، وكلاهما في الحالة 0|0\rangle

0B0A|0\rangle_B|0\rangle_A

أو

0100|0\rangle_1|0\rangle_0

وتُختصر أحيانًا إلى

00|00\rangle

لاحظ أن الكيوبت ذو الرقم الأصغر (أو الحرف الأصغر) يقع في أقصى اليمين. هذه اتفاقية تُسمى ترميز "little-endian"، وتُستخدم في جميع أنحاء Qiskit. إذا كانت حالة الكيوبتَين للصديقَين هي 00|00\rangle، وقاسا حالة كيوبتَيهما كلٌّ على حدة، فسيجد كل منهما القيمة 0. وبالمثل إذا كانت الكيوبتات في الحالة 11|11\rangle، فستُعطي قياساتهما القيمة 1. هذا لا يختلف عن الحالة الكلاسيكية. لكن في الحوسبة الكمية، يمكننا دمج ذلك مع التراكب للحصول على حالات مثل

12(00+11)\frac{1}{\sqrt{2}}(|00\rangle+|11\rangle)

في حالة كهذه، لا يُعرف بعد ما إذا كانت كيوبتات أليس وبوب في الحالة 0 أو 1، بل لم تُحدَّد ذلك الطبيعة حتى الآن، ومع ذلك نعلم أنهما سيقيسان نفس الحالة لكيوبتَيهما. فمثلًا، إذا قاس بوب كيوبته ووجده في الحالة 0|0\rangle، فالطريقة الوحيدة لحدوث ذلك هي أن يكون القياس قد أدى إلى انهيار حالة الكيوبتَين إلى إحدى الحالتين الممكنتين، وتحديدًا إلى 00|00\rangle. وهذا يترك كيوبت أليس أيضًا في الحالة 0|0\rangle.

تشابك الكيوبتات بهذه الطريقة لا يستلزم أن تظل الكيوبتات قريبة فيزيائيًا من بعضها. بمعنى آخر، يمكننا تشابك الكيوبتات، ثم إبعادها مسافات كبيرة عن بعضها، واستخدام تشابكها لإرسال المعلومات. الحالة المتشابكة كالتي ذكرناها أعلاه هي وحدة أساسية للتشابك، وتُعرف أحيانًا بـ"e-bit"، أي بت تشابك واحد. يمكن التفكير في هذه الـe-bits كموارد في التواصل الكمي، إذ يمكن استخدام كل e-bit مشترك بين شريكَين بعيدَين، كما سنوضح هنا، لنقل المعلومات من موقع إلى آخر.

أول ما يخطر ببال كثير من الناس عند تعلّم هذا للمرة الأولى هو انتهاك النسبية: هل يمكننا استخدام هذا لإرسال المعلومات أسرع من الضوء؟ بكل الوسائل استمر في التساؤل ومراجعة القواعد العلمية، لكن للأسف هذا لن يُتيح لنا إرسال المعلومات أسرع من الضوء، لأسباب ستتضح خلال هذه الوحدة. تلميح مسبق: الأمر المدهش هو أنه ليس بسبب سرعة انتشار هذا الانهيار، الذي يبدو أنه يحدث فعلًا أسرع من الضوء [1]. نبدأ بمتعاونَين هما أليس وبوب، اللذان يتواجدان في البداية في نفس الموقع ويمكنهما العمل معًا على نفس الكيوبتات. سيقوم هذان المتعاونان بتشابك كيوبتَيهما. ثم سيتفرقان إلى موقعَين جغرافيَّين مختلفَين، آخذَين كيوبتَيهما معهما. ستحصل أليس بعد ذلك على معلومات كمية على كيوبت جديد Q. لا نضع أي افتراضات حول المعلومات الموجودة على Q. قد تكون حالة Q سرًا مجهولًا لأليس؛ وقد تكون مجهولة للجميع. لكن تُوكَل إلى أليس مهمة نقل المعلومات الموجودة على Q إلى بوب. وستفعل ذلك باستخدام الإرسال الكمي عن بُعد.

لتحقيق ذلك، سنحتاج إلى معرفة بعض العمليات الكمية أو "البوابات".

العوامل الكمية (البوابات)

لا بأس بتخطي هذا القسم إذا كنت تعرف البوابات الكمية مسبقًا. وإذا أردت فهم هذه البوابات بشكل أفضل، اطّلع على أساسيات المعلومات الكمية، لا سيما الدرسَين الأولَين، على IBM Quantum Learning.

لبروتوكول الإرسال عن بُعد هذا سنستخدم أساسًا نوعَين من البوابات الكمية: بوابة Hadamard وبوابة CNOT. وبعض البوابات الأخرى ستؤدي دورًا أقل: بوابة XX، وبوابة ZZ، وبوابة SWAP.

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

الحالات التي قدّمناها بالفعل تم اختيارها (جزئيًا بالاتفاق وجزئيًا بالقيود) لتكون لها أشكال متجهية:

0=(10)|0\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix} 1=(01)|1\rangle = \begin{pmatrix}0 \\ 1\end{pmatrix}

وبهذه الطريقة، يمكن كتابة حالة اعتباطية ψ=a0+b1|\psi\rangle = a|0\rangle+b|1\rangle على النحو التالي:

ψ=(ab)|\psi\rangle =\begin{pmatrix}a \\ b\end{pmatrix}

هناك بعض الاختيار في كيفية تمديد الترميز إلى حالات متعددة الكيوبتات، لكن الاختيار أدناه شائع جدًا:

00=(1000),01=(0100),10=(0010),11=(0001).|00\rangle = \begin{pmatrix}1 \\ 0 \\ 0 \\ 0\end{pmatrix},|01\rangle = \begin{pmatrix}0 \\ 1 \\ 0 \\ 0\end{pmatrix}, |10\rangle = \begin{pmatrix}0 \\ 0 \\ 1 \\0\end{pmatrix},|11\rangle = \begin{pmatrix}0 \\ 0 \\ 0 \\ 1\end{pmatrix}.

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

بوابة H هادامارد: تُنشئ حالة تراكب. بوابة أحادية الكيوبت.

H0=12(0+1),H|0\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right), H1=12(01)H|1\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle-|1\rangle\right) H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

يُبنى دائرة تحتوي على بوابة هادامار بالطريقة التالية:

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")

Output of the previous code cell

بوابة CNOT (التحكم-لا): تعمل هذه البوابة على كيوبتين: كيوبت تحكم وكيوبت هدف. تتحقق من حالة كيوبت التحكم دون أن تغيّرها. لكن إذا كان كيوبت التحكم في الحالة 1|1\rangle، تقوم البوابة بتغيير حالة كيوبت الهدف؛ أما إذا كانت حالة كيوبت التحكم 0|0\rangle، فلا يحدث أي تغيير. في التمثيل أدناه، افترض أن الكيوبت AA (أقصى اليمين) هو كيوبت التحكم، والكيوبت BB (أقصى اليسار) هو الهدف. الصيغة المستخدمة أدناه هي CNOT(qcontrol,qtarget)BA.CNOT(q_{control},q_{target})|BA\rangle.

CNOT(A,B)00=00,CNOT(A,B)01=11,CNOT(A,B)10=10,CNOT(A,B)11=01CNOT(A,B)|00\rangle = |00\rangle, \\ CNOT(A,B)|01\rangle = |11\rangle, \\ CNOT(A,B)|10\rangle = |10\rangle, \\ CNOT(A,B)|11\rangle = |01\rangle

قد ترى أحيانًا CNOT مكتوبةً بحيث يكون ترتيب كيوبت التحكم والهدف مضمنًا ضمنيًا. لكن لا غموض من هذا النوع في الكود أو في مخططات الدوائر.

CNOT=(1000000100100100)CNOT=\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}

تبدو بوابة CNOT مختلفة قليلًا في الدائرة لأنها تحتاج لكيوبتين. هكذا يتم تنفيذها:

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")

Output of the previous code cell

تحقق من فهمك

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

معظم البوابات لها نفس الشكل المصفوفي في Qiskit كما في أي مكان آخر. لكن بوابة CNOT تعمل على كيوبتين، وبالتالي يصبح ترتيب الكيوبتات مسألةً ذات أهمية. النصوص التي ترتب الكيوبتات بالصيغة q0,q1,...|q_0,q_1,...\rangle ستعرض شكلًا مصفوفيًا مختلفًا لبوابات CNOT لديها. تحقق بضرب المصفوفات صراحةً من أن مصفوفة CNOT أعلاه لها التأثير الصحيح على الحالة 01.|01\rangle.

الجواب:

CNOT01=(1000000100100100)(0100)=(0001)=11CNOT|01\rangle =\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}\begin{pmatrix}0 \\ 1 \\ 0 \\0\end{pmatrix} = \begin{pmatrix}0 \\ 0 \\ 0 \\1\end{pmatrix} = |11\rangle

بوابة XX: مكافئة لعملية NOT. بوابة أحادية الكيوبت.

X0=1,X1=0X|0\rangle = |1\rangle,\\X|1\rangle=|0\rangle X=(0110)X=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

في Qiskit، إنشاء دائرة تحتوي على بوابة XX يبدو هكذا:

qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")

Output of the previous code cell

بوابة ZZ: تضيف "طورًا" إلى الحالة (عامل أمامي، يكون في حالة الحالات الذاتية لـ Z وهي 0|0\rangle و1|1\rangle إما 1 أو -1 على التوالي). بوابة أحادية الكيوبت.

Z0=0,Z1=1Z|0\rangle = |0\rangle,\\Z|1\rangle=-|1\rangle Z=(1001)Z=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}

في Qiskit، إنشاء دائرة تحتوي على بوابة ZZ يبدو هكذا:

qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")

Output of the previous code cell

النظرية

لنضع البروتوكول الخاص بالإرسال الكمي باستخدام الرياضيات. ثم في القسم التالي، سنحقق هذا الإعداد باستخدام حاسوب كمي.

ربط كيوبتي أليس وبوب بالتشابك: في البداية، كيوبت أليس وكيوبت بوب كل منهما على حدة في الحالة 0|0\rangle (افتراض معقول وهو أيضًا التهيئة الصحيحة لحواسيب IBM® الكمية). يمكننا كتابة هذا كـ 0B0A|0\rangle_B|0\rangle_A أو ببساطة 00|00\rangle. لنحسب ما يحدث حين تطبّق أليس وبوب بوابة هادامار على كيوبت أليس، ثم بوابة CNOT مع كيوبت أليس كتحكم وكيوبت بوب كهدف:

CNOT(A,B)HA0B0A=CNOT(A,B)0B12(0A+1A)=12(CNOT(A,B)0B0A+CNOT(A,B)0B1A)=12(0B0A+1B1A)\begin{aligned} CNOT(A,B)H_A |0\rangle_B|0\rangle_A &= CNOT(A,B)|0\rangle_B\frac{1}{\sqrt{2}}\left(|0\rangle_A+|1\rangle_A\right)\\ &=\frac{1}{\sqrt{2}}\left(CNOT(A,B)|0\rangle_B|0\rangle_A+CNOT(A,B)|0\rangle_B|1\rangle_A\right)\\ &=\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right) \end{aligned}

لاحظ أن كيوبتي أليس وبوب أصبحا متشابكَين الآن. رغم أن الطبيعة لم تحدد بعد إذا كان كيوبتاهما في الحالة 0|0\rangle أم 1|1\rangle، إلا أنه من المعروف أن كيوبتيهما في نفس الحالة.

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

تقديم Q: يتم تجهيز الحالة السرية على الكيوبت Q:

ψQ=α00Q+α11Q|\psi\rangle_Q = \alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q

في هذه المرحلة Q موجود ببساطة بجانب كيوبت أليس (A). لم يحدث أي تشابك، لذا يمكن كتابة الحالة الكمية للكيوبتات الثلاثة معًا كـ:

ψABψQ=12(0B0A+1B1A)(α00Q+α11Q).|\psi\rangle_{AB}|\psi\rangle_Q = \frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)\left(\alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q\right).

الهدف هو نقل المعلومات الموجودة على Q من موقع أليس إلى موقع بوب. في هذه المرحلة لا نضع أي شروط أو متطلبات تتعلق بالسرية أو سرعة نقل المعلومات. نحن نستكشف فقط كيف يمكن أن تنتقل المعلومات من أليس إلى بوب. بما أن المعلومات تبدأ على Q، سنفترض أن Q يُعيَّن له أصغر رقم في أرقام الكيوبتات، بحيث يجعله الترميز القليل-الأرقام (little endian) الكيوبت الأقصى يمينًا في الرياضيات أدناه.

تشبيك أليس للكيوبتين A و Q: تطبّق أليس الآن بوابة CNOT مع كيوبتها الخاص كتحكم و Q كهدف، ثم تطبّق بوابة هادامار على Q. لنحسب حالة الثلاثة كيوبتات بعد هذه العملية:

HQCNOT(A,Q)ψABψQ=HQCNOT(A,Q)12(0B0A+1B1A)(α00Q+α11Q)=HQCNOT(A,Q)12((α00B0A0Q+α10B0A1Q)+(α01B1A0Q+α11B1A1Q))=HQ12(α00B0A0Q+α10B1A1Q+α01B1A0Q+α11B0A1Q)=12(α00B0A0Q+α00B0A1Q+α10B1A0Qα10B1A1Q)+12(α01B1A0Q+α01B1A1Q+α11B0A0Qα11B0A1Q)\begin{aligned} H_Q CNOT(A,Q)|\psi\rangle_{AB}|\psi\rangle_Q &= H_Q CNOT(A,Q)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)\left(\alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q\right)\\ &= H_Q CNOT(A,Q)\frac{1}{\sqrt{2}}\left(\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_1 |0\rangle_B|0\rangle_A|1\rangle_Q\right)+\left(\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_1 |1\rangle_B|1\rangle_A|1\rangle_Q\right)\right)\\ &= H_Q \frac{1}{\sqrt{2}}\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_1 |0\rangle_B|1\rangle_A|1\rangle_Q+\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_1 |1\rangle_B|0\rangle_A|1\rangle_Q\right)\\ &= \frac{1}{2}\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_0 |0\rangle_B|0\rangle_A|1\rangle_Q + \alpha_1 |0\rangle_B|1\rangle_A|0\rangle_Q-\alpha_1 |0\rangle_B|1\rangle_A|1\rangle_Q\right)\\ &+\frac{1}{2}\left(\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_0 |1\rangle_B|1\rangle_A|1\rangle_Q + \alpha_1 |1\rangle_B|0\rangle_A|0\rangle_Q - \alpha_1 |1\rangle_B|0\rangle_A|1\rangle_Q\right) \end{aligned}

بما أن A و Q في نفس الموقع، لنجمّع الحدود أعلاه وفقًا لنتائج القياسات على الكيوبتين A و Q:

ψ=12((α00B+α11B)0A0Q+(α00Bα11B)0A1Q+(α10B+α01B)1A0Q+(α10B+α01B)1A1Q)\begin{aligned} |\psi\rangle = \frac{1}{2}\left((\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|0\rangle_A|0\rangle_Q + (\alpha_0 |0\rangle_B-\alpha_1 |1\rangle_B)|0\rangle_A|1\rangle_Q + (\alpha_1 |0\rangle_B+\alpha_0 |1\rangle_B)|1\rangle_A|0\rangle_Q+ (-\alpha_1 |0\rangle_B+\alpha_0 |1\rangle_B)|1\rangle_A|1\rangle_Q \right)\\ \end{aligned}

تحقق من فهمك

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

بناءً على التعبير أعلاه لحالات الكيوبتات الثلاثة، ما هو احتمال أن يُعطي قياس الكيوبتين A و Q النتيجة 0A0Q?|0\rangle_A|0\rangle_Q?

الجواب:

25%. لترى ذلك، تذكّر أن حالة بوب يجب أن تكون منظّمة، لذا A0Q0120A0Q(α00B+α11B)2=14(α00B+α11B)2=14 |_A \langle0|_Q\langle0| \frac{1}{2} |0\rangle_A|0\rangle_Q (\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|^2 = \frac{1}{4}|(\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|^2 = \frac{1}{4}

الآن، يمكن لأليس قياس الكيوبتين A و Q. لا تستطيع التحكم في نتيجة ذلك القياس، إذ إن القياسات الكمية احتمالية. لذا حين تقيس، هناك 4 نتائج محتملة وجميعها متساوية الاحتمال: 0A0Q,|0\rangle_A|0\rangle_Q, 0A1Q,|0\rangle_A|1\rangle_Q, 1A0Q,|1\rangle_A|0\rangle_Q, و1A1Q.|1\rangle_A|1\rangle_Q. لاحظ أن كل نتيجة لها انعكاسات مختلفة على كيوبت بوب. على سبيل المثال، إذا وجدت أليس كيوبتيها في الحالة 0A0Q,|0\rangle_A|0\rangle_Q, فهذا يعني انهيار الحالة الكمية الكاملة ذات الثلاثة كيوبتات إلى (α00B+α11B)0A0Q.(\alpha_0|0\rangle_B+\alpha_1|1\rangle_B)|0\rangle_A|0\rangle_Q. نتائج القياسات الأخرى لأليس تُعطي حالات مختلفة لبوب. هذه النتائج مجمّعة في الجدول أدناه.

نتيجة أليسحالة بوبالتعليمات لبوبالنتيجة
0A0Q \vert 0\rangle_A \vert 0\rangle_Qα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_Bلا شيءα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
0A1Q \vert 0\rangle_A \vert 1\rangle_Qα00Bα11B\alpha_0\vert 0\rangle_B-\alpha_1\vert 1\rangle_BZZα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
1A0Q \vert 1\rangle_A \vert 0\rangle_Qα10B+α01B\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXXα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
1A1Q \vert 1\rangle_A \vert 1\rangle_Qα10B+α01B-\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXX ثم ZZα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B

لجميع نتائج القياسات المحتملة على كيوبتي أليس، يُترك كيوبت بوب في حالة تشبه بشكل ما الحالة السرية الأصلية على Q. في الحالة التي تقيس فيها أليس 0C0A|0\rangle_C|0\rangle_A (الصف الأول من الجدول)، يُترك كيوبت بوب في الحالة السرية تمامًا! في الحالات الأخرى، هناك شيء غير صحيح في الحالة: إما أن المعاملات (α\alpha's) مقلوبة، أو أن هناك إشارة "-" حيث يجب أن تكون "+" أو كلاهما. لكي يُعدّل بوب كيوبته ليصبح مساويًا تمامًا للحالة السرية، يجب على أليس الاتصال ببوب (استخدام وسيلة من وسائل الاتصال الكلاسيكي) وإخباره بإجراء عمليات إضافية على كيوبته كما هو موضح في الجدول. على سبيل المثال، في الصف الثالث تكون المعاملات مقلوبة. إذا اتصلت أليس ببوب وأخبرته بتطبيق بوابة XX على كيوبته، فإنها تحوّل 0|0\rangle إلى 1|1\rangle والعكس، وتظهر الحالة السرية.

ينبغي أن يكون واضحًا الآن لماذا لا يمكننا استخدام هذا الإعداد لإرسال معلومات أسرع من الضوء. قد نكون محظوظين ونقيس 0A0Q,|0\rangle_A|0\rangle_Q, ما يعني أن بوبًا لديه الحالة السرية بالضبط فورًا. لكن بوب لا يعلم ذلك حتى نتصل به ونخبره: "قسنا 0A0Q|0\rangle_A|0\rangle_Q، لذا لا يلزمك فعل أي شيء."

في تجربة الفكر، كثيرًا ما يُفصل الكيوبتان فيزيائيًا وينقلان إلى موقع جديد. تستخدم حواسيب IBM® الكمية كيوبتات حالة صلبة على شريحة لا يمكن فصلها. لذا بدلًا من نقل أليس وبوب إلى مواقع مختلفة، سنفصل المعلومات على الشريحة نفسها باستخدام ما يُسمى "بوابات الإبدال" لنقل المعلومات من كيوبت إلى آخر.

التجربة الأولى: الإرسال الكمي الأساسي

توصي IBM Quantum بمعالجة مسائل الحوسبة الكمية باستخدام إطار عمل نسمّيه "أنماط Qiskit". يتكون من الخطوات التالية:

  • الخطوة 1: صِغ مسألتك كدائرة كمية
  • الخطوة 2: حسّن دائرتك للتشغيل على عتاد كمي حقيقي
  • الخطوة 3: نفّذ مهمتك على حواسيب IBM الكمية باستخدام Runtime Primitives
  • الخطوة 4: معالجة النتائج ما بعد التنفيذ

الخطوة 1: صِغ مسألتك كدائرة كمية

كل الرياضيات التي أجريناها أعلاه كانت تحديدًا للخطوة 1. سننفّذها الآن ببناء دائرتنا الكمية باستخدام Qiskit! نبدأ بإنشاء دائرة كمية بثلاثة كيوبتات، ونشبّك كيوبتَي أليس وبوب. سنجعلهما الكيوبتين 1 و2، ونحتجز الكيوبت 0 للحالة السرية.

# Step 1: Map your problem to a quantum circuit

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

# Define registers
secret = QuantumRegister(1, "Q")
Alice = QuantumRegister(1, "A")
Bob = QuantumRegister(1, "B")

cr = ClassicalRegister(3, "c")

qc = QuantumCircuit(secret, Alice, Bob, cr)

# We entangle Alice's and Bob's qubits as in our work above. We apply a Hadamard gate and then a CNOT gate.
# Note that the second argument in the CNOT gate is the target.
qc.h(Alice)
qc.cx(Alice, Bob)

# Inserting a barrier changes nothing about the logic. It just allows us to force gates to be positioned in "layers".
qc.barrier()

# Now we will use random variables to create the secret state. Don't worry about the "u" gate and the details.
np.random.seed(42) # fixing seed for repeatability
theta = np.random.uniform(0.0, 1.0) * np.pi # from 0 to pi
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi

# Assign the secret state to the qubit on the other side of Alice's (qubit 0), labeled Q
qc.u(theta, varphi, 0.0, secret)
qc.barrier()

# Now entangle Q and Alice's qubits as in the discussion above.
qc.cx(secret, Alice)
qc.h(secret)
qc.barrier()

# Now Alice measures her qubits, and stores the outcomes in the "classical registers" cr[]
qc.measure(Alice, cr[1])
qc.measure(secret, cr[0])

# Now we insert some conditional logic. If Alice measures Q in a "1" we need a Z gate, and if Alice measures A in a "1" we need an X gate (see the table).
with qc.if_test((cr[1], 1)):
qc.x(Bob)
with qc.if_test((cr[0], 1)):
qc.z(Bob)

qc.draw(output="mpl")

Output of the previous code cell

هذا كل ما يلزم لإرسال حالة أليس كميًا إلى بوب. لكن تذكّر أننا حين نقيس حالة كمية α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle نجد إما 0|0\rangle أو 1.|1\rangle. لذا في نهاية كل هذا، بوب لديه بالتأكيد الحالة السرية لأليس، لكن لا يمكننا التحقق من ذلك بسهولة عبر القياس. لكي يخبرنا القياس أننا أجرينا هذا بشكل صحيح، علينا استخدام حيلة. استخدمنا مؤثرًا سمّيناه "U" اختصارًا لـ "وحدوي" لتجهيز الحالة السرية لأليس. يمكننا تطبيق عكس U في نهاية دائرتنا. إذا كان U يحوّل حالة 0|0\rangle لأليس إلى α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle، فإن عكس U سيحوّل α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle لبوب عودةً إلى 0.|0\rangle. هذا الجزء الأخير لن يكون ضروريًا إذا كان الهدف مجرد نقل المعلومات الكمية. نحن نفعل هذا فقط للتحقق من أنفسنا.

# Add the inverse of U and measure Bob's qubit.
qc.barrier()

qc.u(theta, varphi, 0.0, Bob).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(Bob, cr[2]) # add measurement gate

qc.draw(output="mpl")

Output of the previous code cell

لذا إذا أجرينا هذا بشكل صحيح، يجب أن يُعطي قياسنا على كيوبت بوب الحالة 0|0\rangle. بالطبع، هذه القياسات احتمالية. لذا إذا كان هناك احتمال ولو صغير لقياس كيوبت بوب في الحالة 1|1\rangle، فقد يُفضي قياس واحد إلى 1.|1\rangle. نودّ فعلًا إجراء قياسات كثيرة للتأكد من أن احتمال 0|0\rangle مرتفع جدًا.

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

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

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

يوجد كود أدناه لحفظ بيانات اعتمادك عند الاستخدام الأول. تأكد من حذف هذه المعلومات من الدفتر بعد حفظها في بيئتك، حتى لا تُشارَك بيانات اعتمادك عن طريق الخطأ حين تشارك الدفتر. اطّلع على Set up your IBM Cloud account وInitialize the service in an untrusted environment لمزيد من التوجيهات.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Load the Qiskit Runtime service

# 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()

# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_sherbrooke

نُفعّل صراحةً المنطق على القياسات.

from qiskit.circuit import IfElseOp

backend.target.add_instruction(IfElseOp, name="if_else")

الآن يجب علينا "نقل" الدائرة الكمية (transpile). تتضمن هذه العملية خطوات فرعية كثيرة وهي موضوع رائع. لإعطاء مثال على خطوة فرعية: ليست كل الحواسيب الكمية قادرة على تنفيذ جميع البوابات المنطقية في Qiskit مباشرة. يجب أن نكتب البوابات من دائرتنا بدلالة البوابات التي يستطيع الحاسوب الكمي تنفيذها. يمكننا تنفيذ ذلك، وعمليات أخرى، باستخدام مدير مسار مُعيَّن مسبقًا. ضبط optimization = 3 (أعلى مستوى من التحسين) يضمن أن الربط من دائرتنا الكمية المجردة إلى التعليمات المُعطاة للحاسوب الكمي يكون بأكبر قدر من الكفاءة الممكنة في مرحلة ما قبل المعالجة.

# 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)

"Sampler" هو عنصر أساسي مصمم لأخذ عينات من الحالات المحتملة الناتجة عن دائرة كمية، وجمع الإحصائيات حول الحالات التي قد يتم قياسها وباحتمال كم. نستورد Qiskit Runtime Sampler هنا:

# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

ليست كل العمليات الحسابية على الحاسوب الكمي قابلة للمحاكاة بشكل معقول على الحواسيب الكلاسيكية. هذا الإرسال الكمي البسيط بالتأكيد يمكن محاكاته، لكنه ليس مفاجئًا أبدًا أن نتمكن كلاسيكيًا من حفظ المعلومات في مكان أو آخر. نوصي بشدة بإجراء هذه الحسابات باستخدام حاسوب IBM كمي حقيقي. لكن في حال استنفدت استخدامك الشهري المجاني، أو إذا كان شيء يجب إنجازه في الفصل ولا يمكن انتظار الصف، يمكن إتمام هذه الوحدة باستخدام محاكٍ. للقيام بذلك، ببساطة شغّل الخلية أدناه وأزل التعليق عن الأسطر المرتبطة في خطوات "التنفيذ".

# Load the backend sampler
from qiskit.primitives import BackendSamplerV2

# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel

noise_model = NoiseModel.from_backend(backend)

# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)

الخطوة 3: التنفيذ

استخدم الـ sampler لتشغيل مهمتك، مع الدائرة كوسيط.

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

الخطوة 4: معالجة النتائج والتحليل

لنرسم النتائج ونفسّرها.

# This required 5 s to run on a Heron r2 processor on 10-28-24
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

تحقق من فهمك

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

أي الحالات أعلاه يدل على نجاح الإرسال الكمي، وكيف يمكنك معرفة ذلك؟

الجواب:

الحالات 000,|000\rangle, 001,|001\rangle, 010,|010\rangle, 011|011\rangle كلها تتوافق مع نجاح الإرسال الكمي. وذلك لأننا أضفنا بوابة لإلغاء التجهيز الأولي للحالة السرية. إذا تم إرسال الحالة السرية بنجاح إلى كيوبت بوب، فإن تلك البوابة الإضافية يجب أن تُعيد كيوبت بوب إلى الحالة 0|0\rangle. لذا أي حالة في الأعلى يكون فيها كيوبت بوب (الكيوبت 0، المقيس أيضًا في المكوّن الصفري للسجل الكلاسيكي، وبالتالي الأعلى/أقصى اليمين) في الحالة 0|0\rangle يدل على النجاح.

يعرض هذا الرسم البياني جميع نتائج القياسات للكيوبتات الثلاثة، على مدى 5,000 تجربة أو "لقطة". أشرنا سابقًا إلى أن أليس ستقيس جميع الحالات المحتملة للكيوبتين A و Q باحتمال متساوٍ. عيّنّا الكيوبتات 0-2 في الدائرة إلى Q و A و B على التوالي. في الترميز القليل-الأرقام، كيوبت بوب هو الأقصى يسارًا/الأدنى. لذا الأعمدة الأربعة على اليسار تقابل كيوبت بوب في الحالة 0|0\rangle، والكيوبتان الآخران في جميع التوافيق الممكنة باحتمال متقارب. لاحظ أن ما يقارب (عادةً ~95%) من القياسات تُعطي كيوبت بوب في الحالة 0|0\rangle، مما يعني نجاح إعدادنا! هناك قليل من اللقطات (~5%) أعطت كيوبت بوب في الحالة 1|1\rangle. هذا لا ينبغي أن يكون ممكنًا منطقيًا. لكن جميع الحواسيب الكمية الحديثة تعاني من الضوضاء والأخطاء بدرجة أكبر بكثير من الحواسيب الكلاسيكية. وتصحيح الأخطاء الكمية لا يزال مجالًا ناشئًا.

التجربة الثانية: الإرسال الكمي عبر المعالج

يُعدّ أكثر الجوانب إثارةً في الإرسال الكمي أن الحالة الكمية يمكن إرسالها عبر مسافات طويلة فورًا (وإن كان التواصل الكلاسيكي للبوابات الإضافية ليس فوريًا). كما ذكرنا، لا يمكننا كسر الكيوبتات من المعالج ونقلها. لكن يمكننا نقل المعلومات من كيوبت إلى آخر، حتى تكون الكيوبتات المشاركة في الإرسال على جانبين متعاكسين من المعالج. لنكرّر الخطوات التي اتخذناها أعلاه، لكن هذه المرة سنبني دائرة أكبر بكيوبتات كافية تمتد عبر المعالج.

الخطوة 1: صِغ مسألتك كدائرة كمية

هذه المرة، ستتغير الكيوبتات المقابلة لأليس وبوب. لذا لن نسمّي كيوبتًا واحدًا "A" وآخر "B". بدلًا من ذلك، سنرقّم الكيوبتات ونستخدم متغيرات لتمثيل الموضع الحالي للمعلومات على الكيوبتات المنتمية لأليس وبوب. جميع الخطوات الأخرى باستثناء بوابات الإبدال كما هو موضح سابقًا.

# Step 1: Map

# Define registers
qr = QuantumRegister(13, "q")

qc = QuantumCircuit(qr, cr)

# Define registers
secret = QuantumRegister(1, "Q")
ebitsa = QuantumRegister(6, "A")
ebitsb = QuantumRegister(6, "B")
# q = ClassicalRegister(1, "q meas")
# a = ClassicalRegister(1, "a")
# b = ClassicalRegister(1, "b")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, ebitsa, ebitsb, cr)

# We'll start Alice in the middle of the circuit, then move information outward in both directions.
Alice = 5
Bob = 0
qc.h(ebitsa[Alice])
qc.cx(ebitsa[Alice], ebitsb[Bob])

# Starting with Bob and Alice in the center, we swap their information onto adjacent qubits, until the information is on distant qubits.

for n in range(Alice):
qc.swap(ebitsb[Bob], ebitsb[Bob + 1])
qc.swap(ebitsa[Alice], ebitsa[Alice - 1])
Alice = Alice - 1
Bob = Bob + 1

qc.barrier()

# Create a random state for Alice (qubit zero)
np.random.seed(42) # fixing seed for repeatability
# theta = np.random.uniform(0.0, 1.0) * np.pi #from 0 to pi
theta = 0.3
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi

qc.u(theta, varphi, 0.0, secret)

# Entangle Alice's two qubits
qc.cx(secret, ebitsa[Alice])
qc.h(secret)

qc.barrier()

# Make measurements of Alice's qubits and store the results in the classical register.
qc.measure(ebitsa[Alice], cr[1])
qc.measure(secret, cr[0])

# Send instructions to Bob's qubits based on the outcome of Alice's measurements.
with qc.if_test((cr[1], 1)):
qc.x(ebitsb[Bob])
with qc.if_test((cr[0], 1)):
qc.z(ebitsb[Bob])

qc.barrier()

# Invert the preparation we did for Carl's qubit so we can check whether we did this correctly.
qc.u(theta, varphi, 0.0, ebitsb[Bob]).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(ebitsb[Bob], cr[2]) # add measurement gate

qc.draw("mpl")

مخرجات الخلية البرمجية السابقة

يمكنك أن ترى في مخطط الدائرة أن الخطوات المنطقية هي نفسها. الفرق الوحيد هو أننا استخدمنا بوابات المبادلة لنقل حالة كيوبت أليس من الكيوبت 6 (A5A_5) صعوداً إلى الكيوبت 1 (A0A_0)، بجانب Q مباشرة. واستخدمنا بوابات المبادلة لنقل حالة بوب الأولية من الكيوبت 7 (B0B_0) نزولاً إلى الكيوبت 12 (B5B_5). لاحظ أن الحالة على الكيوبت 12 ليست مرتبطة حتى بحالة Q السرية إلا بعد إجراء القياسات على الكيوبتات البعيدة 0 و1، والحالة على الكيوبت 12 لا تساوي الحالة السرية إلا بعد تطبيق بوابتي XX وZZ المشروطتين.

الخطوة 2: حسّن دائرتك

عادةً، حين نستخدم مدير التمرير لتحويل دوائرنا وتحسينها، من المنطقي ضبط optimization_level = 3، لأننا نريد أن تكون دوائرنا بأقصى كفاءة ممكنة. في هذه الحالة، لا يوجد سبب حسابي لنقل الحالات من الكيوبتات 6 و7 إلى الكيوبتات 1 و12. كان ذلك فقط شيئاً فعلناه لإثبات النقل الكمي عبر مسافة. لو طلبنا من مدير التمرير تحسين دائرتنا، سيدرك أنه لا يوجد سبب منطقي لبوابات المبادلة هذه، وسيزيلها وينفّذ عمليات البوابات على كيوبتات متجاورة. لذا في هذه الحالة الخاصة، نستخدم optimization_level = 0.

# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pmzero = generate_preset_pass_manager(target=target, optimization_level=0)

qc_isa_zero = pmzero.run(qc)

print(qc_isa_zero.depth())
105

يمكننا تصوّر أماكن هذه الكيوبتات على المعالج الكمي باستخدام دالة plot_circuit_layout.

الخطوة 3: التنفيذ

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

# This required 5 s to run on a Heron r2 processor on 10-28-24
job = sampler.run([qc_isa_zero])
# job = sampler_sim.run([qc_isa_zero])
counts = job.result()[0].data.c.get_counts()
from qiskit.visualization import plot_histogram

plot_histogram(counts)

مخرجات الخلية البرمجية السابقة

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

نلاحظ مرة ثانية إن احتمالات النتائج الممكنة لكيوبتات أليس موزعة بشكل شبه متساوٍ. هناك ميل واضح لقياس كيوبت بوب في الحالة 0|0\rangle بعد عكس الشيفرة السرية، يعني احتمال كبير إننا نقلنا الحالة السرية بنجاح عبر المعالج من Q إلى بوب (من الكيوبت 0 إلى الكيوبت 12). لكن نلاحظ إن فرصة عدم قياس 0|0\rangle لبوب صارت أعلى شوي هالمرة. وهذا درس مهم في الحوسبة الكمية: كلما زاد عدد البوابات، وخاصة بوابات متعدد الكيوبتات مثل بوابات المبادلة، كلما زادت الضوضاء والأخطاء.

الأسئلة

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

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

  • الكيوبتات ممكن تكون متشابكة، يعني قياس كيوبت واحد يؤثر أو يحدد حالة كيوبت آخر.
  • التشابك يختلف عن الترابط الكلاسيكي؛ مثلًا، الكيوبتان A وB ممكن يكونا في تراكب من الحالات مثل α000+α111.\alpha_0|00\rangle+\alpha_1|11\rangle. حالة A أو B ممكن تكون غير محددة بالطبيعة، ومع ذلك يكون مضمونًا إن A وB في نفس الحالة.
  • من خلال دمج التشابكات والقياسات، يمكننا نقل حالة (التي يمكنها تخزين معلومات) من كيوبت إلى آخر. هذا النقل ممكن يحدث على مسافات بعيدة، وهذا هو ما نسميه النقل الكمي (quantum teleportation).
  • النقل الكمي يعتمد على القياسات الكمية، التي هي احتمالية. لذلك، التواصل الكلاسيكي ممكن يكون ضرورياً لضبط الحالات المنقولة. وهذا يمنع النقل الكمي من نقل المعلومات أسرع من الضوء. النقل الكمي ما يخالف النسبية أو السببية.
  • أجهزة الحوسبة الكمية الحديثة أكثر عرضة للضوضاء والأخطاء مقارنة بالحواسيب الكلاسيكية. توقع أخطاء بنسبة بضعة بالمئة.
  • كلما أضفت بوابات أكثر بالتسلسل (وخاصة بوابات الكيوبتين) كلما توقعت أخطاء وضوضاء أكثر.

أسئلة صح/خطأ

  1. ص/خ: النقل الكمي ممكن يُستخدم لإرسال معلومات أسرع من الضوء.
  2. ص/خ: الأدلة الحديثة تشير إلى أن انهيار الحالة الكمية ينتشر أسرع من الضوء.
  3. ص/خ: في Qiskit، الكيوبتات مرتبة في الحالات بحيث الكيوبت الأقل رقمًا يكون على اليمين، كما في q3,q2,q1,q0|q_3,q_2,q_1, q_0\rangle

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

  1. الكيوبتان A وB متشابكتان، ثم فُصلا بمسافة كبيرة dd. قِيس الكيوبت A. أي عبارة صحيحة بخصوص السرعة التي تتأثر بها حالة الكيوبت B؟
  • أ. يتأثر الكيوبت B فورًا في حدود التسامح التجريبي، في التجارب التي أُجريت حتى الآن.
  • ب. يتأثر الكيوبت B بعد زمن مقداره d/cd/c، يعني الحالة الكمية "تنهار" بسرعة قريبة من سرعة الضوء في حدود التسامح التجريبي.
  • ج. يتأثر الكيوبت B فقط بعد حدوث تواصل كلاسيكي، يعني يحصل في زمن أطول من d/cd/c.
  • د. لا شيء مما سبق
  1. تذكر أن احتمالية القياس مرتبطة بالسعات في الحالات الكمية. مثلًا، لو كان كيوبت في البداية في الحالة α00+α11,\alpha_0|0\rangle+\alpha_1 |1\rangle, فاحتمال قياس الحالة 0|0\rangle هو α02.|\alpha_0|^2. لكن ما كل مجموعات القياسات تطابق هذي الاحتمالات تمامًا، بسبب محدودية العيّنات (تمامًا مثل رمي عملة معدنية وظهور الوجه مرتين متتاليتين). مخطط القياسات التالي ممكن يقابل أي من الحالات الكمية الآتية؟ اختر أفضل إجابة.

entangled_teleportation_fig

  • أ. 0|0\rangle
  • ب. 12(01)\frac{1}{\sqrt{2}}\left(|0\rangle-|1\rangle\right)
  • ج. 12(0+1)\frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right)
  • د. 450+351\frac{4}{5}|0\rangle+\frac{3}{5}|1\rangle
  • هـ. 350+451\frac{3}{5}|0\rangle+\frac{4}{5}|1\rangle
  1. أي من الحالات الآتية تُظهر تشابكًا بين الكيوبتين A وB؟ اختر كل ما ينطبق.
  • أ. 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • ب. 450B0A+351B1A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • ج. 12(0B1A1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • د. 12(0B0A+1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|0\rangle_A\right)
  • هـ. 0B0A|0\rangle_B|0\rangle_A
  1. في هذه الوحدة، جهّزنا حالة متشابكة: 12(0B0A+1B1A).\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right). لكن في حالات متشابكة كثيرة أخرى ممكن نستخدمها في بروتوكول مشابه. أي من الحالات أدناه ممكن ينتج مخطط قياسات ثنائي الكيوبت مثل التالي؟ اختر أفضل إجابة.

entangled_teleportation_fig_0110

  • أ. 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • ب. 450B0A+351B1A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • ج. 12(0B1A1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • د. 450B1A+351B0A\frac{4}{5}|0\rangle_B|1\rangle_A+\frac{3}{5}|1\rangle_B|0\rangle_A
  • هـ. 0B0A|0\rangle_B|0\rangle_A

أسئلة للنقاش

  1. اشرح بروتوكول النقل الكمي من البداية للنهاية لشريكك/مجموعتك. شوف إذا عندهم إضافات أو أسئلة.