本文檢視從單一量子位狀態構建多量子位狀態的規則,並討論需要在閘集合中包含的閘操作,以形成普遍性的多量子位量子計算機。 這些工具是瞭解程式代碼中常用之 Q# 閘道集的必要工具。 為什麼量子糾纏或干涉等效果會令量子計算比傳統計算更強大,了解到這些直覺的過程中,它們也至關重要。
單一量子位和多量子位網關
量子運算的真正能力只會隨著您增加量子位數目而變得明顯。 單一量子位具有一些反直覺功能,例如在指定時間處於多個狀態的能力。 不過,如果您在量子電腦中只擁有單比特閘,那麼計算器甚至傳統超級電腦會使其計算能力顯得微不足道。
量子運算能力產生,部分原因是量子狀態向量空間的維度隨著量子位數目以指數方式成長。 這表示,雖然單一量子位可以簡單模型化,但模擬五十個量子位量子計算,可以說會推動現有超級計算機的限制。 僅增加一個量子位元,儲存狀態所需的記憶體會加倍,計算時間大致加倍。 這種計算能力的快速翻倍,是為什麼擁有相對較少量子位的量子計算機,遠超過現今、明天和以後一些計算工作最強大的超級計算機。
雙量子位狀態
假設你有兩個分別處於以下狀態的量子位元:
$$ \psi=\begin{bmatrix} \alpha \\ \beta \end{bmatrix} $$ $$ \phi=\begin{bmatrix} \gamma \\ \delta \end{bmatrix} $$
對應的兩量子位元態是向量張量積( Kronecker積)的結果,定義如下:
$$ \psi \otimes \phi = \begin{bmatrix} \alpha \\ \beta \end{bmatrix} \otimes \begin{bmatrix} \gamma \\ \delta \end{bmatrix} =\begin{bmatrix} \alpha \begin{bmatrix} \gamma \\ \delta \end{bmatrix} \\ \beta \begin{bmatrix}\gamma \\ \delta \end{bmatrix} \end{bmatrix} = \begin{bmatrix} \alpha\gamma \\ \alpha\delta \\ \beta\gamma \\ \beta\delta \end{bmatrix}. $$
因此,假設有兩個單一量子位狀態$\psi$和 $\phi$,每個維度 2,對應的兩個量子位狀態$\psi\otimes\phi$是 4 維。 向量
$$ \begin{bmatrix} \alpha_{{00}\\\alpha___{{01}\\\alpha{{10}\\\alpha{{11}\end{bmatrix}$$
如果,則表示兩個量子位上的量子狀態
$$ |\alpha_{{00}|^2 + |\alpha_{{01}|^2 + |\alpha_{10}|^2 + |\alpha_{{11}|^2 = 1. $$
一般而言,您可以看到維度為 $v_1 \otimes v_2 \otimes\cdots\otimes v_n$ 的單位向量 $2 \cdot 2 \cdot 2 \cdots= 2^n$,表示使用此結構的 $n$ 個量子位的量子狀態。 如同單一量子位,多個量子位的量子狀態向量會保存描述系統行為所需的所有資訊。 如需向量和張量產品的詳細資訊,請參閱 Quantum Computing 中的向量和矩陣。
雙量子位狀態的計算基礎是由一個量子位基礎狀態的張量乘積所組成。 對於一個雙量子位元系統,存在以下四個狀態:
$$00 \equiv\begin{bmatrix} 1 \\ 0\end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0\end{bmatrix}=\begin{bmatrix}1 \\ 0 \\\\ 0 0\end{bmatrix}$$
$$01 \equiv\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}0 \\ 1 \end{bmatrix}=\begin{bmatrix} 0 \\ 1 \\ 0 \\\end{bmatrix}$$
$$10 \equiv\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}=\begin{bmatrix} 0 \\ 0 \\ 1 0 \\\end{bmatrix}$$
$$11\equiv\begin{bmatrix} 0\\ 1\end{bmatrix}\otimes\begin{bmatrix} 0\\ 1\end{bmatrix}=\begin{bmatrix} 0\\ 0\\ 0\\ 1\end{bmatrix}$$
儘管你總是可以取兩個單一量子比特狀態的張量積來形成一個雙量子比特狀態,但並非所有的雙量子比特量子狀態都可以表達為兩個單一量子比特狀態的張量積。 例如,不存在狀態 $\psi$ 和狀態 $\phi$ 使得其張量積為該狀態
$$ \psi \otimes \phi = \begin{bmatrix}1 / \sqrt{{2}\\ 0 \\ 0 \\ 1/。\sqrt{{2}\end{bmatrix} $$
這種無法寫成單一量子位元態的張量積的雙量子位元態稱為糾纏態,這兩個量子位元稱為糾纏。 鬆散地說,因為量子狀態無法視為單一量子位狀態的張量乘積,因此狀態保留的資訊不會個別限制在其中一個量子位。 反而,資訊是以非本地的方式儲存在兩種狀態之間的關聯性中。 這種非位置的資訊是量子運算在傳統運算上的主要區別特徵之一,對於許多量子通訊協定而言,包括量子錯誤修正,都是不可或缺的。
測量雙量子位元狀態
測量兩個量子位狀態類似於單一量子位測量。 測量狀態
$$ \begin{bmatrix} \alpha_{{00}\\\alpha___{{01}\\\alpha{{10}\\\alpha{{11}\end{bmatrix}$$
得出$00$的機率為$|\alpha_{{00}|^2$,$01$的機率為$|\alpha_{{01}|^2$,$10$的機率為$|\alpha_{10}|^2$,11$的機率為$|\alpha_{11}|^2$。 變數 $\alpha_{00}$、$\alpha_{01}$、$\alpha_{10}$$\alpha 和 _{11}$ 是刻意命名的,以明確表達這種關聯。 測量後,若結果為 $00$ ,則雙量子位系統的量子態崩潰,現在為
$$00\equiv\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0\end{bmatrix}。 $$
您也可以測量雙量子位元狀態中的單一量子位元。 當您只測量兩個量子位狀態的一個量子位時,測量的影響與測量兩個量子位的影響略有不同。 不同,因為整個狀態不會折疊為計算基礎狀態,而只會折疊為一個子系統。 換句話說,測量兩量子位狀態中的一個量子位,只會使相關的子系統折疊到計算基底狀態。
為此,考慮測量以下態的第一個量子位元,該量子位元由對兩個初始設定為0態的量子比特應用哈達瑪德轉換$$H所形成:
$$H^{\otimes 2}\left(\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}\right)=\frac{{1}{2}\begin{bmatrix} 1 & 1 & 1 & 1 \\amp; -1 & 1 & -1 & 1 \\amp; 1 & -1 & -1 & 1 \\amp; -1 & -1 & 1 &\end{bmatrix}\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix}=\frac{{1}{2}\begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix} 結果\mapsto\begin{cases}\text{}= 0 & \frac{{1}{\sqrt{2}}\begin{bmatrix} 1 \\ 1 \\ 0 \\ 0 \end{bmatrix}\\\text{ 結果}= 1 & \frac{{1}{\sqrt{{2}}\begin{bmatrix} 0 \\ 0 \\ 1 \\ 1。\end{bmatrix}\\\end{cases} $$
兩種結果發生的機率均為50%。 可以從以下事實推斷出結果:如果將第一個量子位元上的 $0$ 換成 $1$,測量前的量子狀態並不會改變。
測量第一個或第二個量子位的數學規則很簡單。 設 $e_k$ 為第 $k^{\rm}$ 個計算基底向量,S$ 為所有滿足該量子位元在該 $k$ 值下取值為$1$的 $e_k$ 的集合。 例如,如果您想要測量第一個量子位,則 $S$ 會包含 $e_1\equiv 10$,$e_3\equiv 11$。 同樣地,如果您對第二個量子位 $S$ 感興趣,則包含 $e_2\equiv 01$,$e_3 \equiv 11$。 則測量所選量子比特為 $1$ 的機率為 狀態向量 $\psi$
$$ P(\text{結果}= 1) =\sum_{e_k \text{ ,在集合 } S}\psi^\dagger e_k e_k^\dagger\psi 中。 $$
注意
本文使用小端序格式來標記計算基底。 在小端格式中,最低有效位元會先出現。 例如,以小端格式中,位元組合 001 代表數字四。
由於每個量子位測量只能產生 $0$ 或 $1$,因此測量 $0$ 的機率 $1-P(\text{結果}=1)$,這就是為什麼您只需要測量 $1$機率的公式。
這類量測對狀態的動作可以用數學方式表示為
$$ \psi \mapsto \frac{\sum_{e_k \text{ 在集合 } S} e_k e_k^\dagger\psi}{\sqrt{P(\text{結果}= 1)}}中。 $$
謹慎的讀者可能會擔心分母為零時會發生什麼事。 雖然這種狀態尚未定義,但你不必擔心這種可能性,因為機率為零。
如果您採用 $\psi$ 為先前指定的統一狀態向量,且有興趣測量第一個量子位,則
$$P(\text{第一個量子位元的測量}=1)(=^\psi e_1) (e_1^\dagger\psi) + (\psi^\dagger e_3) (e_3^\dagger\psi) =| e_1^\dagger\psi|^2 + |e_3^\dagger\psi|^2。 $$
這隻是預期測量結果的兩個機率總和,$10$,$11$。 在我們的範例中,這會評估為
$$ \frac{ {1}{4} \left| \begin{bmatrix} 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix}\right|^2 + \frac{1}{{4}\left|\begin{bmatrix} 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix}\right|^2 。=\frac{{1}{{2} $$
這完全符合我們的直覺。 同樣地,第一個量子位之後的狀態會測量為 $1$ ,可以寫入為
$$ \frac{\frac{e_1}{2}+\frac{e_3}{2}}{\sqrt{\frac{1}{2}}}=\frac{1}{\sqrt{2}}\begin{bmatrix} 0 \\ 0 \\ 1 1 \\\end{bmatrix}$$
依舊根據我們的直覺。
雙量子位操作
如同在單一量子位案例中,任何一元轉換都是量子位的有效作業。 一般而言,n 量子位的$一元轉換是大小$為 2^n $ 2^n 的矩陣 $U$(使其在大小 \times2^n$$ 的向量上作用),因此 U$^ U^${-1}=。\dagger$ 例如,CNOT (controlled-NOT) 網關是常用的雙量子位網關,並以下列單位矩陣表示:
$$ \text{CNOT}=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix}$$
我們也可以在這兩個量子位上套用單一量子位網關,以形成雙量子位網關。 例如,如果您套用閘門
及
<c0 /><c1 /> E <c2 />& f <c3 /> g <c4 />& h <c5 /><c6 />
對第一與第二量子位元,這等價於應用由其張量積給出的兩量子比特酉子:
因此,您可以採用一些已知單一量子位網關的張量乘積來形成雙量子位網關。 兩個量子位網關的一些範例包括 $H \otimes H$、 $X \otimes\mathbf{1}$和 $X \otimes Z$。
請注意,雖然任何兩個單一量子位閘可以透過其張量乘積定義一個二量子位閘,但反之則不然。 並非所有的雙量子位閘門都可以表示成單量子位閘門的張量乘積。 這樣的閘被稱為糾纏閘。 糾纏門的其中一個範例是 CNOT 閘道。
受控制閘道背後的直覺可以一般化為任意閘道。 一般而言,受控網關是作為身分識別的網關,除非特定量子位是 $1$。 您表示一個受控制的單位運算,在這個例子中,它是被標記為 $x$ 的量子位所控制,表示為 $\Lambda_x(U)$。 舉例$\Lambda來說,_0(U) e_{1}\otimes{\psi}= e_{1}\otimes U{\psi}$ 和 $\Lambda_0(U) e_{{0}\otimes{\psi}= e_{{0}\otimes{\psi}$,其中 $e_0$ 和 $e_1$ 是對應於 $0$ 和 $1$ 的單一量子位元的計算基底向量。 例如,考慮以下受控-$Z$ 閘,您可以將其表達為
$$ \Lambda_0(Z) =\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 \end{bmatrix}={(\mathbf\mathbf{1}\otimes H)\operatorname{CNOT}(\mathbf{1}\otimes H)。 $$
以有效率的方式建置受控單位是一項重大挑戰。 實作受控制單位的最簡單方式,需要形成基本網關受控制版本的資料庫,並以其受控制的對應專案取代原始單一作業中的每個基本網關。 此方法通常浪費,而且深入解析通常可以用來將幾個閘道取代為受控制的版本,以達到相同的影響。 基於這個理由,架構提供了兩種方法:可以執行一種天真的控制方法,或者如果已知有優化的手動調整版本,則允許用戶定義一個受控的一元運算版本。
閘也能夠使用古典信息來控制。 例如,傳統控制的 not-gate 只是一個普通的 not-gate,只有在傳統位 $1$,而不是量子位時才會套用。 從這個意義上說,傳統控制的網關可以視為量子程序代碼中的 if 語句,其中閘道只會在程式代碼的一個分支中套用。
如同在單一量子位案例中,如果任何 $4 4\times$ 個單一矩陣可由網關乘積從此集合到任意精確度,則雙量子位網關集是通用的。 通用閘道集的其中一個範例是 Hadamard 閘道、T 閘道和 CNOT 閘道。 藉由取得這些閘道的產品,您可以在兩個量子位上近似任何一元矩陣。
多量子位系統
我們會遵循在雙量子位案例中探索的完全相同的模式,從較小的系統來構建多量子位的量子狀態。 這類狀態是藉由形成較小狀態的張量產品所建置。 例如,請考慮在量子計算機中編碼位字串 $1011001$ 。 您可以將此編碼為
$$1011001 \equiv\begin{bmatrix} 0 \\ 1\end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}0 \\ 1\end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1\end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0\end{bmatrix}\otimes1 \begin{bmatrix}0 \\1 \end{bmatrix}0 \otimes0 \begin{bmatrix}1 \\。\end{bmatrix} $$
量子閘道的運作方式完全相同。 例如,如果您想要將 $X$ 閘道套用至第一個量子位,然後在第二個和第三個量子位之間執行 CNOT,您可以將此轉換表示為
$$ \begin{align}(X \otimes\operatorname{CNOT}_{12}\otimes\mathbf{1}\otimes \mathbf{\mathbf{1}\otimes \mathbf{\mathbf{1}\otimes\mathbf{1}) \begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\equiv 0011001。 \end{align} $$
在許多量子位系統中,通常需要配置和解除分配量子位,做為量子計算機的暫存記憶體。 這樣的量子位元被稱為輔助量子位元。 根據預設,您可以假設量子位狀態會在配置時初始化為 $e_0$ 。 您可以進一步假設閘會在解除分配之前再次返回 $e_0$。 這個假設很重要,因為如果輔助量子位在解除分配時與另一個量子位緩存器糾纏,則解除分配的程式會損害輔助量子位。 基於這個理由,您一律假設這類量子位在發行之前會還原為其初始狀態。
最後,雖然需要將新的閘道新增至我們的閘道集,以達到兩個量子位量子計算機的通用量子運算,但在多量子位案例中不需要引進新的閘道。 網關 $H$、$T$和 CNOT 形成許多量子位的通用閘道集,因為任何一般單位轉換都可以分成兩個量子位旋轉系列。 然後,您可以使用針對兩個量子位案例開發的理論,並在擁有多個量子位時再次使用它。
注意
雖然用到目前為止的線性代數表示法當然可以用來描述多量子位元態,但隨著您增加狀態的大小,它會變得越來越繁瑣。 例如,7 位字串所產生的數據行向量是 $128$ 維度,因此使用稍早所述的表示法來表示它相當麻煩。 取而代之的是狄拉克符號,一種簡化量子態表示的符號速記。 如需詳細資訊,請參閱 Dirac 表示法。