Přeskočit na hlavní obsah

Klasické výpočty na kvantových počítačích

Nyní obrátíme pozornost k implementaci klasických algoritmů na kvantových počítačích. Uvidíš, že jakýkoli výpočet, který lze provést pomocí klasického booleovského obvodu, lze provést i kvantovým obvodem s podobnou asymptotickou výpočetní náročností. Navíc to lze udělat „čistým" způsobem, který bude popsán za chvíli, což je důležitý požadavek pro použití těchto výpočtů jako podprogramů uvnitř větších kvantových výpočtů.

Simulace booleovských obvodů pomocí kvantových obvodů

Booleovské obvody se skládají z hradel AND, OR, NOT a FANOUT. Abychom mohli simulovat booleovské obvody kvantovými obvody, začneme tím, že ukážeme, jak lze každé z těchto čtyř hradel simulovat kvantovými hradly. Jakmile to bude hotové, převod daného booleovského obvodu na kvantový obvod je jednoduchá záležitost simulace jednoho hradla po druhém. Budeme potřebovat pouze hradla NOT, controlled-NOT a Toffoliho, která jsou kromě toho, že jsou unitární, také deterministické operace.

Toffoliho hradlo

Toffoliho hradlo lze alternativně popsat jako controlled-controlled-NOT hradlo, jehož působení na stavy standardní báze je znázorněno na následujícím obrázku.

Toffoli gate

Mějme na paměti, že používáme konvenci řazení Qiskit, kde jsou qubity seřazeny podle rostoucí významnosti shora dolů. Maticová reprezentace tohoto hradla je následující.

(1000000001000000001000000000000100001000000001000000001000010000)\begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \end{pmatrix}

Další způsob, jak přemýšlet o Toffoliho hradlu, je ten, že je v podstatě dotazovacím hradlem pro funkci AND, v tom smyslu, že se řídí vzorem, který jsme viděli v předchozí lekci pro unitární implementace dotazovacích hradel libovolných funkcí s binárními řetězcovými vstupy a výstupy.

Toffoliho hradlo není součástí výchozí sady hradel diskutované dříve v této lekci, ale je možné sestavit Toffoliho hradlo z hradel H,H, T,T, TT^{\dagger} a CNOT následovně.

Quantum circuit for a Toffoli gate

Simulace booleovských hradel pomocí Toffoliho, controlled-NOT a NOT hradel

Jediné Toffoliho hradlo v kombinaci s několika hradly NOT může implementovat hradla AND a OR, a hradla FANOUT lze snadno implementovat pomocí hradel controlled-NOT, jak naznačují následující diagramy.

Simulating AND and OR gates with Toffoli gates

Ve všech třech případech qubity, na které hradla AND, OR a FANOUT působí, přicházejí zleva jako vstupy, a pro každé z nich také potřebujeme jeden pracovní qubit inicializovaný do nulového stavu. Tyto pracovní qubity se objevují uvnitř rámečků reprezentujících implementace hradel, aby naznačily, že jsou nové, a tedy součástí nákladů těchto implementací.

U hradel AND a OR nám také zbudou dva qubity navíc, kromě výstupního qubitu. Například uvnitř rámečku v diagramu reprezentujícím simulaci hradla AND zůstávají horní dva qubity ve stavech a\vert a\rangle a b.\vert b\rangle. Tyto qubity jsou znázorněny jako zůstávající uvnitř rámečků, protože již nejsou potřeba a nejsou součástí výstupu. Prozatím je můžeš ignorovat, i když se k nim brzy vrátíme.

Zbývající booleovské hradlo, NOT, je zahrnuto v naší výchozí sadě kvantových hradel, takže pro něj nepotřebujeme simulaci.

Simulace booleovských obvodů hradlo po hradlu

Nyní předpokládejme, že máme obyčejný booleovský obvod nazvaný C,C, složený z hradel AND, OR, NOT a FANOUT, s nn vstupními bity a mm výstupními bity. Nechť t=size(C)t = \operatorname{size}(C) je počet hradel v C,C, a funkci, kterou CC počítá, nazvěme ff. Tato funkce má tvar

