对于错误,一般有两种:

  • 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的列向量。

现在来看我们的编码结果,\(\begin{pmatrix} 1\\1\\...\\1\end{pmatrix}a=\begin{pmatrix} x_1\\x_2\\...\\x_n\end{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= \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是什么?

定义

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}\) ,并且这个群是封闭的。

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

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

这两个条件其实是统一的,可以相互推导,在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 子空间

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

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

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

现在我们还可以来描述这个子空间的投影算子,我们可以先定义一个\(\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\rangle\)和\(g \in S\)来说,\(g \Pi_{S}|\psi\rangle=\Pi_{S}|\psi\rangle\),也就是\(\Pi_{S}|\psi\rangle \in V_{S}\)。
  2. 如果\(|\psi\rangle \in V_{S}\),则\(\Pi_{S}|\psi\rangle=|\psi\rangle\),即\(V_{S} \subseteq \Pi_{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

量子纠错码——Stabilizer codes的更多相关文章

  1. 量子纠错码——Clifford group

    Clifford code Clifford group是什么? 简单的公式来表达,就是 \(Cl_{n}=\left\{U: U P_{n} U^{\dagger} \in P_{n}\right\ ...

  2. Note: Clay Codes: Moulding MDS Codes to Yield an MSR Code

    Background Erasure Code 纠删码:与纠错码.检错码类似,均为线性分组码,通过编码可以在有限损失的前提下恢复丢失的数据.  假设每个磁盘存储w比特数据,设\(d_0,\cdots ...

  3. 使用python编写量子线路打印的简单项目,并使用Sphinx自动化生成API文档

    技术背景 该文章一方面从量子线路的打印着手,介绍了一个简单的python量子线路工程.同时基于这个简单的小工程,我们顺带的介绍了python的API文档自动化生成工具Sphinx的基本使用方法. 量子 ...

  4. UVA-146 ID Codes

    It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In order to exerc ...

  5. Lattice Codes

    最近在做的一些关于lattice codes的工作,想记录下来. 首先,我认为lattice coding是一种联合编码调制技术,将消息序列映射到星座点.其中一个良好的性质是lattice point ...

  6. System Error Codes

    很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...

  7. Windows Locale Codes - Sortable list(具体一个语言里还可具体细分,中国是2052,法国是1036)

    Windows Locale Codes - Sortable list NOTE: Code page is an outdated method for character encoding, y ...

  8. Bar codes in NetSuite Saved Searches(transport/reprint)

    THIS IS A COPY FROM BLOG Ways of incorporating Bar Codes into your Netsuite Saved Searches.    Code ...

  9. Secret Codes

    Secret Codes   This is a list of codes that can be entered into the dialer to output the listed info ...

随机推荐

  1. python3(九) Section

    # list或tuple的部分元素 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] # -----------------传统方法 print([L[ ...

  2. Jackson优化使用实例

    Jackson优化使用实例 博客分类: Java综合   JSON的三种处理方式  Jackson提供了三种可选的JSON处理方法(一种方式及其两个变型): 流式 API:(也称为"增量分析 ...

  3. AJ学IOS 之微博项目实战(11)发送微博自定义TextView实现带占位文字

    AJ分享,必须精品 一:效果 二:代码: 由于系统自带的UITextField:和UITextView:不能满足我们的需求,所以我们需要自己设计一个. UITextField: 1.文字永远是一行,不 ...

  4. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(七)之Access Control

    Access control ( or implementation hiding) is about "not getting it right the first time." ...

  5. A - Wireless Network POJ - 2236

    题目大意:有n台坏掉的电脑,给出每台电脑的坐标,然后每次询问输入0(字符) x,表示电脑x恢复正常,输入S x y 询问x和y是否可以联网.只要是x和y的距离小于距离d,那么就可以联网,如果有个中介c ...

  6. 全网最全最细的jmeter接口测试教程以及接口测试流程详解

    一.Jmeter简介 ​ Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试. Jmeter具备高移植性,可以实现跨平台运行. Jmeter可以实 ...

  7. IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)

    由于昨天要写的文章没有写完,于是今天早上我四点半就"自然醒"了,心里面有事,睡觉也不安稳.洗漱完毕后,我打开电脑,正襟危坐,摆出一副要干架的态势,不能再拖了. 要写的文章中涉及到一 ...

  8. Java 多线程 -- 线程安全 双重检测(double checking)

    先看一个经典的12306案例: public class SynBlockTest { public static void main(String[] args) { // 一份资源 SynWeb1 ...

  9. 天池Docker学习赛笔记

    容器的基本概念 什么是容器? 容器就是一个视图隔离.资源可限制.独立文件系统的进程集合.所谓"视图隔离"就是能够看到部分进程以及具有独立的主机名等:控制资源使用率则是可以对于内存大 ...

  10. Liunx常用操作(二)-vim中删除命令

    VIM简介 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是自由软件.Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Ema ...