Нехай є основними воротами, якими ви можете дозволити користуватися. Для цілей ім'я та тощо розглядаються як окремі. Отже, поліноміально залежить від , кількості кубітів. Точна залежність включає в себе деталі про типи воріт, які ви використовуєте, і наскільки -локальні вони. Наприклад, якщо є одиночні кубітні ворота та 2-кубітні ворота, які не залежать від порядку, наприклад тоді .g1⋯gMCNOT12CNOT13MnkxyCZM=xn+(n2)y
Тоді ланцюг є продуктом цих генераторів у певному порядку. Але є кілька мікросхем, які нічого не роблять. Як . Тож ті дають стосунки у групі. Тобто це групова презентація де існує багато відносин, про які ми не знаємо.CNOT12CNOT12=Id ⟨g1⋯gM∣R1⋯⟩
Проблема, яку ми хочемо вирішити, - це слово в цій групі, яке найкоротше слово, яке являє собою той самий елемент. Для загальних групових презентацій це безперспективно. Вид групової презентації, де ця проблема доступна, називається автоматичною.
Але ми можемо розглянути більш просту проблему. Якщо ми частину , то слова з раніше набули форми де кожен з це слова лише на літери, що залишилися. Якщо нам вдалося зробити їх коротшими, використовуючи відносини, які не включають , то ми зробимо всю схему коротшою. Це схоже на оптимізацію CNOT самостійно, зроблену в іншій відповіді.giw1gi1w2gi2⋯wkwigi
Наприклад, якщо є три генератори і слово є , але ми не хочемо мати справу з , ми замість цього і до та . Потім ми їх складемо разом як і це скорочення початкового слова.aababbacbbabacw1=aababbaw2=bbabaw^1w^2w^1cw^2
Тож WLOG (без втрати загальності), припустимо, ми вже в цій проблемі де зараз ми використовуємо всі вказані ворота. Знову ж це, мабуть, не автоматична група. Але що робити, якщо ми викинемо деякі відносини. Тоді у нас з’явиться ще одна група, яка має доцільну карту до тієї, яку ми насправді хочемо.⟨g1⋯gM∣R1⋯⟩
Група no є вільною групою , але тоді, якщо ви ставите як відношення, ви отримуєте безкоштовний продукт і є коефіцієнтна карта від першої до пізнішої, що зменшує кількість 's у кожному сегменті за модулем .⟨g1g2∣−⟩g21=id Z2⋆Zg12
Відносини, які ми викидаємо, будуть такими, що одна наверху (джерело довідкової карти) буде автоматизована за проектом. Якщо ми будемо використовувати лише відносини, які залишаються і скорочують слово, то це все одно буде скороченим словом для групи факторів. Він просто не буде оптимальним для групи коефіцієнтів (цільова частина коефіцієнта), але він буде мати довжину до довжини, з якою він розпочався.≤
Це була загальна ідея: як ми можемо перетворити це на конкретний алгоритм?
Як ми обираємо та відносини для викидання, щоб отримати автоматичну групу? Ось тут надходять знання про типові елементарні ворота, які ми зазвичай використовуємо. Інволюцій дуже багато, тому зберігайте лише ті. Уважно стежте за тим, що це лише елементарні інволюції, тому якщо у вашому обладнання є складний обмін кубітами, які значно розділені на вашій мікросхемі, це записує їх лише на ті, що ви можете легко зробити, і скорочуючи це слово до бути якомога коротшим.gi
Наприклад, припустимо, у вас є конфігурація IBM . Тоді - це дозволені ворота. Якщо ви хочете зробити загальну перестановку, розкладіть її на фактори . Це слово в групі яке ми хочемо скоротити .s01,s02,s12,s23,s24,s34si,i+1⟨s01,s02,s12,s23,s24,s34∣R1⋯⟩
Зауважте, що вони не повинні бути стандартними інволюціями. Ви можете кинути на додаток до наприклад. Подумайте про теорему Готтесмана-Кнілла , але абстрактно, це означає, що це буде простіше узагальнити. Наприклад, використовуючи властивість, що знаходиться в коротких точних послідовностях, якщо у вас є обмежені системи переписування для двох сторін, ви отримуєте одну для середньої групи. Цей коментар непотрібний для решти відповіді, але показує, як ви можете створити більш загальні приклади з наведених у цій відповіді.R(θ)XR(θ)−1X
Відносини, які зберігаються, є лише формами . Це дає групу Coxeter, і це автоматично. Насправді нам навіть не потрібно починати з нуля, щоб кодувати алгоритм цієї автоматичної структури. Вона вже реалізована в Sage (на основі Python) загального призначення. Все, що вам потрібно зробити, це вказати і в ньому вже залишилася реалізація. Крім того, ви можете зробити кілька прискорень.(gigj)mij=1mij
mij насправді легко обчислити через локальні властивості воріт. Якщо ворота максимум -локальні, то обчислення можна здійснити на мірному просторі Гільберта. Це тому, що якщо індекси не перетинаються, то ви знаєте, що . - це коли коли та . Ви також повинні лише обчислити менше половини записів. Це тому, що матриця симетрична, має 's по діагоналі ( ). Крім того, більшість записів просто перейменують залучені кубіти, тому якщо ви знаєте порядокkmij22k−1mij=2mij=2gigjmij1(gigi)1=1(CNOT12H1) , ви знаєте порядок без повторного обчислення.CNOT37H3
Це піклувалося про всі відносини, які стосувалися лише максимум двох різних воріт (доказ: здійснення). Відносини, в яких брали участь і більше, були викинуті. Тепер ми повернемо їх. Скажімо, у нас це є, тоді можна виконати жадібний алгоритм Дена, використовуючи нові відносини. Якщо відбулася зміна, ми збиваємо її назад, щоб знову пройти через групу Коксетера. Це повторюється, поки не буде змін.3
Кожного разу слово або скорочується, або залишається однакової довжини, і ми використовуємо лише алгоритми, що мають лінійну чи квадратичну поведінку. Це досить дешева процедура, тому ви можете зробити це і переконайтесь, що ви нічого не зробили дурним.
Якщо ви хочете перевірити це самостійно, дайте кількість генераторів як , довжину випадкового слова, яке ви пробуєте, та матрицю Коксетера як .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