חישוב קוונטי בגישה מתמטית, חלק א'
מבוא
כבר כתבתי בעבר סדרת פוסטים על חישוב קוונטי, אבל מאז עבר קצת זמן והתחלתי להתעסק באופן אישי בצורה טכנית יותר, וזו הזדמנות טובה לחזור אל הנושא ולהתעמק יותר באספקטים המתמטיים שלו. אני לא אחזור יותר מדי על המוטביציות וההסברים שהיו בסדרת הפוסטים ההיא כי הם בסדר גמור לטעמי, ובפוסטים כאן אני אגש יותר מהר אל התכל’ס. עוד דבר שהכתיב את אופי סדרת הפוסטים ההיא היה דגש על אלגוריתמים קוונטיים - היעד היה להגיע אל האלגוריתם של שור. בסדרה הנוכחית אני כנראה אחזור אליו לביקור, אבל יש הרבה דברים אחרים שאני רוצה להציג.
נתחיל בכל זאת מהסבר כללי מה זה בעצם חישוב קוונטי. בחישוב רגיל (מה שאני אכנה מעכשיו “קלאסי”) אבן הבניין הבסיסית שלנו היא משהו שנקרא ביט. ביט יכול להיות או 0 או 1, ואנחנו יודעים לעשות מניפולציות על ביטים שנקראות פעולות לוגיות, למשל פעולת AND שמקבלת שני ביטים כקלט ומוציאה ביט בודד כפלט, כך שהיא מחזירה 1 רק אם שני הקלטים היו 1 ואחרת היא מחזירה 0. מה שמדהים במדעי המחשב הוא שכל אלגוריתם שרץ בפועל על מחשב ניתן לתרגום אל זה - פעולות לוגיות על מספר קטן של ביטים. זה ממש פשוט. ממש ממש פשוט.
חישוב קוונטי שואל את השאלה: אוקיי, האם ייתכן שזה פשוט מדי? אולי אפשר לעבור להשתמש באבן בניין בסיסית שתאפשר לנו לעשות קסמים יותר מורכבים? והתשובה היא “כן ולא”.
כמובן, חישוב רגיל הוא קצת יותר מסובך מסתם מניפולציות על ביטים. ראשית, כי מעבדים מודרניים יכולים לעשות פעולות מורכבות יחסית שמערבים מספר גדול של ביטים בבת אחת, לרוב תוך שימוש במעגלים מתוחכמים למדי (למשל, פעולת חילוק של מספרים גדולים יחסית). שנית, ורלוונטי יותר לנו, כי בטבע אין ביטים שמתרוצצים אנה ואנה ומחכים שנפעל עליהם. כדי שיהיו לנו ביטים ונבצע עליהם מניפולציות, אנחנו צריכים לממש אותם איכשהו. במעבדים מודרניים זה מתבצע באמצעות מניפולציה של חשמל; ביטים ממומשים בעזרת מתח חשמלי, כשהערכים 0 ו-1 מיוצגים על ידי רמות שונות של מתח כזה, ואנחנו משתמשים ברכיבים אלקטרוניים שנקראים טרנזיסטורים כדי לבצע את הפעולות הלוגיות. מה שמעניין פה הוא הרדוקציה הזו של הפיזיקה המורכבת של הטבע, שבעזרת הנדסת חשמל הופכת למשהו מאוד פשוט - 0 ו-1 ופעולות לוגיות, וזהו.
בחישוב קוונטי עדיין מנסים לעשות רדוקציה למורכבות של הטבע אל דבר שהוא יחסית פשוט מבחינה מתמטית. אבל מנסים לשמר קצת יותר מהמורכבות של התופעה שעליה מתבססים - תופעה שבתורת הקוונטים נקראת סופרפוזיציה והיא משונה מאוד וממש לא תואמת את החוויה היומיומית שלנו, אבל נוכחנו לדעת שהיא מתארת במדויק את מה שקורה בפיזיקה של סדרי גודל קטנים. השאלה אילו תופעות טבע בדיוק מגוייסות לצורך מימוש של חישוב קוונטי ואיך זה עובד היא מרתקת ואפשר לכתוב פוסטים רבים על שיטות המימוש השונות והמשונות ושלל הבעיות, האתגרים והקירובים שכל שיטה כזו מצריכה, אבל אני במוצהר מתעלם מכל זה ומתחיל מיחידת הבסיסי של חישוב קוונטי: קיוביט.
התיאור המתמטי של קיוביט
ביט רגיל היה דרך לקחת מערכת פיזיקלית מסובכת ואיכשהו לקבל ממנה מערכת שיש לה רק שני מצבים מובחנים, 0 ו-1. קיוביט הוא דרך לקחת מערכת פיזיקלית מסובכת ואיכשהו לקבל ממנה מערכת שכל המצבים שלה הם סופרפוזיציה של שני מצבים מובחנים, שמסמנים \( \left|0\right\rangle \) ו-\( \left|1\right\rangle \). מה זו סופרפוזיציה? ובכן, הדרך הטובה ביותר לתאר את זה היא פשוט באמצעות מתמטיקה. ספציפית, אלגברה לינארית (שאני מניח שאתן מכירות).
הסימון \( \mathbb{C}^{2} \) מתאר מרחב וקטורי ממימד 2 מעל המרוכבים, שאנחנו מסמנים את מצביו בדרך כלל בתור וקטורי עמודה \( \left(\begin{array}{c} a\\ b \end{array}\right) \) כך ש-\( a,b\in\mathbb{C} \). על המרחב הזה מוגדרת מכפלה פנימית סטנדרטית, \( \left\langle v|u\right\rangle \triangleq\overline{a_{v}}a_{u}+\overline{b_{v}}b_{u} \) והמרחב שמתקבל נקרא מרחב מכפלה פנימית. רוב מה שאגיד עכשיו נכון למרחבי מכפלה פנימית באופן כללי, אבל כדאי שיהיה לנו בראש את המקרה הקונקרטי של \( \mathbb{C}^{2} \) שממנו מתחילים, ועוד נראה בהמשך איך מתקדמים משם.
עכשיו שווה להציג את שיטת הסימון של איברים שבה ננקוט מכאן והלאה, שנקראת הסימון של דיראק. לוקח קצת זמן להתרגל אליה, אבל היא מפשטת מאוד את האינטואיציה כשיש חישובים טכניים ולכן אני בעדה. אינטואיטיבית, אנחנו מסתכלים על הסימון \( \left\langle v|u\right\rangle \) שמתאר מכפלה פנימית של שני איברים, ו”מפרקים” אותו לשניים: \( \left|u\right\rangle \) ו-\( \left\langle v\right| \). הסימן \( \left|u\right\rangle \) מתאר פשוט וקטור - איבר רגיל של \( \mathbb{C}^{2} \), בזמן ש-\( \left\langle v\right| \) מתאר את מה שאפשר לקבל מהוקטור \( \left|v\right\rangle \) אם ניקח את מה שנקרא הצמוד ההרמיטי שלו - מה שמתקבל משחלוף של הוקטור ואז הצמדה של הכניסות שלו (“שחלוף”, transpose באנגלית, נשמע כמו משהו מוכר? אם לא, זו אינדיקציה שאולי כדאי לחזור טיפה על אלגברה לינארית). במילים אחרות, אם \( \left|v\right\rangle =\left(\begin{array}{c} a\\ b \end{array}\right) \) אז \( \left\langle v\right|=\left(\left|v\right\rangle \right)^{*}=\left(\begin{array}{cc} \overline{a} & \overline{b}\end{array}\right) \). כעת, אם נזכור כיצד מוגדר כפל של מטריצות, קל לראות ש-\( \left\langle v\right|\cdot\left|u\right\rangle \), כשכופלים אותם כמו מטריצות (מטריצה \( 1\times2 \) כפול מטריצה \( 2\times1 \)) מקבלים בדיוק את המכפלה הפנימית, \( \left\langle v|u\right\rangle \) - הסימון \( \left\langle v|u\right\rangle \) “מסכים” עם הפירוק שלנו \( \left\langle v\right|\left|u\right\rangle \).
אפשר לחשוב על הסימון הזה גם בצורה יותר מופשטת. מרגע שיש לנו מרחב מכפלה פנימית כלשהו \( V \) מעל \( \mathbb{C} \) (או \( \mathbb{R} \), אבל בהקשר של חישוב קוונטי אנחנו תמיד מעל \( \mathbb{C} \)), אנחנו מסוגלים לחשוב על וקטורים \( v\in V \) כאילו הם מגדירים פונקציונל לינארי, כלומר טרנספורמציה לינארית \( f_{v}:V\to\mathbb{C} \), שמוגדרת על ידי \( f_{v}\left(u\right)=\left\langle v|u\right\rangle \). אם כן, אפשר לחשוב על \( \left\langle v\right| \) גם בתור פונקציונל לינארי, שהפעולה שלו על \( \left|u\right\rangle \) היא בדיוק מה שתיארנו כרגע. כמובן, בפועל זה בדיוק אותו דבר כמו מה שתיארתי קודם - התיאור עם וקטור שורה הוא פשוט המטריצה המייצגת של \( f_{v} \). אבל זה לא אומר ששתי דרכי התיאור הקצת שונות הללו לא מסייעות, כל אחת בדרכה, להבין מה הולך פה.
בואו נמשיך עם ההגדרות: במרחב מכפלה פנימית לכל איבר יש נורמה, שאפשר לחשוב עליה בתור הגודל שלו: \( \|v\|\triangleq\sqrt{\left\langle v|v\right\rangle } \) . אצלנו ב-\( \mathbb{C}^{2} \) מקבלים \( \|v\|=\sqrt{\left|a\right|^{2}+\left|b\right|^{2}} \). מה שבדרך כלל אוהבים במתמטיקה הוא איברים מנורמה 1 (שלפעמים נקראים “מנורמלים”), וזה מה שקורה גם בחישוב קוונטי: הערכים שקיוביט יכול לקבל הם בדיוק האיברים מנורמה 1 של \( \mathbb{C}^{2} \). זה נשמע שרירותי, אבל בהמשך נראה שזה נובע מטיעון שקשור להסתברות - ה-1 הזה יהיה סכום של הסתברויות שקשורות לקיוביט (במרחב הסתברות הסכום הכולל של כל ההסתברויות של אירועים מסוימים צריך להיות 1).
במרחב \( \mathbb{C}^{n} \) יש לנו בסיס פשוט במיוחד: הבסיס הסטנדרטי, שכולל את כל הוקטורים שהם 1 בכניסה אחת ו-0 באחרות. ב-\( \mathbb{C}^{2} \) אני נותן לו סימון דיראקי פשוט:
\( \left|0\right\rangle \triangleq\left(\begin{array}{c} 1\\ 0 \end{array}\right) \) ו-\( \left|1\right\rangle \triangleq\left(\begin{array}{c} 0\\ 1 \end{array}\right) \)
לא צריך לייחס ל-0 וה-1 הזה שבתוך הסוגריים יותר מדי משמעות, היה אפשר לשים שם באותה מידה ציור של חתול שמח וחתול כועס. אלו פשוט סימונים סטנדרטיים, ויש גם וקטורים שמסומנים בצורה לא מספרית, למשל \( \left|+\right\rangle \triangleq\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}} \) . כשמסתכלים על הוקטור המוזר הזה מייד קופץ לעיניים ה-\( \sqrt{2} \), למה הוא שם? ובכן, כדי לנרמל אותו: אם אני לוקח את הסכום \( \left|0\right\rangle +\left|1\right\rangle \), מה תהיה הנורמה שלו? זו הזדמנות לעשות חישוב טכני קליל ולראות איך הסימון של דיראק עוזר לנו: אנחנו צריכים לחשב את המכפלה הפנימית של \( \left|0\right\rangle +\left|1\right\rangle \) עם עצמו, ועל פי הסימון של דיראק זה פשוט
\( \left(\left\langle 0\right|+\left\langle 1\right|\right)\left(\left|0\right\rangle +\left|1\right\rangle \right) \)
למה? ובכן, כי הפעולה של שחלוף + הצמדה היא לינארית, כלומר \( \left(v+u\right)^{*}=v^{*}+u^{*} \) וגם \( \left(\lambda v\right)^{*}=\overline{\lambda}v^{*} \). לכן הסכום \( \left|0\right\rangle +\left|1\right\rangle \) הופך לסכום \( \left\langle 0\right|+\left\langle 1\right| \), וגם סקלרים יתהפכו בצורה נחמדה (אבל לא לשכוח להצמיד אותם! אני שכחתי עשרות פעמים וכל פעם זה נקם בי).
עכשיו, את הביטוי \( \left(\left\langle 0\right|+\left\langle 1\right|\right)\left(\left|0\right\rangle +\left|1\right\rangle \right) \) אפשר לקרוא בתור הפעלה של אופרטור לינארי על \( \left(\left|0\right\rangle +\left|1\right\rangle \right) \) ומכיוון שאופרטור לינארי הוא לינארי הוא מתפרק יפה על פי חוקי הפילוג הרגילים, ואנחנו מקבלים:
\( \left(\left\langle 0\right|+\left\langle 1\right|\right)\left(\left|0\right\rangle +\left|1\right\rangle \right)=\left\langle 0|0\right\rangle +\left\langle 0|1\right\rangle +\left\langle 1|0\right\rangle +\left\langle 1|1\right\rangle \)
זו הסיבה שאנחנו כל כך אוהבים אלגברה לינארית - הכל פשוט מסתדר בה כמו בחשבון פשוט. עכשיו, מה זה \( \left\langle 0|0\right\rangle \)? קל לראות עם חישוב ישיר שזה 1, וש-\( \left\langle 0|1\right\rangle =\left\langle 1|0\right\rangle =0 \) וש-\( \left\langle 1|1\right\rangle =1 \) גם כן. במילים אחרות, \( \left|0\right\rangle ,\left|1\right\rangle \) הם בסיס של \( \mathbb{C}^{2} \) שבו כל איבר הוא מנורמה 1, וכל שני איברים שונים הם בעלי מכפלה פנימית 0 (“אורתוגונליים”). לבסיס כזה קוראים בסיס אורתונורמלי ואנחנו מאוד אוהבים אותו כי כשעובדים בבסיס אורתונורמלי הכל פתאום פשוט יותר.
ובכן, קיבלנו ש-\( \left(\left\langle 0\right|+\left\langle 1\right|\right)\left(\left|0\right\rangle +\left|1\right\rangle \right)=2 \), כלומר הנורמה של \( \left|0\right\rangle +\left|1\right\rangle \) היא \( \sqrt{2} \), ולכן אנחנו מחלקים ב-\( \sqrt{2} \) כדי לקבל את האיבר מנורמה 1 שהצגתי קודם, \( \left|+\right\rangle \). באופן דומה אנחנו מסמנים \( \left|-\right\rangle =\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}} \), ו… זהו, עכשיו אנחנו כבר יודעים די הרבה על חישוב קוונטי!
…למרות שבעצם עוד לא הסברתי כלום.
מה קורה בחישוב קוונטי?
בגדול, אפשר לתאר את מה שקורה בחישוב קוונטי בתור תהליך עם שלושה שלבים:
- מאתחלים קיוביט לערך \( \left|0\right\rangle \).
- מפעילים על הקיוביט סדרה של טרנספורמציות לינאריות.
- מודדים את הקיוביט והפלט הוא תוצאת המדידה.
חישוב קוונטי אמיתי הוא מסובך יותר כי אפשר לדבר על אתחולים לערכים שונים, על מדידות שהן לאו דווקא בסיום, וכמובן - על דברים שמערבים יותר מקיוביט אחד, כי רק כשיש הרבה קיוביטים שמעורבים בחישוב פתאום מתחילים לקרות דברים מופלאים. אבל זו נקודת התחלה לא רעה. את המשמעות של 1 אנחנו כבר יכולים להבין, אבל צריך לדבר עוד על מה קורה ב-2 ו-3.
נתחיל עם 2. מה זו טרנספורמציה לינארית אנחנו כבר יודעים, אבל לא כל טרנספורמציה לינארית היא חוקית בהקשר הזה; אמרתי שהערכים שקיוביט יכול לקבל הם רק כאלו מנורמה 1, ולכן אם אני מפעיל טרנספורמציה על קיוביט, היא צריכה להיות כזו שמעבירה וקטור מנורמה 1 לוקטור מנורמה 1. טרנספורמציות כאלו נקראות אוניטריות. באופן כללי, טרנספורמציה \( T:V\to V \) היא אוניטרית אם \( TT^{\dagger}=T^{\dagger}T=I \) , כשהסימון \( T^{\dagger} \) מייצג את הצמוד ההרמיטי - השחלוף והצמדה של \( T \) (במתמטיקה בדרך כלל מייצגים זאת בתור \( T^{*} \) אבל אני משתמש בסימון הפיזיקלי שמקובל בחישוב קוונטי).
למה התכונה הזו מוכיחה שהנורמה משתמרת? ובכן, התכונה הבסיסית (שלא אוכיח) של צמוד הרמיטי של אופרטור כלשהו היא ש-\( \left\langle Tv|u\right\rangle =\left\langle v|T^{\dagger}u\right\rangle \) - אפשר “להעביר צד” את \( T \) כשהיא בתוך מכפלה פנימית, במחיר מעבר לצמוד ההרמיטי. עכשיו נעשה את זה על נורמה:
\( \|Tv\|=\sqrt{\left\langle Tv,Tv\right\rangle }=\sqrt{\left\langle T^{\dagger}Tv,v\right\rangle }=\sqrt{\left\langle v,v\right\rangle }=\|v\| \)
יופי, אז ברור לנו אילו טרנספורמציות מותר להפעיל בשלב 2. אבל מה אפשר בפועל להפעיל? זה תלוי מאוד בשאלה איך המחשב הקוונטי ממומש - אנחנו לא תופסים טרנספורמציות לינאריות מהאוויר, אלא כל פעולה שאנחנו רוצים להפעיל על קיוביט דורשת הנדסה ותכנון מורכבים, שאני כמובן לא נכנס אליהם כאן. בפועל זה אומר שיש סט של טרנספורמציות “סטנדרטיות” שמזכירים בהקשר הזה, למרות שמחשבים קוונטיים יכולים לבצע גם דברים נוספים אם רוצים. אבל בואו נראה חלק מהדברים הסטנדרטיים (לא את כולם).
קודם ראינו סימונים מיוחדים לשני מצבים קוונטיים: \( \left|0\right\rangle ,\left|1\right\rangle \). ה-\( \left|0\right\rangle ,\left|1\right\rangle \) הללו היו בסיס ולכן מספיק להגדיר את הפעולה של טרנספורמציה לינארית על שניהם כדי שנדע איך היא פועלת על כל איבר במרחב. אז הנה פעולה פשוטה אחת, שנסמן \( X \):
\( X\left|0\right\rangle =\left|1\right\rangle \)
\( X\left|1\right\rangle =\left|0\right\rangle \)
זו בעצם פעולת ה-NOT שמוכרת לנו מחישוב קלאסי; אחת משתי הפעולות היחידות שאפשר לבצע על ביט בודד בחישוב רגיל, כשהשניה היא הזהות, לא לעשות כלום. כלומר - מכאן והלאה שאר הפעולות שנראה יהיו משהו “מיוחד”, שמתאים להקשר של חישוב קוונטי שבו לא פועלים על ביט אלא על קיוביט; על סופרפוזיציה.
קל לחשוב את המטריצה של \( X \):
\( X=\left(\begin{array}{cc} 0 & 1\\ 1 & 0 \end{array}\right) \)
חישוב ישיר גם יראה ש-\( X \) היא אוניטרית, אבל לא צריך חישוב כזה; טרנספורמציה שמעבירה בסיס אורתונורמלי לבסיס אורתונורמלי היא תמיד אוניטרית.
הנה פעולה נוספת שנקראת \( Z \), שמכניסה לתמונה דבר שלא קיים בחישוב קלאסי - שלוקטורים יכולים להיות מקדמים:
\( Z\left|0\right\rangle =\left|0\right\rangle \)
\( Z\left|1\right\rangle =-\left|1\right\rangle \)
\( Z=\left(\begin{array}{cc} 1 & 0\\ 0 & -1 \end{array}\right) \)
הפעולה הזו מותירה את \( \left|0\right\rangle \) ללא שינוי, אבל היא הופכת את המקדם של \( \left|1\right\rangle \) לשלילי; המקדם של איבר בהקשר הזה נקרא הפאזה שלו (מטעמים פיזיקליים שלא אכנס אליהם), אז בזמן שעל \( X \) אפשר לחשוב בתור “היפוך ביט” על \( Z \) אפשר לחשוב בתור “היפוך פאזה”.
קצת קשה לקבל תחושה טובה לגבי איך \( X,Z \) מתנהגים בעולם החדש המופלא שנכנסנו אליו בלי לראות דוגמא קצת יותר רצינית, אז בואו נזכיר שני מצבים קוונטיים אחרים שראינו: \( \left|+\right\rangle ,\left|-\right\rangle \). כזכור, ההגדרה שלהם הייתה
\( \left|+\right\rangle =\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}} \)
\( \left|-\right\rangle =\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}} \)
מה קורה כשאני מפעיל את \( X \) על \( \left|+\right\rangle \)? פשוט מאוד, נשתמש בלינאריות של הטרנספורמציה ונקבל
\( X\left|+\right\rangle =X\left(\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}}\right)=\frac{X\left|0\right\rangle +X\left|1\right\rangle }{\sqrt{2}}=\frac{\left|1\right\rangle +\left|0\right\rangle }{\sqrt{2}}=\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}}=\left|+\right\rangle \)
ובמילים אחרות - כלום! לא קורה כלום! ומה אם מפעילים אותו על \( \left|-\right\rangle \)?
\( X\left|-\right\rangle =X\left(\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}}\right)=\frac{X\left|0\right\rangle -X\left|1\right\rangle }{\sqrt{2}}=\frac{\left|1\right\rangle -\left|0\right\rangle }{\sqrt{2}}=-\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}}=-\left|-\right\rangle \)
כלומר, את \( \left|-\right\rangle \) הוא כופל ב-\( -1 \). או במילים אחרות, על \( \left|+\right\rangle ,\left|-\right\rangle \) האופרטור \( X \) מתנהג כמו ש-\( Z \) התנהג על \( \left|0\right\rangle ,\left|1\right\rangle \). אז איך \( Z \) יתנהג על \( \left|+\right\rangle ,\left|-\right\rangle \)? כבר אפשר לנחש שכמו ש-\( X \) התנהג על \( \left|0\right\rangle ,\left|1\right\rangle \), כלומר יחליף ביניהם. ואכן:
\( Z\left|+\right\rangle =Z\left(\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}}\right)=\frac{Z\left|0\right\rangle +Z\left|1\right\rangle }{\sqrt{2}}=\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}}=\left|-\right\rangle \)
\( Z\left|-\right\rangle =Z\left(\frac{\left|0\right\rangle -\left|1\right\rangle }{\sqrt{2}}\right)=\frac{Z\left|0\right\rangle -Z\left|1\right\rangle }{\sqrt{2}}=\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}}=\left|+\right\rangle \)
עכשיו, אחרי שנהננו קצת עם \( \left|+\right\rangle ,\left|-\right\rangle \) בואו נשים לב לכך שהם בעצמם בסיס אורתונורמלי (זה חישוב קצר למדי), אז האופרטור שיעביר את הבסיס \( \left|0\right\rangle ,\left|1\right\rangle \) לבסיס \( \left|+\right\rangle ,\left|-\right\rangle \) יהיה אוניטרי. האופרטור הזה חשוב בצורה בלתי רגילה - אולי האופרטור השימושי ביותר בחישוב קוונטי. הוא מסומן ב-\( H \) מלשון “הדאמר” (Hadamard) על שם המתמטיקאי הרלוונטי, ומוגדר כאמור על ידי
\( H\left|0\right\rangle =\left|+\right\rangle \)
\( H\left|1\right\rangle =\left|-\right\rangle \)
או בכתיב יותר מפורש:
\( H=\frac{1}{\sqrt{2}}\left(\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right) \)
שימו לב לכך ש-\( H^{\dagger}=H \), וגם \( X^{\dagger}=X,Z^{\dagger}=Z \); עוד מעט נראה אופרטור שבו זה לא המצב.
בהערת אגב, התופעה הזו שראינו ש-\( X,Z \) “מחליפים תפקידים” כשעוברים מהבסיס \( \left|0\right\rangle ,\left|1\right\rangle \) לבסיס \( \left|+\right\rangle ,\left|-\right\rangle \) מלמדת אותנו ש-\( HZH^{\dagger}=X \) ו-\( HXH^{\dagger}=Z \). למה? כי \( HXH^{\dagger} \) הוא שילוב הפעולות “תעבור מהבסיס הראשון לשני, תפעיל את \( X \) על הבסיס השני (עם אותו אפקט של \( Z \), של השארת איבר בסיס אחד ללא שינוי והכפלת השני במינוס 1) ואז תחזור לבסיס המקורי. נסו לחשב ותראו מה קורה. השוויון הזה לא חשוב לנו עכשיו אבל הוא הולך לחזור בהמשך; מילולית אני קורא לפעולה של כפל משמאל באופרטור ומימין בצמוד ההרמיטי שלו בשם הצמדה: \( HXH^{\dagger} \) זו ההצמדה של \( X \) על ידי \( H \) (גם פה אני קצת חורג מהקונבנציה המתמטית, שבה הצמוד ההרמיטי יהיה דווקא משמאל ולא מימין).
בואו נראה עוד כמה אופרטורים נפוצים ומועילים. ראשית, \( Z \) בבסיס הסטנדרטי מיוצג על ידי מטריצה אלכסונית. מה שנחמד במטריצות כאלו הוא שקל להוציא להן שורש - מוציאים שורש לכל איבר על האלכסון. כלומר, אפשר לכתוב
\( \sqrt{Z}=\left(\begin{array}{cc} 1 & 0\\ 0 & \pm i \end{array}\right) \)
נבחר את אחד מהשורשים הללו באופן שרירותי וניתן לו אות משלו:
\( S=\left(\begin{array}{cc} 1 & 0\\ 0 & i \end{array}\right) \)
עכשיו מתקיים \( S^{2}=Z \), וגם קל לראות שהשורש השני הוא פשוט \( S^{3} \), שהוא גם \( S^{\dagger} \). קיבלנו עוד אחד מהאופרטורים המרכזיים שלנו.
מה קורה כשמצמידים את \( X,Z \) שלנו בעזרת \( S \)? ובכן, \( Z \) הוא חזקה של \( S \) ולכן מתחלף איתו בכפל, כך שהצמדה לא עושה כלום: \( SZS^{\dagger}=Z \). אבל לעומת זאת, אם נחשב את \( SXS^{\dagger} \), נקבל מטריצה שטרם ראינו, ויש לה סימון משל עצמה - \( Y \):
\( Y=\left(\begin{array}{cc} 0 & -i\\ i & 0 \end{array}\right) \)
\( Y \) הוא מין שילוב של הפעולות של \( X \) (מחליף בין \( \left|0\right\rangle ,\left|1\right\rangle \)) ושל \( Z \) (כופל ב-\( -1 \) את \( \left|1\right\rangle \) לפני ההחלפה), ובתור בונוס הוא גם מכפיל הכל ב-\( i \). הוא גם הדוגמא האחרונה שרציתי להראות בינתיים. ראינו את האופרטורים \( X,Y,Z,H,S \) שהם התחלה יפה אם כי אני מזהיר מראש שהם לא מספרים את כל הסיפור אפילו עבור קיוביט בודד.
מדידות
נעבור עכשיו לשלב 3: מדידה. כדי להסביר מה הולך בשלב הזה צריך לעזוב לרגע את האבסטרקציה ולחזור אל מה שקורה בפיזיקה. כשיש לנו מצב קוונטי בסופרפוזיציה, \( \alpha\left|0\right\rangle +\beta\left|1\right\rangle \), אנחנו לא יודעים “לקרוא” מתוכו את הערכים \( \alpha,\beta \). זאת בניגוד לביט רגיל, שאנחנו יכולים לבדוק אם ערכו הוא 0 או 1. מה שכן אפשר לעשות עם המצב הקוונטי \( \alpha\left|0\right\rangle +\beta\left|1\right\rangle \), מלבד הפעלת טרנספורמציה לינארית שתשנה את המצב הזה למצב אחר אבל לא תיתן לנו אינפורמציה “החוצה”, הוא לבצע איתו אינטראקציה שנקראת מדידה שעושה שני דברים:
- מחזירה ערך שהוא או 0 או 1 באופן הסתברותי: \( 0 \) בהסתברות \( \left|\alpha\right|^{2} \) ו-\( 1 \) בהסתברות \( \left|\beta\right|^{2} \).
- אם הערך שהוחזר היה 0, מעבירה את המצב הקוונטי למצב \( \left|0\right\rangle \), ואם הערך שהוחזר היה 1 מעבירה אותו למצב \( \left|1\right\rangle \).
שימו לב שהפעולה הזו אינה טרנספורמציה אוניטרית, לכן היא לא עוד מקרה של הפעולות משלב 2. בפרט, זו לא פעולה הפיכה; אם ביצענו מדידה ועברנו ל-\( \left|0\right\rangle \) או \( \left|1\right\rangle \), אין לנו דרך לחזור למצב \( \alpha\left|0\right\rangle +\beta\left|1\right\rangle \) המקורי; המקדמים \( \alpha,\beta \) “נהרסו” ואבדו. כל האפקט שלהם התבטא בהסתברות שנקבל 0 או 1. הקושי הזה לקבל החוצה מידע מועיל מתוך הסופרפוזיציה שהגענו אליה הוא המכשול העיקרי שעומד בפני חישוב קוונטי: מצד אחד עוד נראה שאפשר לעשות ניסים ונפלאות בחישוב קוונטי, אבל אחרי שהניסים והנפלאות הללו התרחשו קשה לנו מאוד לחלץ מהם אינפורמציה מועילה, ואלגוריתמים קוונטיים בנויים לרוב מתוך מטרה להגדיל את הסיכוי לקבל את האינפורמציה המועילה הזו בשלב המדידה (וזה כמובן שונה מאוד מהאינטואיציה הרגילה שלנו לגבי איך פועלים חישובים, כי בחישובים שאנחנו מכירים פשוט קוראים את הביטים ורואים מה יש בהם).
בואו נראה דוגמאות. ראשית, אם מודדים את \( \left|0\right\rangle \) נקבל את התוצאה 0 בהסתברות 1, כי אם אני כותב את \( \left|0\right\rangle \) באופן כללי בתור \( \left|0\right\rangle =\alpha\left|0\right\rangle +\beta\left|1\right\rangle \) אז \( \alpha=1,\beta=0 \) ולכן ההסתברות לקבל 0 היא \( \left|1\right|^{2}=1 \). בדומה מדידה של \( \left|1\right\rangle \) תחזיר 1 בהסתברות 1.
לעומת זאת, מדידה של \( \left|+\right\rangle =\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}} \) היא קצת יותר מעניינת: אם נכתוב \( \left|+\right\rangle =\frac{1}{\sqrt{2}}\left|0\right\rangle +\frac{1}{\sqrt{2}}\left|1\right\rangle \) יהיה לנו קצת יותר קל לראות שכאן \( \alpha=\beta=\frac{1}{\sqrt{2}} \) ולכן \( \left|\alpha\right|^{2}=\left|\beta\right|^{2}=\frac{1}{2} \), כלומר זה מצב שכשמודדים אותו מקבלים 0 בהסתברות חצי ו-1 בהסתברות חצי. עבור \( \left|-\right\rangle \) קורה אותו דבר בדיוק, כי \( \left|-\right\rangle =\frac{1}{\sqrt{2}}\left|0\right\rangle -\frac{1}{\sqrt{2}}\left|1\right\rangle \) ולכן כאן \( \alpha=\frac{1}{\sqrt{2}},\beta=-\frac{1}{\sqrt{2}} \), והסימן השונה הולך לאיבוד כשלוקחים ערך מוחלט ומעלים בריבוע ומקבלים שוב \( \left|\alpha\right|^{2}=\left|\beta\right|^{2}=\frac{1}{2} \).
כבר עכשיו ראינו מספיק כדי לשבור מיסקונספציה נפוצה שעלולה לצוץ בתיאורים פופולריים של חישוב קוונטי. לפעמים מתארים מצב קוונטי בתור משהו שמערב הסתברויות ותו לא. חיפוש מהר בגוגל העלה (לא משנה מאיזה אתר) את הטקסט הבא על קיוביט: “על מנת לממש אותו יש צורך למצוא מערכת פיזיקלית שאפשר לשלוט ביעילות במצב הקוונטי שלה ולהקנות לה ערך מסוים של 0 או 1, או הסתברות כלשהי למדוד אותה באחד מהם.” אף אחד לא יקרא את התיאורים הפופולריים הללו ונפשו הרכה תינזק או שיכולתו להבין חישוב קוונטי תיפגע לצמיתות, אבל הם לא מספרים את הסיפור האמיתי; בשביל “סתם” הסתברויות לא צריך חישוב קוונטי, מספיק חישוב הסתברותי רגיל, אבל חישוב קוונטי מוסיף לנו רמה של תחכום מתמטי שפשוט לא ניתן לקבל בחישוב הסתברותי רגיל.
הנה ההמחשה הפשוטה לכך: נניח שיש לנו מערכת שהיא או במצב \( \left|+\right\rangle \) או במצב \( \left|-\right\rangle \), אנחנו לא יודעים איזה. אם נמדוד אותה, נקבל \( 0 \) או 1 בהסתברות חצי-חצי. אם יש לנו 1,000 עותקים של המערכת הזו נוכל למדוד אותה 1,000 פעמים ולקבל התפלגות תוצאות שהיא בערך חצי-חצי, כך שנוכל להסיק שההסתברויות הן חצי-חצי. האם זה מספר לנו את כל הסיפור על המערכת? לחלוטין לא. כי אם ניקח את המערכת ולפני שנמדוד אותה נפעיל עליה \( H \), הסיטואציה תשתנה דרסטית; או שתמיד נמדוד 0, אם המצב המקורי היה \( \left|+\right\rangle \), או שתמיד נמדוד 1 אם המצב המקורי היה \( \left|-\right\rangle \). כלומר, המצב הקוונטי הוא יותר מ”סתם” הסתברויות - יש למקדמים חשיבות, וגם אם החשיבות הזו לא באה לידי ביטוי באופן ישיר במדידה, היא יכולה לבוא לידי ביטוי אם נבצע עוד פעולות על המצב הקוונטי לפני המדידה.
מושג ה”מדידה” שהצגתי כאן הוא מקרה פרטי של כל המדידות שאפשר לבצע; אני לא אציג עדיין את ההגדרה המלאה (אבל היא תבוא), אבל הנה קצת גיוון: מכיוון ש-\( \left|+\right\rangle ,\left|-\right\rangle \) גם הוא בסיס אורתונורמלי, בהינתן מצב קוונטי כללי, שאני מסמן \( \left|\psi\right\rangle \), אפשר לכתוב גם \( \left|\psi\right\rangle =\alpha\left|0\right\rangle +\beta\left|1\right\rangle \) אבל גם לכתוב \( \left|\psi\right\rangle =\gamma\left|+\right\rangle +\delta\left|-\right\rangle \). עכשיו, מכיוון ש-\( \left|\psi\right\rangle \) הוא מצב קוונטי הוא מנורמה 1, כלומר מתקיים \( \left|\alpha\right|^{2}+\left|\beta\right|^{2}=1 \) וגם מתקיים \( \left|\gamma\right|^{2}+\left|\delta\right|^{2}=1 \), כלומר אפשר לחשוב על \( \left|\alpha\right|^{2},\left|\beta\right|^{2} \) כמייצגים הסתברות - ההסתברות שמדידה תניב לנו 0 או 1 - ואפשר גם לחשוב על \( \left|\gamma\right|^{2},\left|\delta\right|^{2} \) כמייצגים הסתברות, של מדידה שונה, מדידה על פי הבסיס \( \left|+\right\rangle ,\left|-\right\rangle \). מדידה כזו תחזיר ערך \( + \) בהסתברות \( \left|\gamma\right|^{2} \) וערך \( - \) בהסתברות \( \left|\delta\right|^{2} \) ותעביר את המערכת למצב המתאים, \( \left|+\right\rangle \) או \( \left|-\right\rangle \).
זה נשמע קצת מוזר. מה זה אומר “להחזיר \( + \)”? ובכן, הרעיון במדידה הוא לא בהכרח הערך המספרי הקונקרטי שאני מקבל, אלא מה שהוא מייצג. כאן אני משתמש בסימן \( + \) כדי לתאר “תוצאת המדידה שמתאימה לכך שהמצב \( \left|+\right\rangle \) ‘ניצח’ בהגרלה”. איך זה בא לידי ביטוי במציאות? זה תלוי באופן המדויק שבו מבצעים מדידה, אבל שווה לזכור שזה כך כבר כשמדברים על ביטים רגילים: כשאני “מודד” ביט רגיל אני מגלה שהוא נמצא ברמת מתח כלשהי, נאמר 563 (אני לא מכניס יחידות בכוונה, מה אני מבין בזה בכלל?) ובמדידה אחרת הוא בכלל ברמת מתח 13. אני קובע, מתוך ידיעה עם איך שההתקן הפיזי עובד, שכל מדידה שמחזירה רמת מתח בין 10 ל-100 היא “0” וכל מדידה שמחזירה משהו בין 500 ל-600 היא “1”; ביצעתי כאן אבסטרקציה של הערך הפיזי שמדדתי. זה מה שקורה גם בחישוב קוונטי, אם כי יש פורמליזם מתמטי יפה שגורם לתוצאות המדידה להיראות קצת פחות שרירותיות ואראה אותו בהמשך (בפורמליזם הזה גם מדידה בבסיס \( \left|0\right\rangle ,\left|1\right\rangle \) וגם מדידה בבסיס \( \left|+\right\rangle ,\left|-\right\rangle \) מחזירות את הערכים \( \pm1 \)).
סיכום ביניים קצר
יפה, אז מה ראינו? ראינו שיחידת המידע הבסיסית בחישוב קוונטי היא קיוביט, ושהערך שלו מיוצג על ידי איבר של \( \mathbb{C}^{2} \) מנורמה 1; ראינו שאפשר לפעול על קיוביט על ידי הפעלה של אופרטור אוניטרי ושדוגמאות פופולריות לאופרטורים כאלו הן \( X,Y,Z,H,S \); וראינו שאפשר למדוד קיוביט בצורה שנותנת לנו אינפורמציה ומשנה את מצב הקיוביט בהתאם לתוצאת המדידה. אלו הרכיבים הבסיסיים של חישוב קוונטי, אבל בשלב הזה ייתכן שיש לכם הרגשה שמשהו חסר, ובצדק.
כי מה היה לנו עד כה? כדי לתאר מצב קוונטי כללי \( \left|\psi\right\rangle =\alpha\left|0\right\rangle +\beta\left|1\right\rangle \) אני בסך הכל צריך וקטור מאורך 2 של מספרים מרוכבים, \( \left(\begin{array}{c} \alpha\\ \beta \end{array}\right) \). להפעיל אופרטור אוניטרי על וקטור כזה הוא בסך הכל כפל במטריצה \( 2\times2 \), וביצוע מדידה הוא בסך הכל חישוב \( \left|\alpha\right|^{2},\left|\beta\right|^{2} \) והגרלת מספר בין 0 ו-1. את כל הדברים הללו קל מאוד לבצע במחשב רגיל; אין סיבה לבנות מחשב קוונטי במיוחד בשביל זה.
הכוח האמיתי של חישוב קוונטי מגיע רק כאשר אנחנו עובדים עם מערכות שמורכבות מיותר מקיוביט אחד. כבר כשיש לנו 50 קיוביטים בערך אנחנו מתקרבים לקצה גבול היכולת של מה שמחשבים רגילים יכולים “לסמלץ” בצורה מלאה, ועל 100 קיוביטים אין מה לדבר. לכן זה הדבר הבא שאני צריך להציג: איך אני מתאר מבחינה מתמטית מערכות שמורכבות ממספר גדול מ-1 של קיוביטים, ואיך נראים חישובים בהן? את זה אעשה בפוסט הבא.
נהניתם? התעניינתם? אם תרצו, אתם מוזמנים לתת טיפ: