5.2.1 Het algoritme van Deutsch

Het is laat op zondagavond. Alice en Bob zijn net klaar met hun huiswerkopdrachten voor hun vak quantumcomputing en staan op het punt om een 3D-film te gaan kijken. Wanneer ze hun holografische televisie aanzetten, ontdekken ze dat de filmvoorstelling is uitgesteld vanwege onverwachte dramatische nieuwsberichten van het International Transgalactic Station. Er is een verschrikkelijk ongeluk gebeurd en een module met twee bemanningsleden, Hila en Iman, is losgekomen van het moederschip. Het laatste bericht dat we van de module ontvingen was dat Iman gewond is en hevig bloedt – hij heeft dringend bloed nodig. Wat de situatie ingewikkeld maakt, is dat Hila en Iman enigszins in shock zijn en hun eigen bloedgroep vergeten zijn – ze kunnen zich alleen herinneren dat ze allebei bloedgroep A of B hebben. De nieuwspresentator doet een beroep op het publiek om te helpen en een manier te bedenken waarop Hila en Iman kunnen bepalen of ze dezelfde bloedgroep hebben, want als dat het geval is, kan Hila haar bloed aan Iman geven om zijn leven te redden. De medische kit in de module van Hila en Iman bevat namelijk een lymfo-transcoder die een van de twee bloedgroepen kan omzetten in de tegenovergestelde. Dus zelfs als blijkt dat hun bloedgroepen niet bij elkaar passen, kan Hila die van haar met de lymfotranscoder omzetten in de tegenovergestelde bloedgroep.

Bij het horen van dit nieuws laten Alice en Bob hun plan om een film te gaan kijken meteen varen en gaan ze nadenken over wat er gedaan kan worden om Hila en Iman te helpen. Het nieuws gaat verder met wat extra informatie. Gelukkig blijkt dat de module die betrokken was bij het ongeluk een databasechip bevat die de bloedgroep van Hila en Iman opslaat. We kunnen dit modelleren met een functie f:{0,1}{0,1}f\colon\{0,1\}\to\{0,1\}, waarbij

