してみましょうg1⋯gMあなたが使用を許可されている基本ゲートすること。この目的のために、CNOT12とCNOT13などは別々に扱われます。したがって、Mは、量子ビット数nに多項式的に依存しています。正確な依存関係には、使用するゲートの種類の詳細と、それらがどの程度kローカルであるかが含まれます。たとえば、C Zのような順序に依存しないx単一キュービットゲートとy 2キュービットゲートがある場合、M = x n + ( nCZM=xn+(n2)y。
その場合、回路はこれらのジェネレーターを何らかの順序で生成したものです。しかし、何もしない複数の回路があります。同様CNOT12CNOT12=Id。したがって、それらはグループに関係を与えます。それはそれがあるグループのプレゼンテーション ⟨g1⋯gM∣R1⋯⟩、我々が知らないことを多くの関係が存在する場合。
解決したい問題には、このグループ内の単語が与えられます。これは、同じ要素を表す最短の単語です。一般的なグループプレゼンテーションでは、これは絶望的です。この問題にアクセスできるグループ表示は、自動と呼ばれます。
しかし、より簡単な問題を考えることができます。gi一部を捨てると、前の単語はw1gi1w2gi2⋯wkという形式になります。ここで、各wiは残りの文字のみの単語です。gi含まない関係を使用してそれらを短くすることができた場合、回路全体が短くなります。これは、他の回答で行ったCNOTの最適化に似ています。
たとえば、3台の発電機が存在する場合、ワードがあるA 、B 、B 、B 、CのB 、B 、BのAが、我々が対処する必要はありませんC、我々は代わりに短くなりますwは1 = A bはBのBそしてW 2 = B B BのAに対するW 1及びW 2。私たちは、その後、として戻って一緒にそれらを置くワット 1つの Caababbacbbabacw1=aababbaw2=bbabaw^1w^2w^1cw^2とその元の単語の短縮です。
(一般性を失うことなく)WLOGそれでは、私たちはその問題であると仮定してみましょうすでに⟨g1⋯gM∣R1⋯⟩私たちは今、指定されたすべてのゲートを使用しています。繰り返しますが、これはおそらく自動グループではありません。しかし、関係の一部を捨てるとどうなるでしょう。次に、私たちが本当に欲しいものまでの商マップを持つ別のグループがあります。
グループ⟨g1g2∣−⟩一切関係がありません無料のグループが、その後、あなたは入れた場合g21=id関係など、あなたが得る自由な製品 Z2⋆Z、元からの商マップがあります後で、2を法とする各セグメントのg1の数を減らします。2
破棄する関係は、1階(商マップのソース)が設計により自動的になるような関係になります。残っている関係のみを使用して単語を短縮する場合、それは商グループの短い単語になります。商グループ(商マップのターゲット)には最適ではありませんが、元の長さ≤の長さを持ちます。
それが一般的なアイデアでしたが、どのようにしてこれを特定のアルゴリズムに変えることができますか?
自動グループを取得するために、どのようにgiとリレーションを選択して捨てますか?これは、私たちが通常使用する基本的なゲートの種類の知識が入る場所です。多くの退屈がありますので、それらだけを保持してください。これらは基本的な退屈に過ぎないという事実に注意してください。したがって、ハードウェアがチップ上で大きく分離されたキュービットを交換するのに苦労している場合、これはあなたが簡単にできるものだけに書き込み、その言葉を減らしますできるだけ短くしてください。
たとえば、IBM構成があるとします。その後s01,s02,s12,s23,s24,s34許さゲートです。一般的な置換を行いたい場合は、それをsi,i+1因子に分解します。つまり、グループ内の単語である⟨s01,s02,s12,s23,s24,s34∣R1⋯⟩短くしたい。
これらは標準的な退屈である必要はないことに注意してください。たとえば、Xに加えてR(θ)XR(θ)−1を投入できます。Gottesman-Knillの定理を考えてください。しかし、抽象的な方法で、一般化が容易になることを意味します。短い正確なシーケンスの下で、両側に有限の完全な書き換えシステムがある場合、中間グループに1つを取得するプロパティを使用するなど。このコメントは、残りの回答では不要ですが、この回答の例からより一般的な例をより大きく構築する方法を示しています。X
保持される関係は、形式(gigj)mij=1の関係のみです。これにより、Coxeterグループが提供され、自動的に実行されます。実際、この自動構造のアルゴリズムをコーディングするためにゼロから開始する必要さえありません。一般的な目的で既にSage(Pythonベース)に実装されています。あなたがしなければならないのは、mijを指定するだけで、残りの実装はすでに完了しています。その上でいくつかの高速化を行うことができます。
mijゲートの局所性のため、 m i jの計算は非常に簡単です。ゲートが最大でkローカルである場合、mij計算は22k−1次元のヒルベルト空間で行うことができます。これは、インデックスがオーバーラップしない場合、mij=2であることがわかっているためです。mij=2は、giとgj通勤する場合です。また、エントリの半分未満を計算するだけで済みます。これは、行列mijは対称で、対角線上に1があります((gigi)1=1)。また、ほとんどのエントリは関連するキュービットの名前を変更しているだけなので、(CNOT12H1)、計算をやり直すことなくCNOT37H3順序を知っています。
これにより、せいぜい2つの異なるゲートのみが関係するすべての関係が処理されました(証明:演習)。3つ以上を含む関係はすべて捨てられました。今、それらを元に戻します。それがあるとしましょう。そうすれば、新しい関係を使用してDehnの貪欲なアルゴリズムを実行できます。変更があった場合、それをノックバックして、コクセターグループを再度実行します。変更がなくなるまでこれを繰り返します。
単語が短くなったり、同じ長さを維持したりするたびに、線形または二次の振る舞いを持つアルゴリズムのみを使用しています。これはかなり安価な手順であるため、それを実行し、あなたが愚かなことをしないようにしてください。
自分でテストする場合は、ジェネレーターの数を N、試行するランダムワードの長さK、およびCoxeter行列をmとして指定します。
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
最初の2行は入力非還元ワードであり、次の二つが減少ワードです。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']
TiTni=1Tiiw1gi1w2gi2⋯wkwiX1T2X1T2X1T2X1
HiHimij≠1,2