f:ΣnΣmf:\Sigma^n\rightarrow\Sigma^m

pro Σ={0,1}.\Sigma = \{0,1\}.

Nyní se podívej, co se stane, když projdeme jedno po druhém hradla AND, OR a FANOUT z CC a každé nahradíme odpovídající simulací popsanou výše, včetně přidání potřebných pracovních qubitů. Výsledný obvod nazvěme RR a seřaďme qubity v RR tak, aby nn vstupních bitů CC odpovídalo horním nn qubitům RR a pracovní qubity byly dole.

Reversible circuit simulation

Zde kk je počet potřebných pracovních qubitů — jeden pro každé hradlo AND, OR a FANOUT z CC — a gg je funkce tvaru g:ΣnΣn+kmg:\Sigma^n \rightarrow \Sigma^{n+k-m}, která popisuje stavy zbylých qubitů vytvořených simulacemi hradel po proběhnutí R.R. Na obrázku jsou qubity odpovídající výstupu f(x)f(x) nahoře a zbývající qubity uchovávající g(x)g(x) dole. Můžeme to vynutit, pokud chceme, přeuspořádáním qubitů pomocí hradel SWAP, která lze implementovat třemi hradly controlled-NOT takto:

Swapping with cNOT gates

Jak uvidíme v další sekci, přeuspořádání výstupních qubitů tímto způsobem není skutečně nezbytné, ale je dostatečně snadné to udělat, pokud se rozhodneme.

Funkce gg, která popisuje klasické stavy zbylých qubitů, je určena obvodem C,C, ale ve skutečnosti se o ni nemusíme příliš starat; nezajímá nás konkrétně, v jakém stavu tyto qubity budou po dokončení výpočtu. Písmeno gg následuje po f,f, takže je to rozumné jméno pro tuto funkci z tohoto důvodu, ale existuje lepší důvod pro volbu názvu gg — je to zkratka pro garbage (odpad).

Úklid odpadu

Pokud je naším jediným zájmem vyhodnocení funkce ff počítané daným booleovským obvodem CC pomocí kvantového obvodu, nemusíme pokračovat dále než k právě popsané simulaci hradlo po hradlu. To znamená, že kromě výstupu funkce nám zbude spousta odpadu.

Nicméně to nestačí, pokud chceme provádět klasické výpočty jako podprogramy uvnitř větších kvantových výpočtů, protože tyto odpadní qubity způsobí problémy. Fenomén interference je pro kvantové algoritmy kriticky důležitý a odpadní qubity mohou zničit interferenční vzory potřebné k fungování kvantových algoritmů.

Naštěstí není obtížné odpad uklidit, dá se říci. Klíčem je využít skutečnost, že protože RR je kvantový obvod, můžeme ho spustit pozpátku — jednoduše nahradíme každé hradlo jeho inverzí a aplikujeme je v obráceném pořadí, čímž získáme kvantový obvod pro operaci R.R^{\dagger}. Toffoliho hradlo, CNOT a NOT jsou ve skutečnosti vlastními inverzemi, takže spuštění RR pozpátku je opravdu jen otázka aplikace hradel v obráceném pořadí — ale obecněji lze jakýkoli kvantový obvod obrátit právě popsaným způsobem.

Konkrétně můžeme přidat mm dalších qubitů (připomeňme, že funkce ffmm výstupních bitů), pomocí hradel CNOT zkopírovat výstup RR na tyto qubity a obrátit RR pro úklid odpadu. Následující obrázek ilustruje výsledný obvod a popisuje jeho působení na stavy standardní báze.

Garbage-free computation

Pokud celý obvod obalíme rámečkem a nazveme ho Q,Q, vypadá takto:

Simulation as a query gate

Vzhledem k tomu, že CCtt hradel, obvod QQ bude mít O(t)O(t) hradel.

