Автоматическая компиляция квантовых цепей


12

Недавно был задан вопрос о том, как скомпилировать 4-кубитный вентиль CCCZ (Control-Control-Control-Z-Z) в простые 1-кубитные и 2-кубитные вентили, и единственный ответ, который был дан до сих пор, требует 63 вентилей !

Первым шагом было использование конструкции C n U, предоставленной Nielsen & Chuang:n

При n=3 это означает 4 шлюза CCNOT и 3 простых шлюза (1 CNOT и 2 Адамара достаточно для выполнения окончательной CZ на целевом кубите и последнем рабочем кубите).

Теорема 1 этой статьи гласит, что в общем случае CCNOT требует 9 однокубитных и 6 двухкбитных вентилей (всего 15):

введите описание изображения здесь


Это означает:

(4 CCNOT) x (15 ворот на CCNOT) + (1 CNOT) + (2 Адамара) = 63 всего ворот .

В комментарии было высказано предположение, что 63 шлюза могут быть затем скомпилированы с использованием «автоматической процедуры», например, из теории автоматических групп .

Как можно выполнить эту «автоматическую компиляцию», и насколько это уменьшило бы число вентилей с 1 и 2 кубитами в этом случае?


1
Я в середине нескольких вещей, но заметил ваш вопрос. Глобальные вентили Мёльмера-Серенсена являются 2-х кубитными вентилями, и в статье « Использование глобальных взаимодействий в эффективных конструкциях квантовых цепей» описывается: «Оптимизированная реализация шлюза CCCZ с использованием трех вентилей GMS», см. Рисунок 9. Вы можете написать ответ, если это полезно.
Роб

Представление на изображении требует только 4 CCNOT, и, следовательно, 63 ворот вместо 93.
Dyon J Don Kiwi van Vreumingen

@ DonKiwi, отметил! 4 CCNOT вместо 6. Я сейчас обновляю.
user1271772

1
@Rob: Вы, кажется, предлагаете соединить X в CCCX, используя два Адамара. Затем CCCX можно разложить так же, как в схеме Нильсена и Чаунга выше. Это верно? Во втором ответе на вопрос Донки Киви я сделал нечто подобное. Похоже, ваш комментарий пришел как раз тогда, когда я набирал этот ответ, так как они на расстоянии 5 минут (и я набрал его более 5 минут). Этот вопрос об «автоматической компиляции» все еще остается, поскольку было бы неплохо иметь возможность построить схему «очевидным способом», а затем автоматически скомпилировать в нечто более эффективное.
user1271772

1
@ user1271772 - помогает каждый (qu) бит.
Роб

Ответы:


6

Пусть g1gM - основные ворота, которые вам разрешено использовать. Для целей настоящего CNOT12 и CNOT13 т. Д. Рассматриваются как отдельные. Таким образом, M полиномиально зависит от n , число кубитов. Точная зависимость включает в себя детали того, какие типы ворот вы используете, и насколько они k локальны. Например, если есть x однобитовых ворот и y 2-кубитных ворот, которые не зависят от порядка, такого как CZ то .M=xn+(n2)y

Схема тогда является произведением этих генераторов в некотором порядке. Но есть несколько схем, которые ничего не делают. Как . Так что те дают отношения по группе. То есть это групповое представление где есть много отношений, которые мы не знаем.CNOT12CNOT12=Id g1gMR1

Задаче, которую мы хотим решить, дается слово в этой группе, которое является самым коротким словом, представляющим тот же элемент. Для общих групповых презентаций это безнадежно. Такое групповое представление, где эта проблема доступна, называется автоматическим.

Но мы можем рассмотреть более простую проблему. Если мы выбрасываем некоторые из , то слова до этого становятся в форме где каждый из является словами только в оставшихся буквах. Если нам удалось сделать их короче, используя отношения, которые не включают , то мы сделаем всю схему короче. Это похоже на самостоятельную оптимизацию CNOT, сделанную в другом ответе.giw1gi1w2gi2wkwigi

Например, если есть три генератора и слово , но мы не хотим иметь дело с , вместо этого мы сократим и до и , Затем мы складываем их обратно как и это сокращение исходного слова.aababbacbbabacw1=aababbaw2=bbabaw^1w^2w^1cw^2

Итак, WLOG (без потери общности), давайте предположим, что мы уже в этой задаче где мы теперь используем все указанные ворота. Опять же, это, вероятно, не автоматическая группа. Но что, если мы выбрасываем некоторые отношения? Тогда у нас будет другая группа, у которой есть фактор-карта до той, которую мы действительно хотим.g1gMR1

Группа no - это свободная группа , но если вы положите в качестве отношения, вы получите бесплатный продукт и существует частное отображение от первого к последующему, уменьшающее число в каждом сегменте по модулю .g1g2g12=id Z2Zg12

Отношения, которые мы выбрасываем, будут такими, что одно наверху (источник фактор-карты) будет автоматическим по замыслу. Если мы используем только те отношения, которые остаются и сокращают слово, то оно все равно будет более коротким словом для фактор-группы. Это просто не будет оптимальным для фактор-группы (цели для фактор-карты), но она будет иметь длину до длины, с которой она началась.

