对于错误,通常有两种:dom
主要是利用了定义在有限域\(\mathbb{F}_{2}\)上的线性代数,\(\mathbb{F}_{2}=\{0,1\}\),而后定义了两个操做,\(+\) 和 \(\cdot\)。编码
\(\cdot\)和正常的乘法同样,只有在\(1 \cdot1\)的时候结果为1,其他都为0,而\(+\)则有一点小不一样,由于这是一个封闭的有限域,因此\(1+1\)不等于2而是等于0,计算结果模2。spa
如今已经有了\(\mathbb{F}_{2}\),每个比特都是这么的一个空间,若是咱们有n比特,那么咱们的空间就是\(\mathbb{F}_{2}^{n}\),在这个空间上咱们能够定义向量。code
假定我有了线性独立向量\(g_1,...,g_k\)咱们把写着称之为generator of the code,由他们咱们能够张成封闭子空间 \(C\),\(C \geq \mathbb{F}_{2}^{n}\),这个空间的中的向量均可以由\(a_1g_1+a_2g_2+...+a_kg_k\)表达,其中\(a_1,...,a_k\)也都属于\(\mathbb{F}_{2}\),这个空间的维度为k。generator
这里咱们定义一个矩阵G,他的每一列都由generator \(g_1,...,g_k\)表示,因此这是一个\(n*k\)的矩阵。若是用属于\(\mathbb{F}_{2}^{k}\)的向量来表示\(a_1,...,a_k\),则上面的式子就能够变成\(Ga\),这至关因而一个映射,把空间\(\mathbb{F}_{2}^{k}\)映射成了\(C\)。class
这至关于就是一个编码方法了,把\(\mathbb{F}_{2}^{k}\)空间里的k位向量,编码成\(C\)空间里的n位向量,咱们只须要作一个矩阵和向量的乘法便可。方法
用一个例子来讲明一下:im
多数码:咱们的码字空间就是\(C=\{0^n,1^n\}\),用n个0来表示0,n个1来表示1,G就是一个简单的全1的列向量。tab
如今来看咱们的编码结果,\(\begin{pmatrix} 1\\1\\...\\1\end{pmatrix}a=\begin{pmatrix} x_1\\x_2\\...\\x_n\end{pmatrix}\)。di
对于向量x有什么是要知足的吗?
若是咱们的编码计算没有问题的话,咱们的\(x_1=x_2\),\(x_2=x_3\),……,\(x_{n_1}=x_n\),这个永也能够用另外一个种方式表达,\(x_1+x_2=0\)由于只有在他们同时为1或者同时为0的时候才会加起来为0。
为此,咱们能够定义一个新的矩阵H,\(H= \begin{pmatrix} 1 &1 & 0& ... & 0 \\ 0 & 1 & 1 & ... & 0 \\ ... \\ 0 & 0 & ... & 1& 1 \end{pmatrix}\)只有对角线上两个1,其余都是0.
有这个矩阵有什么用呢?
若是咱们有了这个矩阵,咱们能够用来验证咱们的编码是否是对的,经过计算\(Hx=0\)若是等于0,那么咱们的编码就是对的,若是不等于0,那么咱们的编码就发生了错误。
H也就是咱们的检测矩阵 check matrix,若是G是n*k 的矩阵的话,H就是(n-k)*n的矩阵。
咱们聊这么久的线性码的意义何在?
由于咱们能够把H 也就是 check matrix 拓展到量子的领域,也就是咱们的Stabilzer code。
经典线性码,有两种等价的描述,\(C_{c l}=\operatorname{Im}(G)=\operatorname{ker}(H) \leq \mathbb{F}_{2}^{n}\)
对H来讲,C空间里的任意一个向量都和H的每个行向量的内积都是0,\(H x=0 \Longleftrightarrow\langle x, h\rangle = 0 \forall h \in \operatorname{Im}(H^{\dagger})\)
从量子的角度来看,咱们的量子码字空间\(C=span\{|x\rangle: x \in C_{cl}\}\)和它对应的check aatrix H。
\(\forall h \in \operatorname{Im}(H^{\dagger})\)咱们选择这么一个操做\(Z^{h}=Z_{1}^{h_{1}} \ldots Z_{n}^{h_{n}}\)做用在 $|x\rangle $ 上,获得\(Z^{h}|x\rangle=Z_{1}^{h_{1}}\left|x_{1}\right\rangle \otimes \ldots \otimes Z_{n}^{h_{n}}\left|x_{n}\right\rangle=(-1)^{\langle h, x\rangle}|x\rangle\)。由于\(\langle h, x\rangle=0\),因此\(Z^h|x\rangle=|x\rangle\)。
也就是说,\(|x\rangle\)是\(Z^h\)特征值为1的特征向量。
\(C=\left\{|\psi\rangle: Z^{h}|\psi\rangle=|\psi\rangle \forall h \in \operatorname{Im} H\right\}\)这个条件的另外一种描述方法就是\(|\psi\rangle\) is stabilized by\(Z^h\)。
Stabilizer group(S)是什么?
简单来讲,stabilizer group(S)就是知足了如下两个条件的Pauli群的子群。
Pauli群是什么?
\(\left\{\omega^{c} X_{j}^{a_{j}} Z_{j}^{b_{j}}\right\}_{j=1, \ldots, N}^{a_{j}, b_{j}, c=0, \ldots, d-1}\)其中 \(w=e^{2\pi i/d}\) ,而且这个群是封闭的。
那么须要知足的两个条件是什么呢?
这两个条件实际上是统一的,能够相互推导,在S里没有-I很容易理解,若是有了-I,那么知足\(-I |x \rangle = |x\rangle\)的\(|x\rangle\)就只有0向量了。
若是在S里面没有-I,那么反对易的元素也不在S里面,Pauli矩阵要么是对易要么反对易,若是它们是反对易的,则存在\(S \ni g h g h=-g h h g=-I\),与第二个要求矛盾。
Stabilizer 子空间就是\(V_S=\{|\psi\rangle: g|\psi\rangle=|\psi\rangle, \forall g \in S\}\)。
一个stabilizer group(S)就有一个对应的stabilizer subspace,S里面的任意一个操做做用在这个子空间里都不会有什么变化。
如今咱们还能够来描述这个子空间的投影算子,咱们能够先定义一个\(\Pi_{S}\)使得\(\Pi_{S}=\frac{1}{|S|} \sum_{g \in S} g\)
若是\(g \in S\),那么\(g \Pi_{S}=\Pi_{S}\),证实这一点很容易,由于:
\(g \sum_{h \in S} h=\sum_{h \in S} g h=\sum_{h^{\prime}=g h \in S} h^{\prime}\)
\(g \in S\)一样也能够导出\(g^{\dagger} \in S\),由于S是一个封闭可逆的群,那么咱们能够得出么\(g^{\dagger} \Pi_{S}=\Pi_{S}\),即么\(\Pi_{S}^{\dagger} \Pi_{S}=\Pi_{S}\)
这说明了\(\Pi_{S}\)是一个投影算子。
接下来要说明\(\Pi_{S}\)投影的子空间就是咱们想要的\(V_S\),这个分为两方面:
综上,咱们能够说,\(\Pi_{S}=\operatorname{Proj}\left(V_{S}\right)\)是子空间上的投影算子。
咱们如今能够来计算子空间的维度,让\(|S|=2^{\ell}\),generator \(S=\left\langle s_{1}, \ldots, s_{\ell}\right\rangle\),
子空间的维度提及来简单,就是全部stabilizer特征值为1所对应的特征空间的交集,可是谁知道他们是怎么相交的呢?还好咱们有投影算子。
咱们能够说,\(\operatorname{dim} V_{S}=\operatorname{tr} \Pi_{S}\),这里的特征值只有0和1,而trace会把1给累加起来。
\(\operatorname{tr} \Pi_{S}=\frac{1}{|S|} \sum_{g \in S} \operatorname{tr} g=\frac{1}{2^{\ell}} \sum_{g \in S} 2^{n} \delta_{g, I}=2^{n-\ell}\)
只有\(g=I\)的时候trace才有值,其余状况就是普通的Pauli,trace为0,而什么状况\(g=I\)呢?事实上只有一种状况,那就是全部的a都为0,由于他们是线性独立的,因此咱们子空间的维度是\(2^{n-l}\)
回顾咱们经典的检测矩阵H,咱们有\(x \in C_{c l} \Longleftrightarrow H x=0\),并非全部的错误咱们都能检测,若是这个错误是把一个可能的码字,变成另外一个可能的码字,那么H怎么能知道这个是错误而不是一个正确的操做的?
若是错误正好是\(H(x+e)=H e=0\),那么这种错误就是不可检测的错误。
量子版本的stabilizer code也是如此。
那么,哪些错误是不能检测的呢?
那就是若是我犯了这个错误,可是我依旧在这组stabilizer的子空间里,这种错误就是不可检测的,由于我分不出来这到底是错误仍是操做。
假设\(|\psi\rangle \in V_{S}\),\(E \in P_{n}\),则:\(E|\psi\rangle \in V_{S} \quad \Leftrightarrow \quad g E|\psi\rangle=E|\psi\rangle \forall g \in S\)
\(g E|\psi\rangle=E|\psi\rangle\)意味着\(g E|\psi\rangle=Eg|\psi\rangle\),则Eg和gE是相等的,E和g对易。
若是咱们的错误和咱们的stabilizer对易,那么这种错误就是咱们不能检测出来的错误。
问题接下来就变成了,如何判断Pauli算子是否对易。
首先,全部的Pauli均可以写成\(p=(-1)^{a} X^{b} Z^{c}\)的形式,对于\(a \in \mathbb{F}_{2}, b, c \in \mathbb{F}_{2}^{n}\)
那么假定咱们有另外一个Pauli \(q=(-1)^{a^{\prime}} X^{b^{\prime}} Z^{c^{\prime}}\)
则\(p q=(-1)^{a+a^{\prime}} X^{b} Z^{c} X^{b^{\prime}} Z^{c^{\prime}}\)
对于中间的\(Z^{c} X^{b^{\prime}}=Z_{1}^{c_{1}} \cdots Z_{n}^{c_{n}} X_{1}^{b_{1}^{\prime}} \cdots X_{n}^{b_{n}^{\prime}}=X^{b^{\prime}} Z^{c}(-1)^{\left\langle b^{\prime}, c\right\rangle}\),即,若是Z和X在这一位上都有,那么就会有一个-1.
那么如今pq就变成了,\(p q=(-1)^{a+a^{\prime}+\left\langle b^{\prime}, c\right\rangle} X^{b+b^{\prime}} Z^{c+c^{\prime}}\)
同理,qp能够写成\(q p=(-1)^{a+a^{\prime}+\left\langle b, c^{\prime}\right\rangle} X^{b+b^{\prime}} Z^{c+c^{\prime}}\)
很容易发现,\(p q=(-1)^{\left\langle c, b^{\prime}\right\rangle+\left\langle b, c^{\prime}\right\rangle} q p\),若是-1上面的指数是0,那么他们就对易,反之,若是上面的指数是1,那么他们就反对易。
而这个,咱们又能够写成这样的形式\(\left\langle c, b^{\prime}\right\rangle+\left\langle b, c^{\prime}\right\rangle=\left(\begin{array}{ll}b^{T} & c^{T}\end{array}\right)\left(\begin{array}{cc}0_{n} & I_{n} \\ I_{n} & 0_{n}\end{array}\right)\left(\begin{array}{l}b^{\prime} \\ c^{\prime}\end{array}\right)=\left(\begin{array}{ll}b^{T} & c^{T}\end{array}\right) \Lambda\left(\begin{array}{l}b^{\prime} \\ c^{\prime}\end{array}\right)\)
因此泡利矩阵是否对易的关键记载于看\((b c)\)和\((b' c')\)之间是否垂直了,这里垂直的顶i的是定义是symplectic inner product