Zgodnie z połączonym pytaniem, najprostszym rozwiązaniem jest po prostu zmusić klasyczny procesor do wykonania takich operacji, jeśli to możliwe . Oczywiście może to nie być możliwe, dlatego chcemy utworzyć dodatek .
Istnieją dwa rodzaje sumatora jednobitowego - sumator półbuty i sumator pełny . Pół-sumator bierze wejścia i B i wysyła "SUM (operacja XOR) S = A ⊕ B i 'carry' (operacja) C = ⋅ B . Pełną dodatek ma również w „carry” C i brak wejścia i „przeprowadzenia” wyjście C O u t , zastępując C . Zwraca S = A ⊕ B ⊕ C i nABS=A⊕BC=A⋅BCinCoutCS=A⊕B⊕Cini .Cout=Cin⋅(A+B)+A⋅B
Wersja kwantowa pół-sumatora
Patrząc na bramkę CNOT w rejestrze kubitowym rejestr kontrolny B : CNOT A → B | 0 ⟩ | 0 ⟩ BAB który bezpośrednio nadaje się sygnał wyjściowyBrejestrze jakoA⊕B=S. Jednak musimy jeszcze obliczyć przeniesienie i stanrejestruBzmienił się, dlatego musimy również wykonać operację AND. Można tego dokonać za pomocą bramki 3-qubit Toffoli (kontrolowana CNOT / CCNOT). Można tego dokonać za pomocą rejestrówAiBjako rejestrów kontrolnych i inicjalizacji trzeciego rejestru(C)w stanie| 0⟩
CNOTA→B|0⟩A|0⟩BCNOTA→B|0⟩A|1⟩BCNOTA→B|1⟩A|0⟩BCNOTA→B|1⟩A|1⟩B=|0⟩A|0⟩B=|0⟩A|1⟩B=|1⟩A|1⟩B=|1⟩A|0⟩B,
BA⊕B=SBAB(C)|0⟩, Dając sygnał wyjściowy trzeciego rejestru jako
. Zaimplementowanie Toffoli w rejestrach
A i
B kontrolujących rejestr
C, a następnie CNOT z
A sterującym
B, daje wynik rejestru
B jako sumę i wynik rejestru
C jako przeniesienie. Schemat obwodu kwantowego sumatora pół pokazano na rycinie 1.
A⋅B=CABCABBC
Rycina 1: Schemat obwodu pół-sumatora, składającego się z Toffoli, a następnie CNOT. Bity wejściowe są i B , dzięki czemu sumę S z przeprowadzenia C .ABSC
Wersja kwantowa pełnego sumatora
4ABCin11|0⟩|A⟩|B⟩|Cin⟩|0⟩
- AB1|A⟩|B⟩|Cin⟩|A⋅B⟩
- AB|A⟩|A⊕B⟩|Cin⟩|A⋅B⟩
- BCin1|A⟩|A⊕B⟩|Cin⟩|A⋅B⊕(A⊕B)⋅Cin=Cout⟩
- BCin|A⟩|A⊕B⟩|A⊕B⊕Cin=S⟩|Cout⟩
ABAB
|ψout⟩=|A⟩|B⟩|S⟩|Cout⟩
Cin2
ABCinSCout
Kwantowa wersja dodawacza tętnienia
Prostym rozszerzeniem pełnego sumatora jest sumator przenoszenia tętnienia, nazwany, ponieważ „faluje” wykonanie, aby stać się przenoszeniem następnego sumatora w szeregu sumatorów, pozwalając na sumy o dowolnej wielkości (jeśli są wolne). Kwantową wersję takiego sumatora można znaleźć np. Tutaj
Rzeczywista implementacja pół-sumatora
W wielu systemach zaimplementowanie bramki Toffoli nie jest tak proste jak zaimplementowanie pojedynczej bramki kubit (lub nawet dwóch qubit). Ta odpowiedź pozwala rozłożyć Toffoli na wiele mniejszych bram. Jednak w rzeczywistych systemach, takich jak IBMQX , mogą również występować problemy, w których kubity mogą być używane jako cele. W związku z tym rzeczywista implementacja w IBMQX2 wygląda następująco:
Rysunek 3: Implementacja pół-sumatora na IBMQX2. Oprócz rozkładania bramy Toffoli na wiele mniejszych bram wymagane są dodatkowe bramki, ponieważ nie wszystkie rejestry kubitowe mogą być używane jako cele. Rejestry q [0] i q [1] są dodawane, aby uzyskać sumę w q [1] i przenieść w q [2]. W takim przypadku wynik q [2] q [1] powinien wynosić 10. Uruchomienie tego na procesorze dało prawidłowy wynik z prawdopodobieństwem 42,8% (chociaż nadal był to najbardziej prawdopodobny wynik).