令为允许使用的基本门。为此,和等被视为分开的。因此,是多项式依赖于的位数。精确的依赖关系涉及您使用的各种门以及它们在局部的详细信息。例如,如果有单量子位门和 2量子位门不依赖于像这样的顺序,则。g1⋯gMCNOT12CNOT13MnkxyCZM=xn+(n2)y
这样一来,电路就是这些生成器按某种顺序排列的产物。但是有多个电路什么也不做。像。因此,这些人给小组带来了关系。那是一个小组演示,其中有许多我们不知道的关系。CNOT12CNOT12=Id ⟨g1⋯gM∣R1⋯⟩
我们希望解决的问题是在该组中给一个单词,代表相同元素的最短单词是什么。对于一般的小组演讲,这是没有希望的。可以解决此问题的小组介绍称为自动。
但是我们可以考虑一个更简单的问题。如果我们抛弃某些,则from之前的单词将变成,其中每个仅是其余字母中的单词。如果我们使用不涉及的关系设法使它们更短,那么我们将使整个电路更短。这类似于在另一个答案中自行优化CNOT。giw1gi1w2gi2⋯wkwigi
例如,如果有三个生成器,并且单词是,但我们不想处理,我们将和缩短为和。然后,我们将它们重新组合为,这是原始单词的缩写。aababbacbbabacw1=aababbaw2=bbabaw^1w^2w^1cw^2
因此,WLOG(不失一般性),让我们假设已经在这个问题中,现在我们使用所有指定的门。同样,这可能不是自动组。但是,如果我们丢掉一些关系怎么办。然后,我们将有另一个小组,其商数映射到我们真正想要的商数映射。⟨g1⋯gM∣R1⋯⟩
组 no Relationships是一个自由组,但是如果将作为一个关系,您将获得免费产品并且存在从前者到后者的商映射,以减少模中每个段中的数量。⟨g1g2∣−⟩g21=id Z2⋆Zg12
我们抛出的关系将是这样的,楼上的那个(商图的来源)将通过设计自动实现。如果仅使用保留的关系并缩短单词,那么对于商组来说,它仍然是一个较短的单词。对于商组(商映射的目标)而言,它并不是最佳选择,但其长度等于开始时的长度。≤
那是一般的想法,我们如何将其转换为特定的算法?
我们如何选择要抛出的和关系以获得自动组?这是我们通常使用的基本门的知识的来源。有很多内卷,因此仅保留这些内卷。请注意以下事实,即这些仅仅是基本的对位运算,因此,如果您的硬件很难交换芯片上相距遥远的qubit,则只能将它们写入您可以轻松完成的工作并将其减少为越短越好。gi
例如,假设您具有IBM配置。那么是允许的门。如果要进行一般置换,请将其分解为因子。这是组中的一个词,我们希望缩短。s01,s02,s12,s23,s24,s34si,i+1⟨s01,s02,s12,s23,s24,s34∣R1⋯⟩
请注意,这些不一定是标准的对合。例如,除了外,还可以放入。想一想Gottesman-Knill定理,但以抽象的方式意味着它更容易推广。例如使用在短的精确序列下的属性,如果您在两侧都有有限的完整重写系统,那么对于中间组,您将获得一个。对于其余的答案,该注释是不必要的,但是它说明了如何从该答案的示例中构建更大,更通用的示例。R(θ)XR(θ)−1X
保留的关系仅是。这将创建一个Coxeter组,并且它是自动的。实际上,我们甚至不必从头开始为这种自动结构编写算法。一般已经在Sage(基于Python)中实现了它。您所要做的就是指定并且剩下的实现已经完成。您可能还需要进行一些加速。(gigj)mij=1mij
mij由于门的局部性,真的很容易计算。如果门最多为局部,则可以在维希尔伯特空间上完成的计算。这是因为如果索引不重叠,则您知道。当和下班时,。您还只需要计算少于一半的条目。这是因为矩阵是对称的,对角线上有()。同样,大多数条目只是重命名所涉及的量子位,因此,如果您知道kmij22k−1mij=2mij=2gigjmij1(gigi)1=1(CNOT12H1),您知道的顺序,而无需再次进行计算。CNOT37H3
这样可以处理所有最多只涉及两个不同门的关系(证明:锻炼)。涉及或更多关系的关系都被抛出了。现在,我们将它们放回去。假设我们已经有了,然后可以使用新的关系执行Dehn的贪婪算法。如果有更改,我们将其重新敲响,再次遍历Coxeter小组。重复此操作直到没有更改。3
每当单词变短或保持相同的长度时,我们仅使用具有线性或二次行为的算法。这是一个相当便宜的过程,因此最好这样做,并确保您没有做任何愚蠢的事情。
如果您想自己进行测试,则将生成器的数量设置为,将要尝试的随机单词的长度设置为,将Coxeter矩阵设置为。NKm
edge_list=[]
for i1 in range(N):
for j1 in range(i):
edge_list.append((j1+1,i1+1,m[i1,j1]))
G3 = Graph(edge_list)
W3 = CoxeterGroup(G3)
s3 = W3.simple_reflections()
word=[choice(list([1,..,N])) for k in range(K)]
print(word)
wTesting=s3[word[0]]
for o in word[1:]:
wTesting=wTesting*s3[o]
word=wTesting.coset_representative([]).reduced_word()
print(word)
与N=28
和的示例K=20
,前两行是输入的未精简词,后两行是精简词。我希望输入矩阵时不要打错字。m
[26, 10, 13, 16, 15, 16, 20, 22, 21, 25, 11, 22, 25, 13, 8, 20, 19, 19, 14, 28]
['CNOT_23', 'Y_1', 'Y_4', 'Z_2', 'Z_1', 'Z_2', 'H_1', 'H_3', 'H_2', 'CNOT_12', 'Y_2', 'H_3', 'CNOT_12', 'Y_4', 'X_4', 'H_1', 'Z_5', 'Z_5', 'Y_5', 'CNOT_45']
[14, 8, 28, 26, 21, 10, 15, 20, 25, 11, 25, 20]
['Y_5', 'X_4', 'CNOT_45', 'CNOT_23', 'H_2', 'Y_1', 'Z_1', 'H_1', 'CNOT_12', 'Y_2', 'CNOT_12', 'H_1']
放回类似生成器,我们只放回类似的关系,并且与不涉及qubit门进行交换。这使我们能够分解从面前的尽可能长的时间。我们想避免。(在Cliff + T中,人们通常试图使T数最小化)。对于这一部分,显示依赖性的有向无环图至关重要。这是找到DAG的良好拓扑类型的问题。当一个人可以选择接下来要使用的顶点时,可以通过更改优先级来实现。(我不会浪费时间优化这一部分。)TiTni=1Tiiw1gi1w2gi2⋯wkwiX1T2X1T2X1T2X1
如果单词已经接近最佳长度,则无需执行太多操作,此过程将无济于事。但由于其发现的最基本的例子是,如果您有多个单位,你忘了有一个在一个结束和在下次的开始,这将摆脱对。这意味着您可以放心地将常用例程放在黑匣子中,当您将它们放在一起时,那些明显的取消都将得到解决。它所做的其他事情并不那么明显。那些在。HiHimij≠1,2