5.1.2 Bit-orakels
Dit idee werkt niet alleen voor de logische -functie maar in feite voor elke functie
die bits als invoer neemt en een enkele bit teruggeeft. Voor zo’n functie kunnen we een omkeerbare bewerking op bits definiëren:
voor alle . Net als Vgl. 5.3 is deze bewerking zijn eigen inverse, dat wil zeggen dat de bewerking twee keer toepassen gelijk is aan niets doen.
Het is geruststellend dat we elke functie op een omkeerbare manier kunnen implementeren zoals in Vgl. 5.4. Ten eerste betekent dit dat elke berekening op een klassieke computer op zo’n manier kan worden uitgevoerd dat we de oorspronkelijke invoer terug kunnen krijgen. Ten tweede, als de berekening omkeerbaar is gemaakt, kunnen we deze ook uitvoeren op een quantumcomputer. Dit betekent dat quantumcomputers alles kunnen berekenen wat klassieke computers ook kunnen! Ten derde betekent dit dat we elke functie kunnen implementeren als een orakel op een quantumcomputer.
Laten we eens kijken hoe dit werkt. De quantumversie van de bewerking in Vgl. 5.4 is als volgt gedefinieerd:
voor alle . аVgl. 5.5 definieert hoe werkt op alle basistoestanden van qubits. Zoals gebruikelijk breiden we deze definitie uit naar een arbitraire toestand van qubits door lineariteit. Omdat gewoon de basistoestanden permuteert, kun je nagaan zoals in 4.4 dat dit een geldige quantumbewerking is.
We noemen de quantumbewerking , zoals gedefinieerd in Vgl. 5.5, het bit-orakel voor (we zouden de functie in Vgl. 5.4 ook een klassiek bit-orakel kunnen noemen, maar deze naam hebben we niet nodig). De term ’orakel’ betekent dat het toepassen van deze bewerking hetzelfde is als het vragen aan een almachtig orakel om ons de waarde van de functie op een gegeven invoer te vertellen. We weten niet hoe het orakel precies geïmplementeerd is of waar het zijn antwoord vandaan haalt, we zullen gewoon tellen hoeveel vragen we het orakel moeten stellen om een bepaalde eigenschap van de functie te leren. Veel interessante algoritmische problemen kunnen op deze manier gemodelleerd worden, zoals we in het vervolg van deze quest zullen zien.
Het concept van een orakel lijkt een beetje op het spelletje ’raad mijn getal’. Je vriend (het orakel) bedenkt een getal en jij stelt hem vragen van de vorm “is je getal x”? Je vriend beantwoordt elk van deze vragen met “ja” of “nee”. Met andere woorden, je vriend verbergt een functie die op alle inputs op “nee” uitkomt, behalve op één (het getal dat hij in gedachten heeft). Met elke vraag die je stelt, krijg je meer informatie over welk getal het zou kunnen zijn. Je kunt je afvragen hoeveel vragen je moet stellen om het getal te bepalen. Bovendien, wat als je je vragen kon stellen aan een quantumorakel zoals in plaats van aan je vriend? Zou je het antwoord kunnen achterhalen met minder vragen? In de quest van deze week zullen we een aantal interessante voorbeelden zien waarbij dit inderdaad het geval is!
Laten we enkele voorbeelden van bit-orakels bespreken. Stel dat de AND-functie is. Volgens Vgl. 5.1, kunnen we AND interpreteren als vermenigvuldiging modulo 2, aangezien . Het bijbehorende bit-orakel
is niets anders dan de Toffoli-gate uit 4.4. Zelfs voor en de functie , die simpelweg zijn invoer teruggeeft, krijgen we een interessant resultaat: voor alle geldt dan
Dit is gewoon de bekende controlled-NOT-gate van Vgl. 3.64 uit Paragraaf 3.2.4! De constructie van het bit-orakel geeft dus verschillende interessante quantumbewerkingen terug die we eerder met de hand gedefinieerd hadden. In de volgende opgave ga je proberen alle andere bit-orakels te implementeren voor functies van één bit.
Oefenopgave 5.1 (Bit-orakel voor een één-bitfunctie).
Stel dat een functie is met één invoer- en uitvoerbit. Zo’n functie wordt volledig bepaald door de waarden . Dit zijn twee bits, dus er zijn precies vier van zulke functies. We hebben zojuist besproken hoe je het bit-orakel kunt implementeren voor de functie . Kun je het bit-orakel voor de andere drie functies in Quirky implementeren?
Solution.
De drie andere functies zijn en de twee constante functies en .- •
- •
- •