Pokud nebereme v úvahu kk dodatečných pracovních qubitů, máme obvod QQ, který funguje přesně jako dotazovací hradlo pro funkci f.f. Pokud chceme jednoduše spočítat funkci ff pro nějaký řetězec x,x, můžeme nastavit y=0my = 0^m a výsledná hodnota f(x)f(x) se objeví na spodních mm qubitech — nebo můžeme do spodních mm qubitů přivést jiný stav, pokud chceme (třeba pro využití fázového zpětného rázu, jako v Deutschově nebo Deutsch-Jozsově algoritmu).

To znamená, že pro jakýkoli dotazovací algoritmus, pokud máme booleovský obvod, který počítá vstupní funkci, můžeme každé dotazovací hradlo nahradit jeho implementací obvodem a dotazovací algoritmus bude fungovat správně.

Všimni si, že pracovní qubity jsou potřeba k tomu, aby tento proces fungoval, ale po provedení kombinovaného obvodu se vrátí do svých počátečních stavů. To umožňuje tyto qubity znovu použít jako pracovní qubity pro jiné účely. Existují také známé strategie pro snížení počtu potřebných pracovních qubitů (za cenu větších obvodů), ale tyto strategie zde nebudeme probírat.

Implementace invertibilních funkcí

Právě popsaná konstrukce nám umožňuje simulovat jakýkoli booleovský obvod kvantovým obvodem bez odpadu. Pokud CC je booleovský obvod implementující funkci f:ΣnΣm,f:\Sigma^n \rightarrow \Sigma^m, pak získáme kvantový obvod QQ, který na stavech standardní báze funguje následovně.

Q(y0kx)=yf(x)0kxQ \bigl( \vert y \rangle \vert 0^k \rangle \vert x\rangle\bigr) = \vert y \oplus f(x) \rangle \vert 0^k \rangle \vert x\rangle

Číslo kk udává, kolik pracovních qubitů je celkem potřeba. To stačí pro účely tohoto kurzu, ale je možné tuto metodologii posunout o krok dále, když je samotná funkce ff invertibilní.

Přesněji řečeno, předpokládejme, že funkce ff má tvar f:ΣnΣn,f:\Sigma^n \rightarrow \Sigma^n, a také předpokládejme, že existuje funkce f1f^{-1} taková, že f1(f(x))=xf^{-1}(f(x)) = x pro každé xΣnx\in\Sigma^n (která je nutně jednoznačná, pokud existuje). To znamená, že operace transformující x\vert x \rangle na f(x)\vert f(x) \rangle pro každé xΣnx\in\Sigma^n je unitární, takže bychom mohli doufat, že sestavíme kvantový obvod implementující unitární operaci definovanou jako

Ux=f(x)U \vert x \rangle = \vert f(x) \rangle

pro každé xΣn.x\in\Sigma^n.

Aby bylo jasno, skutečnost, že jde o unitární operaci, závisí na tom, že ff je invertibilní — není unitární, když ff není invertibilní. Pokud nebereme v úvahu pracovní qubity, UU se liší od operace, kterou implementuje obvod QQ, protože si neponecháváme kopii vstupu a neXORujeme ji s libovolným řetězcem, ale nahrazujeme xx hodnotou f(x).f(x).

Otázka zní: když je ff invertibilní, můžeme to udělat?

Odpověď je ano, za předpokladu, že máme povoleno používat pracovní qubity a kromě booleovského obvodu, který počítá f,f, máme také takový, který počítá f1.f^{-1}. Takže to není zkratka pro výpočetní invertování funkcí, když ještě nevíme, jak to udělat! Následující diagram ilustruje, jak to lze provést složením dvou kvantových obvodů, QfQ_f a Qf1,Q_{f^{-1}}, které jsou jednotlivě získány pro funkce ff a f1f^{-1} metodou popsanou výše, spolu s nn hradly swap, přičemž kk je maximum z počtů pracovních qubitů požadovaných QfQ_f a Qf1.Q_{f^{-1}}.

Simulation of an invertible function