חישוב קוונטי - מה זה קיוביטים ומה עושים איתם?
מבוא
בפוסט הקודם דיברתי על מה זה קיוביט. הפעם אני רוצה לדבר על מה זה קיוביטים. ברבים. כי ברגע שיש לנו יותר מקיוביט אחד במערכת, האקשן האמיתי מתחיל.
כמו במקרה של קיוביט בודד, כדאי להתחיל את הסיפור מסקירת מה שקורה בחישוב קלאסי, שם יחידת המידה הבסיסית היא ביטים. כשיש לנו יותר מביט בודד, נהוג לאגד אותם לקבוצה; הקבוצה הנפוצה והשימושית ביותר היא מה שנקרא בייט (byte), שהוא קבוצה של שמונה ביטים יחד. איכשהו יצא שבייט, ולא ביט, הוא יחידת המידה הבסיסית שלנו לאינפורמציה - אנחנו מדברים על דיסקים קשיחים של טרה-בייטים ועל זכרון פנימי של ג’יגה-בייטים של מחשב במקום לדבר ברמת הביט. הדבר נובע בעיקר מסיבות היסטוריות; היום יש קבוצות אחרות שרלוונטיות לא פחות (למשל, המעבדים בימינו הם של 64-ביט; לא חשוב מה המשמעות המדויקת של זה, אלא שקיבוץ של 64 ביטים יחד הפך להיות רלוונטי).
את התוכן של בייט אפשר לתאר בתור סדרה של שמונה אפסים ואחדים, למשל 01001101. אפשר לחשוב על כל סדרה כזו כאילו היא מייצגת מספר בתחום שבין \( 0 \) ל-\( 255 \) (הבייט שכתבתי הוא המספר 77). למה דווקא התחום הזה? כי בתחום הזה כלולים 256 ערכים, ו-\( 256=2^{8} \) - מספר הערכים השונים האפשריים בבייט הוא מכפלה של מספר הערכים השונים האפשריים (2) בביט זה בזה, כשמספר הפעמים שמבצעים את הכפל הוא כמספר הביטים שמשתתפים בבייט (8).
קיוביט בודד, כזכור, היה בסופרפוזיציה של שני ערכי הבסיס של ביטים. סימנתי אותו בצורה הבאה: \( \left|\psi\right\rangle =\alpha\left|0\right\rangle +\beta\left|1\right\rangle \), כאשר הדרישה על המספרים המרוכבים \( \alpha,\beta \) היא שמתקיים \( \left|\alpha\right|^{2}+\left|\beta\right|^{2}=1 \). אותו הדבר בדיוק קורה עבור קבוצה של קיוביטים: המערכת הקוונטית שכוללת אותם נמצאת במצב שהוא סופרפוזיציה של כל מצבי הבסיס האפשריים; כלומר, אם היו לנו שמונה קיוביטים היו לנו 256 מצבי בסיס אפשריים והמצב הקוונטי של המערכת היה צירוף לינארי של כולם. כדי לשמור את העניינים פשוטים בואו נדבר רק על מערכת של שני קיוביטים: אז מצבי הבסיס שלה הם דברים כמו \( \left|0\right\rangle \left|1\right\rangle \), וכדי לשמור על הסימון נחמד, במקום לכתוב \( \left|0\right\rangle \left|1\right\rangle \) אני אכתוב \( \left|01\right\rangle \).
אם כן, מערכת של שני קיוביטים נמצאת בסופרפוזיציה מהצורה \( \left|\psi\right\rangle =\alpha_{00}\left|00\right\rangle +\alpha_{01}\left|01\right\rangle +\alpha_{10}\left|10\right\rangle +\alpha_{11}\left|11\right\rangle \) כאשר המקדמים מקיימים את אותה משוואה כמו קודם: \( \sum_{x\in\left\{ 0,1\right\} ^{2}}\left|\alpha_{x}\right|^{2}=1 \). שימו לב לאופן שבו אני מקצר עניינים על ידי סימן הסכימה ואינדקס סכימה שרץ על כל הערכים האפשריים של סדרות מאורך 2 של 0 ו-1; אני אמשיך להשתמש בקיצורים הללו בהמשך.
מה שאנחנו רואים פה הוא שכמות האינפורמציה שאנחנו זקוקים לה כדי לייצג מצב קוונטי גדלה אקספוננציאלית כתלות במספר הקיוביטים. כדי לייצג את הערך של בייט, אנחנו צריכים שמונה ביטים; כדי לייצר את הערך של “קיובייט”, כלומר של מערכת בת שמונה קיוביטים, אנחנו צריכים 256 מספרים מרוכבים (לכאורה כבר מספר מרוכב בודד מכיל אינסוף מידע, אבל בפועל אפשר לדבר על מספר מרוכב כפי שהוא מיוצג במחשב, עם דיוק סופי בהחלט). זו הסיבה הבסיסית שבגללה חישוב קוונטי הוא משהו שקשה למחשב רגיל לעשות: אם נרצה לבצע סימולציה של חישוב קוונטי, יהיה לנו קל מאוד לכתוב קוד שעושה את זה; חישוב קוונטי הוא בסך הכל כפל של מטריצות בוקטור ומדי פעם איזו הגרלה של אחת מבין כמה אפשרויות, כשמבצעים מדידה. הקושי פה טמון בכך שהוקטור (והמטריצות שכופלים בו) עשוי להיות מאוד גדול; כבר ב-50 קיוביטים זו הופכת למשימה שרק מחשבי-על יכולים להתמודד איתה, ועל דברים כמו סימולציה של מחשב קוונטי עם 70 קיוביטים לא מדברים בכלל. זה כנראה לעולם לא יהיה אפשרי. לא על ידי שמירה מפורשת של הוקטור.
האם קיימות דרכים אחרות, יעילות יותר, לבצע סימולציה של חישוב קוונטי גם עבור מספר קיוביטים גבוה? התשובה היא שבאופן כללי לא, אבל במקרים פרטיים מסויימים אפשר לעשות דברים ממש מגניבים. אני אזכיר את אחד מהמקרים הללו בחטף בהמשך, אם לא אשכח להוסיף אותו לפוסט הזה.
מכפלות טנזוריות של קיוביטים
בואו נעבור לפורמליזם המתמטי. הכלי החדש שאנחנו משתמשים בו פה נקרא מכפלה טנזורית של מרחבים וקטוריים. יש לי פוסט על זה, אבל הנה תזכורת רלוונטית: אם \( V,W \) הם שני מרחבים וקטוריים עם בסיסים \( \left\{ e_{1},\ldots,e_{n}\right\} \) ו-\( \left\{ f_{1},\ldots,f_{m}\right\} \) בהתאמה, אז המכפלה הטנזורית \( V\otimes W \) היא מרחב וקטורי שנפרש על ידי קבוצת האיברים \( \left\{ e_{i}\otimes f_{j}\ |\ 1\le i\le n,1\le j\le m\right\} \). אנחנו חושבים על \( e_{i}\otimes f_{j} \) כעל “אטומים” שיוצרים את המרחב ולא ניתנים לחלוקה בעצמם, וכל איבר אחר במרחב הוא צירוף לינארי שלהם. זו הגדרה שהיא מאוד תלויית-בסיס, אבל אפשר גם לוותר על הגדרות תלויות בסיס לגמרי; זה מה שקורה בפוסט ההוא שלי, אבל הפעם אני לא צריך להיכנס לזה.
במקרה של קיוביטים, המרחבים שאני כופל הם כולם בעלי הבסיס \( \left\{ \left|0\right\rangle ,\left|1\right\rangle \right\} \) ולכן מכפלה של שני מרחבים נפרשת על ידי איברים כמו \( \left|0\right\rangle \otimes\left|1\right\rangle \), ואת הסימון הזה כבר קיצרתי ל-\( \left|01\right\rangle \) אבל מבחינה פורמלית הכתיב הנכון הוא \( \left|0\right\rangle \otimes\left|1\right\rangle \). נקודה רלוונטית שבלבלה אותי כשהתחלתי ללמוד על מכפלות טנזוריות היא שאמנם בהחלט אפשר לקחת איבר \( v\in V \) ו-\( w\in W \) ואז לדבר על האיבר \( v\otimes w\in V\otimes W \), אבל לא כל האיברים של \( V\otimes W \) ניתנים לייצוג כזה. הדבר הזה חשוב שבעתיים כשמדברים על קיוביטים, אבל גם יש לנו דרך לקבל אינטואיציה “פיזיקלית” להגיון שמאחורי זה, אז בואו ניכנס לעובי הקורה.
ראשית, בואו ניקח את המצב הקוונטי של קיוביט יחיד בסופרפוזיציה אחידה: \( \left|+\right\rangle =\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}} \). אם אני רוצה להבין מה המשמעות של \( \left|+\right\rangle \otimes\left|+\right\rangle \) אני משתמש בתכונת הבילינאריות של האופרטור \( \otimes \) - תכונה שאפשר לתאר כך:
- \( \left(a+b\right)\otimes c=a\otimes c+b\otimes c \)
- \( a\otimes\left(b+c\right)=a\otimes b+a\otimes c \)
- \( \lambda a\otimes b=\lambda\left(a\otimes b\right) \)
- \( a\otimes\lambda b=\lambda\left(a\otimes b\right) \)
עם התכונות הללו, קל לראות ש-\( \left|+\right\rangle \otimes\left|+\right\rangle \) יוצא פשוט \( \frac{\left|00\right\rangle +\left|01\right\rangle +\left|10\right\rangle +\left|11\right\rangle }{2} \) - המצב שהוא הסופרפוזיציה האחידה על ארבעת ערכי הבסיס האפשריים. וזה, אני מניח, לא מפתיע. האינטואיציה פה הוא שכל אחד מהקיוביטים \( \left|+\right\rangle \) חי לו בעצמו בסבבה בסופרפוזיציה שלו, ואז פתאום קירבנו את המערכות של שני הקיוביטים זו לזו והתחלנו לחשוב עליהן בתור מערכת אחת, ואז המערכת האחת הזו מורכבת משתי הסופרפוזיציות הללו ביחד. כמו להטיל שתי קוביות - אפשר להסתכל על כל אחת בנפרד, ולראות התפלגות אחידה בין 1 ל-6; ואפשר להסתכל על שתיהן ביחד ולראות התפלגות מעניינת יותר בין 2 ל-12, אבל כזו שבנויה פשוט מהתפלגות אחידה על כל הזוגות \( \left(x,y\right) \) כך ש-\( 1\le x,y\le6 \) (ואגלה לכם סוד? לא באמת צריך לקרב את המערכות של שני הקיוביטים זו לזו; הן יכולות להיות בקצוות הרחוקים של היקום והמתמטיקה תהיה זהה).
ועכשיו למשהו שונה לגמרי - המצב \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \). בדיקה זריזה תראה שזה מצב קוונטי חוקי על שני קיוביטים - הנורמה שלו היא 1 והוא צירוף לינארי של אברי בסיס של המכפלה הטנזורית. יש לו גם שם: מצב בל (וגם אפשר לקרוא לו “זוג EPR” אבל נעזוב את זה). האם אפשר לכתוב את מצב בל הזה בתור \( \left|\psi_{1}\right\rangle \otimes\left|\psi_{2}\right\rangle \) עבור שני מצבים קוונטיים \( \left|\psi_{1}\right\rangle ,\left|\psi_{2}\right\rangle \) של קיוביט יחיד כל אחד? התשובה היא שאי אפשר בשום פנים ואופן לעשות את זה. המשמעות הפיזיקלית היא ש-\( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) מתאר לנו מערכת פיזיקלית של שני קיוביטים שפשוט לא ניתן לחשוב עליה בתור שתי מערכות נפרדות של קיוביטים, שכל אחת מהן חיה לה בסבבה בלי קשר לשניה; הן קשורות אחרת לשניה בצורה בלתי פריקה. כפי שאומרים הפיזיקאים, הן שזורות. השזירה הזו של קיוביטים - היכולת לבנות מהם מצבים קוונטיים שלא פריקים למכפלה של קיוביטים בודדים - היא חלק מהותי מהכוח של חישוב קוונטי.
למה אי אפשר לקבל את \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) כמכפלה טנזורית בודדת של שני איברים? ובכן, אין כאן משהו מעניין מעבר לאלגברה לינארית פשוטה. ניקח שני קיוביטים כלליים, \( \left|\psi_{1}\right\rangle =\alpha_{1}\left|0\right\rangle +\beta_{1}\left|1\right\rangle \) ו-\( \left|\psi_{2}\right\rangle =\alpha_{2}\left|0\right\rangle +\beta_{2}\left|1\right\rangle \), נכפול אותם טנזורית ונקבל את המצב
\( \alpha_{1}\alpha_{2}\left|00\right\rangle +\beta_{1}\alpha_{2}\left|10\right\rangle +\alpha_{1}\beta_{2}\left|01\right\rangle +\beta_{1}\beta_{2}\left|11\right\rangle \)
את המקדמים של \( \left|10\right\rangle \) ו-\( \left|01\right\rangle \) צריך להשוות לאפס, כך שאנחנו מקבלים
\( \beta_{1}\alpha_{2}=0 \)
\( \alpha_{1}\beta_{2}=0 \)
עכשיו, אנחנו חיים מעל המספרים המרוכבים. במספרים המרוכבים, \( \beta_{1}\alpha_{2}=0 \) גורר שבהכרח או \( \beta_{1}=0 \) או \( \alpha_{2}=0 \). אם \( \beta_{1}=0 \) אז גם המקדם \( \beta_{1}\beta_{2} \) של \( \left|11\right\rangle \) יהיה אפס. אם \( \alpha_{2}=0 \) אז המקדם של \( \left|00\right\rangle \) יהיה אפס. שום דבר מסובך.
אוקיי, אז ראינו ש-\( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) הוא מצב קוונטי “מעניין”. הנה לכם שאלה - איך בכלל אפשר להגיע למצב הקוונטי המעניין הזה אם, נאמר, המערכת שלנו מתחילה במצב \( \left|00\right\rangle \)? או, טוב ששאלתם. בואו נדבר עכשיו על הפעולות שאפשר לבצע על מערכות של קיוביטים.
מכפלות טנזוריות של מטריצות ושערים קוונטיים
תיארתי מכפלה טנזורית בתור משהו אבסטרקטי למדי, שלוקח שני וקטורי בסיס \( e_{i},f_{j} \) ויוצר מהם איזה איבר חדש \( e_{i}\otimes f_{j} \) שהוא משהו מסוג שלא נראה קודם ואין לנו איך להבין את הבפנוכו שלו. אבל למעשה, אפשר גם לתת תיאור “חישובי” מאוד קונקרטי למכפלות טנזוריות אם במקום לדבר על מרחבים וקטוריים ואופרטורים עליהם אפשר לעבור לדבר על הייצוג החביב עלינו באלגברה לינארית לוקטורים ואופרטורים: מטריצות.
כזכור, אם יש לי מרחב וקטור \( V \) ובסיס \( B=\left\{ b_{1},\ldots,b_{n}\right\} \) עבורו, אז לכל וקטור \( v\in V \) מתאימה מטריצה מסדר \( n\times1 \), מה שנקרא וקטור עמודה, של הקואורדינטות של \( v \) לפי הבסיס \( B \). למה הכוונה? מהתכונות של בסיס, ידוע שקיים ל-\( v \) ייצוג יחיד מהצורה \( v=\sum\lambda_{i}b_{i} \) והוקטור שמותאם ל-\( v \) בצורה הזו הוא פשוט \( \left[v\right]_{B}\triangleq\left(\begin{array}{c} \lambda_{1}\\ \vdots\\ \lambda_{n} \end{array}\right) \). באופן דומה, אם יש לנו אופרטור לינארי \( T:V\to V \) אז יש לו מטריצה מייצגת \( \left[T\right]_{B} \) שהעמודות שלה הן בדיוק וקטורי הקואורדינטות של \( T\left(b_{1}\right),\ldots,T\left(b_{n}\right) \). היופי בוקטורי קואורדינטות ומטריצות מייצגות הוא שמתקיים
\( \left[T\left(v\right)\right]_{B}=\left[T\right]_{B}\cdot\left[v\right]_{B} \)
כלומר, ביצענו מעין רדוקציה של הפעלת הטרנספורמציה הכללית \( T \) על האיבר \( v \) לפעולה הקונקרטית של חישוב כפל מטריצה בוקטור.
בפוסט הקודם על קיוביטים נקטתי בגישה הזו בלי למצמץ; את \( \left|\psi\right\rangle =\alpha\left|0\right\rangle +\beta\left|1\right\rangle \) תיארתי בחופשיות גם בתור \( \left(\begin{array}{c} \alpha\\ \beta \end{array}\right) \) ואופרטורים כמו \( H \) תיארתי בחופשיות עם מטריצות, למשל \( H=\frac{1}{\sqrt{2}}\left(\begin{array}{cc} 1 & 1\\ 1 & -1 \end{array}\right) \). אבל איך התיאור הזה מוכלל כשמדברים על מכפלות טנזוריות? כשיש לנו שני קיוביטים אז הבסיס החדש הוא \( \left|00\right\rangle ,\left|01\right\rangle ,\left|10\right\rangle ,\left|11\right\rangle \) אבל האם זה באמת הסדר “הנכון” בין אברי הבסיס? מה הגישה המסודרת לעניין?
ובכן, ביטוי המפתח הטכני לסיפור הזה הוא מה שנקרא מכפלת קרונקר, או סתם “מכפלה טנזורית” של מטריצות. אם \( A,B \) הן מטריצות (לאו דווקא מאותו סדר או ריבועיות!) כך ש-\( A \) היא מסדר \( n\times m \), אז מכפלת קרונקר שלהן מוגדרת בתור
\( A\otimes B=\left(\begin{array}{ccc} a_{11}B & \ldots & a_{1m}B\\ \vdots & & \vdots\\ a_{n1}B & \ldots & a_{nm}B \end{array}\right) \)
כלומר, \( A\times B \) היא מטריצת בלוקים שבנויה מהרבה בלוקים של המטריצה \( B \), כשבכל פעם המטריצה \( B \) הזו מוכפלת בכניסה אחרת של \( A \). ואני אתן דוגמאות קונקרטיות פשוטות: \( X\otimes H \) ו-\( Z\otimes H \), כאשר \( X=\left(\begin{array}{cc} 0 & 1\\ 1 & 0 \end{array}\right) \) ו-\( Z=\left(\begin{array}{cc} 1 & 0\\ 0 & -1 \end{array}\right) \) הן עוד מטריצות שראינו בפוסט הקודם.
\( X\otimes H=\frac{1}{\sqrt{2}}\left(\begin{array}{cccc} 0 & 0 & 1 & 1\\ 0 & 0 & 1 & -1\\ 1 & 1 & 0 & 0\\ 1 & -1 & 0 & 0 \end{array}\right) \)
\( Z\otimes H=\frac{1}{\sqrt{2}}\left(\begin{array}{cccc} 1 & 1 & 0 & 0\\ 1 & -1 & 0 & 0\\ 0 & 0 & -1 & -1\\ 0 & 0 & -1 & 1 \end{array}\right) \)
עוד נקודה שכדאי לתת עליה את הדעת היא שהמכפלה הטנזורית הזו היא בוודאי לא קומוטטיבית:
\( X\otimes Z=\left(\begin{array}{cccc} 0 & 0 & 1 & 0\\ 0 & 0 & 0 & -1\\ 1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0 \end{array}\right)\ne\left(\begin{array}{cccc} 0 & 1 & 0 & 0\\ 1 & 0 & 0 & 0\\ 0 & 0 & 0 & -1\\ 0 & 0 & -1 & 0 \end{array}\right)=Z\otimes X \)
בואו נעשה את זה עכשיו עבור קיוביטים. ניקח את הקיוביט \( \left|\psi_{1}\right\rangle =\alpha_{1}\left|0\right\rangle +\beta_{1}\left|1\right\rangle \) והקיוביט \( \left|\psi_{2}\right\rangle =\alpha_{2}\left|0\right\rangle +\beta_{2}\left|1\right\rangle \). הם מיוצגים על ידי הוקטור \( \left(\begin{array}{c} \alpha_{1}\\ \beta_{1} \end{array}\right),\left(\begin{array}{c} \alpha_{2}\\ \beta_{2} \end{array}\right) \), וכעת
\( \left(\begin{array}{c} \alpha_{1}\\ \beta_{1} \end{array}\right)\otimes\left(\begin{array}{c} \alpha_{2}\\ \beta_{2} \end{array}\right)=\left(\begin{array}{c} \alpha_{1}\alpha_{2}\\ \alpha_{1}\beta_{2}\\ \beta_{1}\alpha_{2}\\ \beta_{1}\beta_{2} \end{array}\right) \)
בפרט, אנחנו רואים ש-\( \left|00\right\rangle \) מתאים לוקטור \( \left(\begin{array}{c} 1\\ 0\\ 0\\ 0 \end{array}\right) \), \( \left|01\right\rangle \) מתאים לוקטור \( \left(\begin{array}{c} 0\\ 1\\ 0\\ 0 \end{array}\right) \), \( \left|10\right\rangle \) מתאים לוקטור \( \left(\begin{array}{c} 0\\ 0\\ 1\\ 0 \end{array}\right) \) ו-\( \left|11\right\rangle \) מתאים לוקטור \( \left(\begin{array}{c} 0\\ 0\\ 0\\ 1 \end{array}\right) \). זה בעצם מלמד אותנו מה הסדר ה”נכון” של הבסיס: הוא צריך להיות \( \left\{ \left|00\right\rangle ,\left|01\right\rangle ,\left|10\right\rangle ,\left|11\right\rangle \right\} \).
בואו נכליל את זה עכשיו: אם \( V,W \) הם שני מרחבים וקטוריים עם בסיסים \( E=\left\{ e_{1},\ldots,e_{n}\right\} \) ו-\( F=\left\{ f_{1},\ldots,f_{m}\right\} \), אז אני אסמן את הבסיס למכפלה הטנזורית שלהם בתור \( E\otimes F\triangleq\left\{ e_{1}\otimes f_{1},e_{1}\otimes f_{2},\ldots,e_{1}\otimes f_{m},\ldots,e_{n}\otimes f_{m}\right\} \) ועכשיו אני יכול לכתוב נוסחה שאומרת, מילולית, שמכפלת קרונקר משחקת יפה עם מכפלה טנזורית בכל הנוגע לטרנספורמציות שפועלות על מרחבים שהם מכפלות טנזוריות.
פורמלית, אם \( T:V\to V \) ו-\( S:W\to W \) הם שני אופרטורים ו-\( v\in V,w\in W \) הם וקטורים, אז הנוסחה שלי אומרת ש-
\( \left[T\left(v\right)\otimes S\left(w\right)\right]_{E\otimes F}=\left(\left[T\right]_{E}\otimes\left[S\right]_{F}\right)\cdot\left(\left[v\right]_{E}\otimes\left[w\right]_{F}\right) \)
השורה התחתונה של הסיפור היא שאם אנחנו רוצים לבנות אופרטור שפועל על שני קיוביטים מתוך אופרטורים שפועלים על קיוביט יחיד, אנחנו צריכים לבצע מכפלת קרונקר של המטריצות שלהן. בואו נראה דוגמא אחת של זה כדי שהעניין יישב לנו בנוחות.
נניח שאני מסתכל על הקיוביט \( \left|\psi_{1}\right\rangle =\left|0\right\rangle \) והקיוביט הנוסף \( \left|\psi_{2}\right\rangle =\left|1\right\rangle \). עכשיו אני מתעלל בשניהם, אבל בדרכים אחרות: על \( \left|\psi_{1}\right\rangle \) אני מפעיל את האופרטור \( X \) ומקבל \( \left|1\right\rangle \); על \( \left|\psi_{2}\right\rangle \) אני מפעיל את האופרטור \( Z \) ומקבל \( -\left|1\right\rangle \) (ששקול ל-\( \left|1\right\rangle \) אבל תזרמו עם הדוגמא, אני מנסה לשמור את הדברים פשוטים). עכשיו, אם אני אסתכל על שני הקיוביטים בתור מערכת משולבת, מה קרה פה? התחלתי מהמצב \( \left|01\right\rangle \) וסיימתי במצב \( -\left|11\right\rangle \). האם הייתי יכול גם לקבל את זה בתור כפל מטריצות?
המכפלה \( \left|0\right\rangle \otimes\left|1\right\rangle \) מיוצגת על ידי הוקטור \( \left(\begin{array}{c} 0\\ 1\\ 0\\ 0 \end{array}\right) \) כפי שכבר ראינו, וגם את המטריצה ל-\( X\otimes Z \) כבר ראינו. נכפול אותן:
\( \left(\begin{array}{cccc} 0 & 0 & 1 & 0\\ 0 & 0 & 0 & -1\\ 1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0 \end{array}\right)\cdot\left(\begin{array}{c} 0\\ 1\\ 0\\ 0 \end{array}\right)=\left(\begin{array}{c} 0\\ 0\\ 0\\ -1 \end{array}\right) \)
קיבלנו בדיוק את הוקטור עבור \( -\left|11\right\rangle \). איזה יופי! דברים עובדים!
עכשיו אנחנו מסוגלים להבין איך עובד מה שנקרא “שער קוונטי” ברמת הפורמליזם. שער קוונטי הוא אופרטור שמופעל על כמות ספציפית של קיוביטים - למשל, שער שפועל על קיוביט יחיד, או על שני קיוביטים, וכדומה. כשיש לנו מערכת עם מספר קיוביטים גדול יותר מאלו שהשער פועל עליהם, הרעיון הוא שלוקחים את השער ומבצעים מכפלת קרונקר שלו עם אופרטורי הזהות, \( I \), על שאר הקיוביטים. למשל, אם יש לנו מערכת בת 4 קיוביטים ואנחנו רוצים להפעיל שער \( H \) על הקיוביט השלישי, אנחנו מפעילים את האופרטור \( I\otimes I\otimes H\otimes I \) על המערכת כולה.
זה מסביר לנו שערים של קיוביט בודד. אבל מה עם שני קיוביטים? או! זו שאלה טובה!
שערים קוונטיים של שני קיוביטים
לפני רגע ראינו שער קוונטי שפועל על שני קיוביטים: \( X\otimes Z \). גם שער שפועל על קיוביט אחד ולא עושה כלום לקיוביט השני, כמו למשל \( H\otimes I \), הוא משהו שאפשר לחשוב עליו בתור “שער של שני קיוביטים”. השאלה המעניינת היא האם יש יותר מכך - והתשובה היא “בוודאי”.
שאלתי קודם את השאלה איך אפשר להגיע למצב השזור \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) אם מתחילים מהמצב \( \left|00\right\rangle \). התשובה היא שאי אפשר להגיע אליו עם השערים שכבר ראינו: חייבים שער של שני קיוביטים שלא ניתן לתיאור בתור הפעלה של שני שערי קיוביט בודד. הסיבה לכך היא שכפי שראינו, אי אפשר לכתוב את \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) בתור מכפלה טנזורית של שני קיוביטים. אם היינו מתחילים מהמכפלה הטנזורית \( \left|00\right\rangle \) ומפעילים על כל קיוביט פעולה שאפשר לחשוב עליה במנותק מהקיוביט השני, היינו מקבלים כתוצאה מכפלה טנזורית של שני קיוביטי התוצאה.
אם כן, צריך סוג חדש של שער על שני קיוביטים - כזה שהוא לא מכפלה טנזורית של שני שערים על קיוביט בודד. יש הרבה שערים כאלו, אבל הנה האחד שהוא הנפוץ ביותר: שער \( \text{CX} \), או Controlled-X או Controlled-Not, איך שלא תרצו לקרוא לו. הרעיון שלו הוא פשוט כשחושבים איך הוא פועל על מצבי בסיס: בהינתן מצב הבסיס \( \left|0b\right\rangle \), כאשר \( b\in\left\{ 0,1\right\} \), הוא לא עושה כלום, כלומר מחזיר את \( \left|0b\right\rangle \); ובהינתן מצב הבסיס \( \left|1b\right\rangle \) הוא מחזיר את \( \left|1b^{\prime}\right\rangle \) כאשר \( b^{\prime}=1-b \), כלומר הוא הופך את הקיוביט הזה (Not) או אם תרצו - מפעיל עליו שער X. המילה Controlled מגיעה מכך שהביט הראשון “שולט” על השאלה אם להפעיל את X או לא.
ככה זה נראה כשכותבים זאת במפורש:
\( \text{CX}\left|00\right\rangle =\left|00\right\rangle \)
\( \text{CX}\left|01\right\rangle =\left|01\right\rangle \)
\( \text{CX}\left|10\right\rangle =\left|11\right\rangle \)
\( \text{CX}\left|11\right\rangle =\left|10\right\rangle \)
וככה זה נראה בתור מטריצה:
\( \text{CX}=\left(\begin{array}{cccc} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 1\\ 0 & 0 & 1 & 0 \end{array}\right) \)
קחו רגע כדי לשכנע את עצמכם שאי אפשר לכתוב את המטריצה הזו בתור מכפלת קרונקר של שתי מטריצות \( 2\times2 \). זה לא קשה; בסך הכל צריך לשים לב לכך שיש ב-\( \text{CX} \) הזו שני בלוקים שבוודאי לא יכולים להתקבל מתוך כפל בסקלרים שונים של אותה מטריצה.
כעת, איך משתמשים ב-\( \text{CX} \) כדי לקבל את מצב בל, \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \), מתוך \( \left|00\right\rangle \)? זה פשוט למדי. קודם כל מפעילים \( H \) על הקיוביט הראשון, ומקבלים את המצב \( \frac{\left|00\right\rangle +\left|10\right\rangle }{\sqrt{2}} \); אחר כך מפעילים את \( \text{CX} \) על המצב הזה. מקבלים
\( \text{CX}\left(\frac{\left|00\right\rangle +\left|10\right\rangle }{\sqrt{2}}\right)=\frac{\text{CX}\left(\left|00\right\rangle \right)+\text{CX}\left(\left|10\right\rangle \right)}{\sqrt{2}}=\frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \)
וזה סוגר את הפינה הזו - עכשיו אנחנו מבינים איך כותבים שערים קוונטיים באופן כללי על שני קיוביטים ואפשר להתקדם לשלב הבא… חוץ מבעיה פרקטית קטנה. אמרתי קודם שאני יכול להציג כל שער קוונטי בתור מטריצה גדולה שמוכפלת בוקטור הגדול שמייצג את כל המערכת הקוונטית. אבל זה היה כשכל האופרטורים שלי פעלו על קיוביט בודד ולכן היה אפשר לקבל את המטריצה הגדולה על ידי מכפלות קרונקר של כולן. עם CX אי אפשר לעשות את זה. איך אפשר, למשל, לקבל את CX שמופעלת על מערכת בת שלושה קיוביטים כאשר, נניח, קיוביט הבקרה הוא דווקא קיוביט מס’ 3 ואילו הקיוביט שהופכים הוא קיוביט מס’ 1?
ובכן, הנה דרך מועילה להסתכל על זה מבחינה חישובית. שער CX (ושערים דומים לו שגם הם מהצורה של קיוביט בקרה + קיוביט שעליו פועל שער של קיוביט בודד) הוא אמנם לא מכפלת קרונקר אבל הוא סכום של שתי מכפלות קרונקר פשוטות. בואו ניזכר שאני משתמש בסימון \( \left|0\right\rangle \left\langle 0\right| \) כדי לתאר את האופרטור \( \left(\begin{array}{cc} 1 & 0\\ 0 & 0 \end{array}\right) \) ובסימון \( \left|1\right\rangle \left\langle 1\right| \) כדי לתאר את האופרטור \( \left(\begin{array}{cc} 0 & 0\\ 0 & 1 \end{array}\right) \). עכשיו קל לראות שמתקיים
\( \text{CX}=\left|0\right\rangle \left\langle 0\right|\otimes I+\left|1\right\rangle \left\langle 1\right|\otimes X \)
עם הביטוי הזה אפשר לשחק איך שרוצים כשבאים לשלב אותו במערכת קוונטית גדולה יותר. למשל, בדוגמא שלי, של מערכת של שלושה קיוביטים שבה אני משתמש בקיוביט 3 בתור בקרה ובקיוביט 1 בתור היעד, אופרטור ה-CX ה”מורחב” שלי יהיה
\( \underset{q_{1}}{\underbrace{I}}\otimes\underset{q_{2}}{\underbrace{I}}\otimes\underset{q_{3}}{\underbrace{\left|0\right\rangle \left\langle 0\right|}}+\underset{q_{1}}{\underbrace{X}}\otimes\underset{q_{2}}{\underbrace{I}}\otimes\underset{q_{3}}{\underbrace{\left|1\right\rangle \left\langle 1\right|}} \)
אפשר, כמובן, להתלונן שאני משתמש כאן בתעלול שעובד יפה לשער מהצורה “בקרה/פעולה” כמו CX אבל לא יעבוד לשערים קוונטיים כלליים של שני קיוביטים, וזה גם נכון; המתמטיקה של המקרה הכי כללי היא נטולת פתרונות אלגנטיים, אבל מצד שני אנחנו גם לא זקוקים לה על פי רוב ולכן לא אכנס אליה כאן.
מדידות במערכת של שני קיוביטים
מה שנשאר לנו לעשות כדי להבין איך מערכות של כמה קיוביטים עובדות הוא להבין איך מתבצעת מדידה בהן. למרבה המזל, בעצם כבר ראינו את ההגדרה עבורן בפעם הקודמת - דיברתי אז על מערכת של קיוביט בודד, אבל ההגדרה תקפה לכל מערכת. מדידה, כזכור, הוגדרה באמצעות סדרה של אופרטורים \( \left\{ M_{m}\right\} \) כך ש-\( \sum M_{m}^{\dagger}M_{m}=I \). ה-\( m \)-ים הקטנים היו התוצאות המספריות האפשריות של המדידה, וביצוע של מדידה על המצב \( \left|\psi\right\rangle \) כלל שני חלקים:
- בחירת התוצאה המספרית \( m \) בהסתברות \( p\left(m\right)=\left\langle \psi\right|M_{m}^{\dagger}M_{m}\left|\psi\right\rangle \)
- בהינתן שהתוצאה \( m \) נבחרה, העברה של המערכת הקוונטית למצב \( \frac{M_{m}\left|\psi\right\rangle }{\sqrt{\left\langle \psi\right|M_{m}^{\dagger}M_{m}\left|\psi\right\rangle }} \)
ההגדרה הזו עובדת כמו שהיא גם כשהמערכת הקוונטית שלנו מורכבת מיותר מקיוביט אחד, כל עוד האופרטורים \( M_{m} \) מקיימים את התנאי שנדרש מהם.
עוד דבר שראינו בפעם הקודמת היה מדידה פרוייקטיבית: זו הייתה דרך “לייצר” סדרת אופרטורים ותוצאות מדידה אפשריות מתוך אופרטור הרמיטי בודד; ערכי המדידה היו הערכים העצמיים של האופרטור הבודד הזה, וה-\( M_{m} \)-ים היו ההטלות על המרחבים העצמיים שלו (וסימנתי אותן ב-\( P_{\lambda} \) במקום ב-\( M_{m} \)).
גם הרעיון הזה תקף גם כאן, אבל בואו נראה אותו בפעולה בכמה דוגמאות כדי שנרגיש שאנחנו מבינים אותו.
ראשית, אם בקיוביט בודד מדידה “רגילה” הייתה מה שקראתי לו “מדידה בבסיס \( Z \)” כי לקחנו את האופרטור ההרמיטי \( Z=\left(\begin{array}{cc} 1 & 0\\ 0 & -1 \end{array}\right) \) והסקנו ממנו את אופרטורי המדידה \( \left|0\right\rangle \left\langle 0\right| \) ו-\( \left|1\right\rangle \left\langle 1\right| \), מה קורה אם מנסים להסתכל על \( Z\otimes Z \) בתור אופרטור מדידה עבור שני קיוביטים? זה עובד, אבל אולי לא לגמרי בצורה שאנחנו מצפים לה. לכל \( b_{1},b_{2}\in\left\{ 0,1\right\} \)
כל \( \left|b_{1}b_{2}\right\rangle \) הוא וקטור עצמי של \( Z\otimes Z \), עם הערך העצמי שהוא המכפלה של הערכים העצמיים שמתאימים ל-\( \left|b_{1}\right\rangle \) ו-\( \left|b_{2}\right\rangle \). אני אדגים:
\( Z\otimes Z\left(\left|0\right\rangle \otimes\left|1\right\rangle \right)=Z\left|0\right\rangle \otimes Z\left|1\right\rangle =\left(+1\cdot\left|0\right\rangle \right)\otimes\left(-1\cdot\left|1\right\rangle \right) \)
\( =\left(+1\right)\cdot\left(-1\right)\left|0\right\rangle \otimes\left|1\right\rangle \)
זה נובע מכך שבאופן כללי במכפלה טנזורית יש לנו לינאריות: \( \left(\lambda_{1}v_{1}\right)\otimes\left(\lambda_{2}v_{2}\right)=\left(\lambda_{1}\lambda_{2}\right)\left(v_{1}\otimes v_{2}\right) \).
כלומר, למרות שיש לנו שני קיוביטים, לאופרטור המדידה \( Z\otimes Z \) עדיין יש רק שני ערכי תצפית אפשריים שונים: \( +1 \) ו-\( -1 \). אינטואיטיבית היינו רוצים ארבעה ערכי תצפית שונים, כדי לתפוס את ערכי הבסיס \( \left|00\right\rangle ,\left|01\right\rangle ,\left|10\right\rangle ,\left|11\right\rangle \) שמתאימים לחשיבה שלנו “בגישה הנאיבית” על מה זו מדידה.
אחדד: מדידה “בגישה הנאיבית” היא הדבר הבא: בהינתן המצב הקוונטי \( \left|\psi\right\rangle =\alpha_{00}\left|00\right\rangle +\alpha_{01}\left|01\right\rangle +\alpha_{10}\left|10\right\rangle +\alpha_{11}\left|11\right\rangle \), ומצב בסיס \( \left|b_{1}b_{2}\right\rangle \) עם \( b_{1},b_{2}\in\left\{ 0,1\right\} \) המדידה מחזירה את התוצאה המספרית שמתאימה ל-\( \left|b_{1}b_{2}\right\rangle \) בהסתברות \( \left|\alpha_{b_{1}b_{2}}\right|^{2} \) ומעבירה את המערכת למצב \( \left|b_{1}b_{2}\right\rangle \).
השאלה, אם כן, היא מה “התוצאה המספרית שמתאימה ל-\( \left|b_{1}b_{2}\right\rangle \)”. אם אנחנו רוצים תוצאה מספרית שונה לכל אחד מארבעת הערכים, אפשר לנקוט בתעלול: להשתמש, למשל, באופרטור מדידה כמו \( 2Z\otimes I+I\otimes Z \). כאן \( \left|00\right\rangle \) הוא וקטור עצמי של הערך העצמי 3, \( \left|01\right\rangle \) של הערך העצמי 1, \( \left|10\right\rangle \) של הערך העצמי \( -1 \) ו-\( \left|11\right\rangle \) של הערך העצמי \( -3 \).
כל זה קצת מסורבל, אבל בחישוב קוונטי ממילא אנחנו בדרך כלל לא מודדים את כל הקיוביטים בבת אחת, אלא קיוביט אחד בכל פעם. כשיש לנו מערכת של שני קיוביטים, אז מדידה “רגילה” של הקיוביט הראשון מתבצעת באמצעות האופרטור \( Z\otimes I \) ומדידה של הקיוביט השני מתבצעת באמצעות \( I\otimes Z \).
כדי לקבל תחושה של מה בעצם קורה במדידה “חלקית” שכזו, בואו נסתכל שוב על מצב קוונטי כללי: \( \left|\psi\right\rangle =\alpha_{00}\left|00\right\rangle +\alpha_{01}\left|01\right\rangle +\alpha_{10}\left|10\right\rangle +\alpha_{11}\left|11\right\rangle \). הוקטורים העצמיים של \( Z\otimes I \) הם \( \left|00\right\rangle \) ו-\( \left|01\right\rangle \) עבור הערך העצמי \( +1 \), ו-\( \left|10\right\rangle ,\left|11\right\rangle \) עבור הערך העצמי \( -1 \). אופרטורי ההטלה הם \( \left|00\right\rangle \left\langle 00\right|+\left|01\right\rangle \left\langle 01\right| \) ו-\( \left|10\right\rangle \left\langle 10\right|+\left|11\right\rangle \left\langle 11\right| \). לכן נקבל את הדבר הבא:
- בהסתברות \( \left|\alpha_{00}\right|^{2}+\left|\alpha_{01}\right|^{2} \) תוצאת המדידה היא 1\( + \) והמערכת עוברת למצב \( \frac{\alpha_{00}\left|00\right\rangle +\alpha_{01}\left|01\right\rangle }{\sqrt{\left|\alpha_{00}\right|^{2}+\left|\alpha_{01}\right|^{2}}} \)
- בהסתברות \( \left|\alpha_{10}\right|^{2}+\left|\alpha_{11}\right|^{2} \) תוצאת המדידה היא 1\( - \) והמערכת עוברת למצב \( \frac{\alpha_{00}\left|10\right\rangle +\alpha_{01}\left|11\right\rangle }{\sqrt{\left|\alpha_{10}\right|^{2}+\left|\alpha_{11}\right|^{2}}} \)
זה כבר יותר מסובך ממדידה של קיוביט יחיד - אבל לא באמת כל כך נורא, החשבון הוא יחסית פשוט.
לסיום, אני רוצה שנראה מה קורה אם מודדים שני מצבים קוונטיים שונים על פי הקיוביט הראשון. המצב הראשון יהיה המצב של הסופרפוזיציה “האחידה”: \( \frac{\left|00\right\rangle +\left|01\right\rangle +\left|10\right\rangle +\left|11\right\rangle }{2} \). המקדם של כל מצב בסופרפוזיציה הוא \( \frac{1}{2} \) ולכן אם נבצע את החישוב שהצגתי לפני רגע, נראה שבהסתברות \( \frac{1}{2} \) תוצאת המדידה תהיה \( +1 \) והמצב הקוונטי יעבור לסופרפוזיציה \( \frac{\left|00\right\rangle +\left|01\right\rangle }{\sqrt{2}} \) ובהסתברות \( \frac{1}{2} \) התוצאה תהיה \( -1 \) והמצב הקוונטי יעבור לסופרפוזיציה \( \frac{\left|10\right\rangle +\left|11\right\rangle }{\sqrt{2}} \).
שימו לב שהמצב \( \frac{\left|00\right\rangle +\left|01\right\rangle }{\sqrt{2}} \) הוא לא מצב שזור; הוא בעצם שווה ל-\( \left|0\right\rangle \otimes\frac{\left|0\right\rangle +\left|1\right\rangle }{\sqrt{2}} \). כלומר, אפשר לחשוב על מה שהגענו אליו בתור שתי מערכות נפרדות של קיוביטים, שבהן הקיוביט הראשון נמדד וערכו התקבע על \( \left|0\right\rangle \), והקיוביט השני נותר בסופרפוזיציה שבה היה קודם וכלום לא השתנה מבחינתו. זה אכן מה שהגיוני לצפות לו פיזיקלית.
עכשיו בואו נעבור למצב השזור \( \frac{\left|00\right\rangle +\left|11\right\rangle }{\sqrt{2}} \) שבו המצב שונה בתכלית. כאן עדיין נקבל \( +1 \) בהסתברות \( \frac{1}{2} \), אבל אז המערכת תעבור למצב הקוונטי \( \left|00\right\rangle \); ובהסתברות \( \frac{1}{2} \) נקבל \( -1 \) והמערכת תעבור למצב הקוונטי \( \left|11\right\rangle \). גם אלו לא מצבים שזורים, כלומר המדידה “השמידה” את השזירות, אבל תראו מה קרה פה - הקיוביט השני, זה שלא נמדד, גם כן הוקרס! הסופרפוזיציה שבה הוא היה קודם (ולא הייתה בלתי תלויה בסופרפוזיציה של הקיוביט הראשון) נעלמה! התופעה הספציפית הזו היא-היא הסיבה לכוח ששזירה מוסיפה לחישובים קוונטיים. נסו לזכור את האינטואיציה הזו.
דברי סיכום ופרידה
הגענו לשלב שבו אנחנו מבינים פחות או יותר את כל המודל המתמטי שמאחורי חישוב קוונטי. מרחבים וקטוריים, מטריצות, מכפלות טנזוריות, מכפלות פנימיות, לכסון ספקטרלי של אופרטורים הרמיטיים - זה בערך כל מה שיש פה. כל היתר הם דברים נחמדים שנבנים מעל זה. בפרט, עכשיו אנחנו מסוגלים להבין את האופן שבו נפתר “ריבוע הקסם” של פרס ומרמין, אז זה יהיה הדבר הבא שאני אדבר עליו.
אבל אולי כדאי בכל זאת לומר לרגע בצורה מפורשת - מה זה בעצם חישוב קוונטי? הרעיון הוא שלוקחים \( n \)-קיוביטים, ואז מאתחלים איזה שהוא מצב קוונטי - בדרך כלל \( \left|0^{n}\right\rangle \), ואז מתחילים להפעיל עליו אופרטורים אוניטריים, מה שבדרך כלל אומר שמפעילים אופרטור של “שער קוונטי” שפועל רק על קיוביט או שניים ומורחב לפעול כמו הזהות על שאר הקיוביטים. בסיום של החישוב מבצעים מדידה של כל הקיוביטים ומקבלים מחרוזת של \( n \) ביטים “קלאסיים” שמגיעה מתוך התפלגות כלשהי. על הניסוי הזה אפשר לחזור מספר רב של פעמים כדי לקבל הערכה טובה להתפלגות הזו (למשל, שקיבלנו \( 00 \) ב-\( \frac{1}{2} \) מהפעמים, ב-\( \frac{1}{3} \) מהן קיבלנו 01 וב-\( \frac{1}{6} \) מהן קיבלנו 11).
בפועל אפשר לבצע מדידות גם באמצע החישוב הקוונטי, ואפילו לשנות את המשך החישוב בהתאם לתוצאת המדידה; ולא חייבים למדוד את כל הקיוביטים בסוף. אבל זהו בערך.
האם זה גם מה שקורה במציאות? כן ולא. במציאות קשה מאוד כיום לבצע חישובים שכאלו. לאתחל מצב כמו \( \left|0^{n}\right\rangle \)? זה קשה. מה שמקבלים בפועל הוא סופרפוזיציה של מצבים שאנחנו מקווים ש-\( \left|0^{n}\right\rangle \) דומיננטי בהם מספיק. ולהפעיל אופרטור כמו \( X \)? זה קשה, אנחנו מנסים לכייל את המחשבים ללא הרף כדי שהפעולה שהם מבצעים (במחשבים בני זמננו - על פי רוב באמצעות שליחת פולס אלקטרומנגטי בתדירות מתאימה) תהיה מספיק קרובה ל-\( X \). ולמדוד קיוביטים? זה ממש קשה מבחינת זה שיש רעשים במדידה. ובנוסף לקשיים הללו יש גם רעשים שמגיעים מבחוץ ויקלקלו את החישוב אפילו אם ננסה פשוט לשמור את המצב \( \left|0^{n}\right\rangle \) ולא נעשה לו כלום. בקיצור, כל התורה היפה הזו של חישוב קוונטי, כשבאים ליישם אותה בעולם האמיתי, חייבת הרחבה מהותית - חייבים לדבר על רעש וההשפעות שלו. זה כבר שייך לתחום שנקרא אינפורמציה קוונטית והוא יפה ומעניין בפני עצמו אבל אני לא אדחוף אותו לפוסט הזה. אנחנו מקווים שיום אחד נגיע למצב שבו יש לנו קודים לתיקון שגיאות בחישוב קוונטי שעובדים בצורה מספיק טובה כדי שאפשר יהיה לדמיין את המחשבים הקוונטיים כאילו הם עובדים במודל היפה והנקי שהצגתי פה שהוא חסין לרעשים; זה מה שקורה בחישוב קלאסי, שבו יש מנגנונים לטיפול ברעשים שמתכנת ממוצע לא צריך לחשוב עליהם ביומיום שלו.
אבל אני לא יכול לסיים ממש בלי להכניס טיזר למשהו מגניב במיוחד שרמזתי עליו עוד בתחילת הפוסט. בואו נסקור לרגע את השערים שראינו עד כה בחישוב קוונטי: שערי \( X,Y,Z \); שער \( H \); שער \( S \) ושער \( S^{\dagger} \); והפעם ראינו גם את השער \( \text{CX} \) וגם על מדידה אפשר לחשוב בתור שער.
ובכן, אם אני עושה חישוב קוונטי שמתבסס רק על השערים הללו, אפשר לבצע סימולציה שלו במחשב קלאסי בסיבוכיות לינארית. מה זה אומר בפועל? זה אומר שכל מה שאפשר לעשות במחשב קוונטי עם השערים הללו אפשר לעשות בקלי קלות גם במחשב רגיל; רק צריך להשתמש בשיטת סימולציה שהיא שונה לגמרי מגישת ה”נכפול מטריצה בוקטור”. התוצאה הזו נקראת “משפט Gottesman–Knill”; הרעיון מאחוריה היא שאפשר לייצג מצבים קוונטיים מסויימים בעזרת יוצרים של חבורת המייצבים שלהם (לא חשוב כרגע מה זה אומר…) והרעיון הזה הוא הבסיס לכמה וכמה עניינים לא טריוויאליים בחישוב קוונטי.
זה אומר שכדי להשלים את התמונה אני צריך להוסיף עוד שער כלשהו למשחק - כזה שמאפשר לייצר חישובים מסובכים יותר שהמשפט לא תופס. השער הזה נקרא \( T \), והוא בסך הכל שער תמים מאוד שמקיים \( T^{2}=S \) (בדומה לאיך ש-\( S^{2}=Z \)). הוא מוגדר בתור \( T=\left(\begin{array}{cc} 1 & 0\\ 0 & e^{\frac{i\pi}{4}} \end{array}\right) \).
עכשיו הידע הבסיסי שלנו שלם, פחות או יותר, ואפשר לגשת לדבר על הדברים המגניבים באמת.
נהניתם? התעניינתם? אם תרצו, אתם מוזמנים לתת טיפ: