하자 당신이 사용할 수 있다는 기본 게이트를합니다. 이 및 등 의 목적 상 별도의 것으로 취급됩니다. 따라서 은 퀴 비트 수인 에 대해 다항식으로 의존합니다 . 정확한 의존도는 사용 게이트의 종류와 방법에 대한 자세한 포함 - 현지 그들이합니다. 예를 들어,이 경우 단일 큐 비트 게이트 및 와 같은 순서에 의존하지 않는 2 큐 비트 게이트 다음 .g1⋯gMCNOT12CNOT13MnkxyCZM=xn+(n2)y
그러면 회로는 어떤 순서로 이러한 발전기의 곱입니다. 그러나 아무것도하지 않는 여러 회로가 있습니다. 마찬가지로 . 그래서 그들은 그룹과 관계를 맺습니다. 그것은 우리가 모르는 많은 관계 가있는 그룹 프레젠테이션 입니다.CNOT12CNOT12=Id ⟨g1⋯gM∣R1⋯⟩
우리가 풀고 자하는 문제는이 그룹에서 같은 요소를 나타내는 가장 짧은 단어 인 단어입니다. 일반적인 그룹 프레젠테이션의 경우 이것은 희망이 없습니다. 이 문제에 접근 할 수있는 일종의 그룹 프리젠 테이션을 자동이라고합니다.
그러나 우리는 더 간단한 문제를 고려할 수 있습니다. 일부를 이전의 단어는 여기서 각 는 나머지 문자의 단어 일뿐입니다. 포함하지 않는 관계를 사용하여 더 짧게 전체 회로를 더 짧게 만들 것입니다. 이것은 다른 답변에서 만든 자체 CNOT 최적화와 유사합니다.giw1gi1w2gi2⋯wkwigi
예를 들어,이 세 개의 발전기가 단어 인 경우 ,하지만 우리는 처리하지 않으려는 , 우리 것 대신에 Lite 버전 및 에 과 . 그런 다음 다시 로 정리 하면 원래 단어가 짧아집니다.aababbacbbabacw1=aababbaw2=bbabaw^1w^2w^1cw^2
따라서 WLOG (일반성을 잃지 않고), 우리가 이미 지정된 모든 게이트를 사용하는 이라는 문제가 있다고 가정 해 봅시다 . 다시 이것은 아마도 자동 그룹이 아닐 것입니다. 그러나 우리가 어떤 관계를 버린다면 어떨까요? 그런 다음 우리가 원하는 그룹에 대한 몫지도가있는 다른 그룹이 생깁니다.⟨g1⋯gM∣R1⋯⟩
그룹 아무 관계되는 무료 그룹 이 세우면,하지만 관계로서, 당신이 얻을 무료 제품 및 각 세그먼트 modulo 의 줄이는 전자에서 후자로의 몫 맵이 있습니다 .⟨g1g2∣−⟩g21=id Z2⋆Zg12
우리가 버린 관계는 위층의 것 (quotate map의 원천)이 의도적으로 자동적으로되는 것입니다. 우리가 단어를 유지하고 짧게하는 관계 만 사용한다면, 그것은 여전히 몫 그룹에 대해 더 짧은 단어가 될 것입니다. 몫 그룹 (몫지도의 대상)에 최적은 아니지만 시작하는 길이 의 길이 를 갖습니다 .≤
이것이 일반적인 아이디어였습니다. 어떻게 이것을 특정 알고리즘으로 바꿀 수 있습니까?
자동 그룹을 만들기 위해 와 관계를 어떻게 선택 합니까? 여기에서 우리가 일반적으로 사용하는 기본 게이트 종류에 대한 지식이 들어옵니다. 많은 진화가 있기 때문에 그만 유지하십시오. 이것이 근본적인 진화에 불과하다는 사실에주의를 기울이십시오. 하드웨어가 칩에서 크게 분리 된 큐 비트를 교체하는 데 어려움을 겪는 경우, 쉽게 할 수있는 단어로만 쓰면됩니다. 가능한 한 짧아야합니다.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
그것은 최대 2 개의 별개의 문 (증거 : 운동)에만 관련된 모든 관계를 처리했습니다. 명 이상이 관련된 관계 는 모두 폐기되었습니다. 우리는 이제 그것들을 다시 넣었습니다. 우리가 가지고 있다고 가정하면, 새로운 관계를 사용하여 Dehn의 탐욕스러운 알고리즘 을 수행 할 수 있습니다 . 변경 사항이 있으면 Coxeter 그룹을 다시 실행하기 위해 변경했습니다. 변경 사항이 없을 때까지 반복됩니다.3
단어가 짧아 지거나 같은 길이를 유지할 때마다 선형 또는 2 차 행동을하는 알고리즘 만 사용합니다. 이것은 다소 저렴한 절차이므로 그렇게 할 수도 있고 어리석은 짓을하지 않았는지 확인하십시오.
직접 테스트하려면 생성기 수를 , 시도하는 임의 단어 의 길이 및 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