f(0)\displaystyle f(0) ={0als Hila bloedgroep A heeft,1als Hila bloedgroep B heeft.\displaystyle=\begin{cases}0&\text{als Hila bloedgroep A heeft},\\ 1&\text{als Hila bloedgroep B heeft}.\end{cases}
en
f(1)\displaystyle f(1) ={0als Iman bloedgroep A heeft,1als Iman bloedgroep B heeft.\displaystyle=\begin{cases}0&\text{als Iman bloedgroep A heeft},\\ 1&\text{als Iman bloedgroep B heeft}.\end{cases}

Wat bepaald moet worden is of f(0)=f(1)f(0)=f(1) of niet!

De oplossing lijkt simpel: Hila en Iman hoeven alleen maar twee keer de database te bevragen om hun bloedgroepen, f(0)f(0) en f(1)f(1), uit te lezen en dan de twee waarden te vergelijken om te zien of ze hetzelfde zijn. Helaas heeft het ongeluk de besturingslogica van de databasechip gedeeltelijk doorgebrand en de nieuwslezer meldt dat de databasechip na de eerste zoekopdracht waarschijnlijk volledig zal doorbranden.

Onze twee hoofdrolspelers zijn vastgelopen. Het is duidelijk dat elk klassiek algoritme ff twee keer moet evalueren om te bepalen of f(0)=f(1)f(0)=f(1). Als je alleen de waarde van f(0)f(0) kent, hangt het nog steeds af van de waarde van f(1)f(1) of f(0)=f(1)f(0)=f(1) en, tenzij je ook f(1)f(1) berekent, zou je niet kunnen zeggen of f(0)=f(1)f(0)=f(1). Op dezelfde manier, als je alleen f(1)f(1) kent, kun je het niet vergelijken met f(0)f(0) tenzij je ook weet wat de waarde van f(0)f(0) is. Welke strategie je ook gebruikt, je moet zowel f(0)f(0) als f(1)f(1) kennen om te bepalen of f(0)=f(1)f(0)=f(1). Is hier echt geen ontkomen aan?

Na het doorbladeren van wat handleidingen ontdekt Bob dat de databasechip in quantummode kan worden gezet. Wanneer dit is ingeschakeld, evalueert de databasechip de functie niet meer op de klassieke manier, maar maakt in plaats daarvan gebruik van het fase-orakel OfO_{f}. Zou dit op de een of andere manier gebruikt kunnen worden om het probleem op te lossen? Alice denkt er even over na en realiseert zich plotseling dat dit precies is waar het algoritme van Deutsch voor bedoeld is! Alice en Bob nemen snel wat berekeningen door om te bevestigen dat het werkt en gaan zitten om een intergalactische e-mail te schrijven met instructies aan Hila en Iman over hoe ze het probleem kunnen oplossen. Hun instructies zijn als volgt:

  1. 1.

    Maak een qubit aan in de toestand |+=(|0+|1)/2\left|+\right\rangle=(\left|0\right\rangle+\left|1\right\rangle)/\sqrt{2}.

  2. 2.

    Gebruik de databasechip in quantummode om de bewerking OfO_{f} toe te passen.

  3. 3.

    Pas de Hadamard-gate HH toe op de uitvoerqubit en meet deze.

  4. 4.

    Als de uitkomst 0 is dan hebben Hila en Iman dezelfde bloedgroep en anders hebben ze verschillende bloedgroepen.

Merk op dat Hila en Iman in deze procedure de databasechip maar één keer hoeven te bevragen om te bepalen of ze dezelfde bloedgroep hebben. Hier is een implementatie van het algoritme in Quirky:

[Uncaptioned image]

De afbeelding laat zien dat de uitkomst 11 is, dus Hila en Iman hebben verschillende bloedgroepen.

Maar waarom werkt het algoritme van Deutsch? Laten we het stap voor stap analyseren. De eerste Hadamard-gate maakt de toestand |+=H|0\left|+\right\rangle=H\left|0\right\rangle. Vervolgens passen we het fase-orakel OfO_{f} toe, wat leidt tot de toestand

Of|+\displaystyle O_{f}\left|+\right\rangle =12Of|0+12Of|1\displaystyle=\frac{1}{\sqrt{2}}O_{f}\left|0\right\rangle+\frac{1}{\sqrt{2}}O_% {f}\left|1\right\rangle
=12(1)f(0)|0+12(1)f(1)|1.\displaystyle=\frac{1}{\sqrt{2}}(-1)^{f(0)}\left|0\right\rangle+\frac{1}{\sqrt% {2}}(-1)^{f(1)}\left|1\right\rangle.

Na het toepassen van de tweede Hadamard krijgen we de volgende toestand:

HOf|+\displaystyle HO_{f}\left|+\right\rangle =12(1)f(0)H|0+12(1)f(1)H|1\displaystyle=\frac{1}{\sqrt{2}}(-1)^{f(0)}H\left|0\right\rangle+\frac{1}{% \sqrt{2}}(-1)^{f(1)}H\left|1\right\rangle
=12(1)f(0)|++12(1)f(1)|\displaystyle=\frac{1}{\sqrt{2}}(-1)^{f(0)}\left|+\right\rangle+\frac{1}{\sqrt% {2}}(-1)^{f(1)}\left|-\right\rangle
=12(1)f(0)(|0+|1)+12(1)f(1)(|0|1)\displaystyle=\frac{1}{2}(-1)^{f(0)}\left(\left|0\right\rangle+\left|1\right% \rangle\right)+\frac{1}{2}(-1)^{f(1)}\left(\left|0\right\rangle-\left|1\right% \rangle\right)
=(1)f(0)+(1)f(1)2|0+(1)f(0)(1)f(1)2|1.\displaystyle=\frac{(-1)^{f(0)}+(-1)^{f(1)}}{2}\left|0\right\rangle+\frac{(-1)% ^{f(0)}-(-1)^{f(1)}}{2}\left|1\right\rangle. (5.7)

Merk op dat de twee tekens (1)f(0)(-1)^{f(0)} en (1)f(1)(-1)^{f(1)} worden opgeteld in de eerste amplitude, maar afgetrokken in de tweede amplitude. Afhankelijk van de waardes van f(0)f(0) en f(1)f(1) zullen we voor elke amplitude of constructieve of destructieve interferentie waarnemen (zie Paragraaf 2.6.1). In feite wordt welke van de twee amplitudes overblijft alleen bepaald door of f(0)f(0) en f(1)f(1) gelijk zijn of niet:

f(0)=f(1):\displaystyle f(0)=f(1):\qquad HOf|+=±|0,\displaystyle HO_{f}\left|+\right\rangle=\pm\left|0\right\rangle, (5.8)
f(0)f(1):\displaystyle f(0)\neq f(1):\qquad HOf|+=±|1.\displaystyle HO_{f}\left|+\right\rangle=\pm\left|1\right\rangle.

Het is een goede oefening om dit expliciet na te gaan:

Oefenopgave 5.3 (Het algoritme van Deutsch nagaan).

We weten nog van 5.1 dat er vier functies f:{0,1}{0,1}f:\{0,1\}\to\{0,1\} zijn. Bereken voor elke functie de toestand HOf|+HO_{f}\left|+\right\rangle met behulp van Vgl. 5.7.

Solution. We evalueren Vgl. 5.7 voor alle vier de functies.
  • Voor f(x)=xf(x)=x:

    HOf|+=1+(1)2|0+1(1)2|1=|1.\displaystyle HO_{f}\left|+\right\rangle=\frac{1+(-1)}{2}\left|0\right\rangle+% \frac{1-(-1)}{2}\left|1\right\rangle=\left|1\right\rangle.
  • Voor f(x)=NOT(x)f(x)=\mathrm{NOT}(x):

    HOf|+=1+12|0+112|1=|1.\displaystyle HO_{f}\left|+\right\rangle=\frac{-1+1}{2}\left|0\right\rangle+% \frac{-1-1}{2}\left|1\right\rangle=-\left|1\right\rangle.
  • Voor de nul-functie:

    HOf|+=1+12|0+112|1=|0.\displaystyle HO_{f}\left|+\right\rangle=\frac{1+1}{2}\left|0\right\rangle+% \frac{1-1}{2}\left|1\right\rangle=\left|0\right\rangle.
  • Voor de één-functie:

    HOf|+=(1)+(1)2|0+(1)(1)2|1=|0.\displaystyle HO_{f}\left|+\right\rangle=\frac{(-1)+(-1)}{2}\left|0\right% \rangle+\frac{(-1)-(-1)}{2}\left|1\right\rangle=-\left|0\right\rangle.

аVgl. 5.8 laat zien dat de eindmeting uitkomst 0 oplevert als en alleen als f(0)=f(1)f(0)=f(1). Het algoritme van Deutsch bepaalt dus correct of f(0)=f(1)f(0)=f(1). Belangrijk is dat het de functie f:{0,1}{0,1}f:\{0,1\}\to\{0,1\} slechts eenmaal uitvoert door het fase-orakel te gebruiken. Daarentegen hebben we hierboven besproken dat elk klassiek algoritme noodzakelijkerwijs beide functiewaarden f(0)f(0) en f(1)f(1) afzonderlijk moet evalueren.

Een andere manier om het algoritme van Deutsch te interpreteren is dat het de som van de twee bits f(0)f(0) en f(1)f(1) modulo twee berekent. Dit komt omdat f(0)f(1)=0f(0)\oplus f(1)=0 als en slechts als f(0)=f(1)f(0)=f(1). Uit Vgl. 3.21 blijkt namelijk dat optellen modulo twee als volgt werkt:

x1x_{1} x2x_{2} x1x2x_{1}\oplus x_{2}
0 0 0
0 1 1
1 0 1
1 1 0
(5.9)

Dit is ook de reden waarom de som modulo twee bekend staat als de XOR (afkorting voor ‘exclusive OR’) van de twee bits, omdat het één is als precies één van de twee bits is.