• 量子纠错码——Stabilizer codes


    对于错误,一般有两种:

    • random: 错误以一定的概率发生在每个比特上(对这种问题的研究一般是信息论中,信道熵一类的问题)
    • worst case: 错误发生在某个比特上,这也是纠错码想要解决的问题

    经典线性码:

    主要是利用了定义在有限域(mathbb{F}_{2})上的线性代数,(mathbb{F}_{2}={0,1}),然后定义了两个操作,(+)(cdot)

    (cdot)和正常的乘法一样,只有在(1 cdot1)的时候结果为1,其余都为0,而(+)则有一点小不同,因为这是一个封闭的有限域,所以(1+1)不等于2而是等于0,计算结果模2。

    现在已经有了(mathbb{F}_{2}),每一个比特都是这么的一个空间,如果我们有n比特,那么我们的空间就是(mathbb{F}_{2}^{n}),在这个空间上我们可以定义向量。

    假定我有了线性独立向量(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。

    这里我们定义一个矩阵G,他的每一列都由generator (g_1,...,g_k)表示,所以这是一个(n*k)的矩阵。如果用属于(mathbb{F}_{2}^{k})的向量来表示(a_1,...,a_k),则上面的式子就可以变成(Ga),这相当于是一个映射,把空间(mathbb{F}_{2}^{k})映射成了(C)

    这相当于就是一个编码方法了,把(mathbb{F}_{2}^{k})空间里的k位向量,编码成(C)空间里的n位向量,我们只需要做一个矩阵和向量的乘法即可。

    用一个例子来说明一下:

    多数码:我们的码字空间就是(C={0^n,1^n}),用n个0来表示0,n个1来表示1,G就是一个简单的全1的列向量。

    现在来看我们的编码结果,(egin{pmatrix} 1\1\...\1end{pmatrix}a=egin{pmatrix} x_1\x_2\...\x_nend{pmatrix})

    对于向量x有什么是要满足的吗?

    如果我们的编码计算没有问题的话,我们的(x_1=x_2),(x_2=x_3),……,(x_{n_1}=x_n),这个永也可以用另一个种方式表达,(x_1+x_2=0)因为只有在他们同时为1或者同时为0的时候才会加起来为0。

    为此,我们可以定义一个新的矩阵H,(H= egin{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 Longleftrightarrowlangle x, h angle = 0 forall h in operatorname{Im}(H^{dagger}))

    从量子的角度来看,我们的量子码字空间(C=span{|x angle: 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 angle $ 上,得到(Z^{h}|x angle=Z_{1}^{h_{1}}left|x_{1} ight angle otimes ldots otimes Z_{n}^{h_{n}}left|x_{n} ight angle=(-1)^{langle h, x angle}|x angle)。因为(langle h, x angle=0),所以(Z^h|x angle=|x angle)

    也就是说,(|x angle)(Z^h)特征值为1的特征向量。

    (C=left{|psi angle: Z^{h}|psi angle=|psi angle forall h in operatorname{Im} H ight})这个条件的另一种描述方法就是(|psi angle) is stabilized by(Z^h)

    Stabilizer是什么?

    定义

    Stabilizer group(S)是什么?

    简单来说,stabilizer group(S)就是满足了以下两个条件的Pauli群的子群。

    Pauli群是什么?

    (left{omega^{c} X_{j}^{a_{j}} Z_{j}^{b_{j}} ight}_{j=1, ldots, N}^{a_{j}, b_{j}, c=0, ldots, d-1})其中 (w=e^{2pi i/d}) ,并且这个群是封闭的。

    那么需要满足的两个条件是什么呢?

    1. S里面的所有的元素都是对易的,即可以交换,S is an abelian subgroup of (P_n)
    2. -I不在S里面

    这两个条件其实是统一的,可以相互推导,在S里没有-I很容易理解,如果有了-I,那么满足(-I |x angle = |x angle)(|x angle)就只有0向量了。

    如果在S里面没有-I,那么反对易的元素也不在S里面,Pauli矩阵要么是对易要么反对易,如果它们是反对易的,则存在(S i g h g h=-g h h g=-I),与第二个要求矛盾。

    Stabilizer 子空间

    Stabilizer 子空间就是(V_S={|psi angle: g|psi angle=|psi angle, forall g in S})

    一个stabilizer group(S)就有一个对应的stabilizer subspace,S里面的任意一个操作作用在这个子空间里都不会有什么变化。

    例子
    • (V_{S}=operatorname{span}{|00 angle}),对于这个子空间,(S={I I, I Z, Z I, Z Z}=langle I Z, Z I angle),之所以后面还划出来了一个IZ和ZI,那么是因为II和ZZ可以通过这两个相乘得到,我们也说, S is generated by IZ,ZI。
    • (V_{S}=operatorname{span}{|000 angle,|111 angle})这就是我们先前说的重复编码,对于这个子空间,他的S就是(S=langle Z Z I, I Z Z angle)前面的两个ZZ保证的是第一个比特和第二个比特是相同的,后面两个ZZ保证的是第二个比特和第三个比特是相同的。
    • (V_{S}=operatorname{span}{|+++ angle,|--- angle})对于这种情况,找他的S也很容易,因为就是一个换基的过程(S=langle X X I, I X X angle)
    投影算子

    现在我们还可以来描述这个子空间的投影算子,我们可以先定义一个(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),这个分为两方面:

    1. 对任意的(|psi angle)(g in S)来说,(g Pi_{S}|psi angle=Pi_{S}|psi angle),也就是(Pi_{S}|psi angle in V_{S})
    2. 如果(|psi angle in V_{S}),则(Pi_{S}|psi angle=|psi angle),即(V_{S} subseteq Pi_{S})

    综上,我们可以说,(Pi_{S}=operatorname{Proj}left(V_{S} ight))是子空间上的投影算子。

    我们现在可以来计算子空间的维度,让(|S|=2^{ell}),generator (S=leftlangle s_{1}, ldots, s_{ell} ight angle)

    子空间的维度说起来简单,就是所有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 angle in V_{S})(E in P_{n}),则:(E|psi angle in V_{S} quad Leftrightarrow quad g E|psi angle=E|psi angle forall g in S)

    (g E|psi angle=E|psi angle)意味着(g E|psi angle=Eg|psi angle),则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)^{leftlangle b^{prime}, c ight angle}),即,如果Z和X在这一位上都有,那么就会有一个-1.

    那么现在pq就变成了,(p q=(-1)^{a+a^{prime}+leftlangle b^{prime}, c ight angle} X^{b+b^{prime}} Z^{c+c^{prime}})

    同理,qp可以写成(q p=(-1)^{a+a^{prime}+leftlangle b, c^{prime} ight angle} X^{b+b^{prime}} Z^{c+c^{prime}})

    很容易发现,(p q=(-1)^{leftlangle c, b^{prime} ight angle+leftlangle b, c^{prime} ight angle} q p),如果-1上面的指数是0,那么他们就对易,反之,如果上面的指数是1,那么他们就反对易。

    而这个,我们又可以写成这样的形式(leftlangle c, b^{prime} ight angle+leftlangle b, c^{prime} ight angle=left(egin{array}{ll}b^{T} & c^{T}end{array} ight)left(egin{array}{cc}0_{n} & I_{n} \ I_{n} & 0_{n}end{array} ight)left(egin{array}{l}b^{prime} \ c^{prime}end{array} ight)=left(egin{array}{ll}b^{T} & c^{T}end{array} ight) Lambdaleft(egin{array}{l}b^{prime} \ c^{prime}end{array} ight))

    所以泡利矩阵是否对易的关键记载于看((b c))((b' c'))之间是否垂直了,这里垂直的顶i的是定义是symplectic inner product

  • 相关阅读:
    Python服务器开发三:Socket
    系统性能检测工具之lsof
    系统性能检测工具之iostat
    系统性能检测工具之vmstat
    系统性能检测工具之sar
    系统性能检测工具之ps
    系统性能检测工具之top
    Linux常用命令大全
    授权
    RMAN之REPORT命令
  • 原文地址:https://www.cnblogs.com/zmzzzz/p/12845358.html
Copyright © 2020-2023  润新知