Это была общая идея, как мы можем превратить это в конкретный алгоритм?

Как мы выбираем и отношения, которые нужно выбросить, чтобы получить автоматическую группу? Именно здесь приходит знание о типах элементарных врат, которые мы обычно используем. Инволюций много, поэтому оставляйте только те. Обратите пристальное внимание на тот факт, что это только элементарные инволюции, поэтому, если вашему оборудованию трудно поменять кубиты, которые сильно разделены на вашем чипе, это записывает их только в те, которые вы можете легко сделать, и сокращая это слово до быть как можно короче.gi

Например, предположим, у вас есть конфигурация IBM . Тогда являются разрешенными воротами. Если вы хотите сделать общую перестановку, разложите ее на факторов. Это слово из группы которое мы хотим сократить ,s01,s02,s12,s23,s24,s34si,i+1s01,s02,s12,s23,s24,s34R1

Обратите внимание, что они не должны быть стандартными инволюциями. Например, вы можете добавить в дополнение кПодумайте о теореме Готтесмана-Найла , но абстрактно это означает, что ее будет легче обобщить. Например, используя свойство, которое при коротких точных последовательностях, если у вас есть конечные полные системы переписывания для двух сторон, то вы получаете одну для средней группы. Этот комментарий не нужен для остальной части ответа, но показывает, как вы можете собрать более общие примеры из приведенных в этом ответе.R(θ)XR(θ)1X

только отношения вида . Это дает группу Кокстера, и это автоматически. На самом деле, нам даже не нужно начинать с нуля, чтобы кодировать алгоритм для этой автоматической структуры. Он уже реализован в Sage (на основе Python) общего назначения. Все, что вам нужно сделать, это указать а оставшаяся реализация уже выполнена. Вы могли бы сделать некоторые ускорения в дополнение к этому.(gigj)mij=1mij

mij действительно легко вычислить из-за локальных свойств ворот. Если вентили не более чем локально, то вычисление может быть выполнено в мерном гильбертовом пространстве. Это потому, что если индексы не перекрываются, то вы знаете, что . для когда и коммутируют. Вам также нужно только вычислить менее половины записей. Это потому, что матрица симметрична, имеет на диагонали ( ). Также большинство записей просто переименовывают вовлеченные кубиты, так что если вы знаете порядокkmij22k1mij=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']

Отбрасывая те генераторы, как мы возвращаем только отношения, подобные и коммутирует с вентилями, которые не включают кубит . Это позволяет нам сделать декомпозицию до того, как как можно дольше. Мы хотим избежать таких ситуаций, как . (В Cliff + T часто стараются минимизировать T-count). Для этой части решающее значение имеет направленный ациклический граф, показывающий зависимость. Это проблема поиска хорошего топологического вида DAG. Это делается путем изменения приоритета, когда у вас есть выбор, какую вершину использовать дальше. (Я бы не стал тратить время на оптимизацию этой части слишком сильно.)TiTin=1Tiiw1gi1w2gi2wkwiX1T2X1T2X1T2X1

Если слово уже близко к оптимальной длине, делать нечего, и эта процедура не поможет. Но как самый простой пример того , что он находит, если у вас есть несколько единиц , и вы забыли там был в конце одного и в начале следующего, это позволит избавиться от этой пары. Это означает, что вы можете с уверенностью сказать, что при выполнении общих процедур «черного ящика» все эти очевидные отмены будут учтены. Это делает другие, которые не так очевидны; те используют когда .HiHimij1,2


+1 !!! Много деталей! Я читаю это :)
user1271772

1
@ AHussain, возможно ли проработать пример, в котором это применимо к «наивной» конструкции CCCZ в моем вопросе, и в итоге получим меньшее количество ворот? На исходный вопрос о CCCZ теперь есть 6 ответов, и многие из них имеют гораздо меньшее количество ворот. Интересно, что ваш подход даст для подсчета ворот.
user1271772

4

Используя процедуру, описанную в https://arxiv.org/abs/quant-ph/0303063 1 , любой диагональный вентиль - любой, таким образом, в частности вентиль CCCZ - может быть разложен в терминах, например, CNOT и однобитовых диагональных вентилей, где CNOT могут быть оптимизированы самостоятельно, следуя классической процедуре оптимизации.

Ссылка обеспечивает схему, использующую 16 CNOT для произвольных диагональных 4-кубитных вентилей (рис. 4).


Примечание. Хотя в принципе может существовать более простая схема (упомянутая схема была оптимизирована с учетом более ограниченной архитектуры схемы), она должна быть близка к оптимальной - схема должна создавать все состояния в форме для любого нетривиального подмножества , а для 4 кубитов их 15.iIxiI{1,2,3,4}

Отметим также, что эта конструкция ни в коем случае не должна быть оптимальной.


1 Примечание: я автор


Интересный. Тем не менее, я должен прочитать газету, чтобы увидеть, какова процедура. Также я жду, когда @AHussain расскажет нам, как это сделать, используя теорию автоматических групп.
user1271772
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.