Diese Woche bin ich auf der NDC Developer Conference in Sydney. Während ich hier war, besuchte ich einen Workshop über die Programmierung von Quantencomputern mit Q #, der von John Azariah, dem Schöpfer der Programmiersprache Q #, geleitet wurde.
Q # ist eine kürzlich veröffentlichte Microsoft-Sprache, die speziell für die Programmierung von Quantencomputeroperationen von einem klassischen Computer aus entwickelt wurde. Es wird auf Mac, Windows und Linux unterstützt.
Das Spannende an Q# ist, dass es sich um eine Abstraktion des Quantencomputings auf einer neuen semantischen Ebene handelt. Sie können komplexe Ideen prägnant ausdrücken (denken Sie an C im Vergleich zur Assemblersprache). Neue Ebenen der semantischen Abstraktion ermöglichen die Entstehung neuer Paradigmen.
Q # ist jedoch nicht einfach eine neue Abstraktionsebene gegenüber einer früheren, vertrauten. Q # ist eine semantische Abstraktion über eine revolutionäre Hardware, die noch physisch implementiert wird — ein Quantencomputer.
Sie können in Q #Dinge ausdrücken, die Sie in einer klassischen Computersprache einfach nicht ausdrücken können.
Q # ähnelt in Bezug auf die darin enthaltenen Grundelemente eher einer Assemblersprache für Quantencomputer. Wir sind im Grunde mit Quantencomputern, wo wir in den späten 40er / frühen 50er Jahren mit klassischen Computern waren.
Q # -Programmiermodell
Das Programmiermodell für Q # besteht darin, den Quantencomputer als Coprozessor zu behandeln. Es ähnelt der Arbeit mit einer GPU — der Grafikverarbeitungseinheit in der Grafikkarte Ihres Computers. Die GPU ist ein spezialisierter Prozessor zum Knirschen von Polygonen und zum Berechnen von Schattierungen. Es stellt sich heraus, dass GPUs auch gut für die Art von Number Crunching sind, die auch für Bitcoin Mining benötigt wird, also benutzen die Leute sie dafür. Um eine GPU zu programmieren, stellen Sie die Anweisungen für die GPU in einer domänenspezifischen Sprache zusammen und senden sie dann zur Ausführung von der Haupt-CPU des Computers an die GPU.
Mit Q # schreiben Sie die Quantenoperationen in der domänenspezifischen Sprache Q #, einer zustandslosen, funktionalen Sprache, und senden sie dann von einem in C # geschriebenen Programm, das auf einer klassischen CPU ausgeführt wird, an den Quantencomputer.
Beispiel Q # -Code
Nach dem Workshop habe ich ein Q # -Programm geschrieben, das ein einfaches Quantenverhalten demonstriert, das sich vom Verhalten eines klassischen Computers unterscheidet.
Das HGate-Programm demonstriert einen Sonderfall des berühmten Doppelspaltexperiments, bei dem die Beobachtung eines Zwischenzustands des Systems das Verhalten des Systems beeinflusst.
„Gott würfelt nicht …“ — Albert Einstein
Um das Verhalten dieses Programms zu verstehen: Stellen Sie sich vor, Sie nehmen eine Münze und beginnen mit dem Kopf nach oben und werfen sie dann um. Es hat eine 50% ige Chance, Kopf oder Zahl zu kommen. Sie überprüfen, was es ist, und drehen es dann erneut um. Es hat eine 50% ige Chance, wieder Kopf oder Zahl zu bekommen.
Ziemlich geradlinig. Nun, hier ist die Quanten-Verrücktheit. Wenn die Münze im Quantenbereich ein Teilchen ist, das Quanteneffekten unterliegt, drehen Sie sie um, indem Sie sie durch eine Quantenlogikschaltung senden, die als Hadamard-Gate bezeichnet wird. Wenn Sie es nach dem ersten Flip betrachten, erhalten Sie ein 50/50 Kopf / Zahl auf diesem Flip und auf dem zweiten Flip. Wenn Sie es jedoch nach dem ersten Flip nicht betrachten, wird der zweite Flip jedes Mal angezeigt.
Albert Einstein, der als erster die Quantenmechanik entdeckte, konnte nicht glauben, dass das Universum so funktionieren könnte. Und doch tut es das, denn sonst hätten wir keine iPhones und andere moderne Elektronik, die in extrem kleinen Maßstäben arbeiten und eine Reihe von Quantenverhalten wie dieses ausnutzen. Einstein verbrachte den Rest seines Lebens damit, zu beweisen, dass die Quantenverrücktheit, die er entdeckte, keine Sache war, erfolglos. Und deshalb bekommt er nicht den Kredit dafür. Aber ja, er veröffentlichte drei Papiere zur gleichen Zeit – eine war ein Beweis für die Existenz von Atomen, die zweite war Relativitätstheorie, und die dritte war über Schwarzkörperstrahlung, Das ist ein quantenmechanisches Phänomen.
Um mehr darüber zu erfahren, warum dieses spezifische Quantenverhalten auftritt, siehe README.md datei des Beispielprogramms.
Eine Q # -Quantenoperation
Hier ist ein Beispiel für eine in Q # geschriebene Quantenoperation aus dem oben verlinkten Beispielprogramm:
operation CoinFlip (count: Int) : (Int, Int)
{
body
{
mutable numOnes = 0;
mutable numZeros = 0; // Get a Qubit in Zero state
using (qubit = Qubit) { for (test in 1..count) {
// Set is an operation defined elsewhere
Set (Zero, qubit); // Send the qubit through a Hadamard quantum logic gate
H(qubit); // Measure the value of the q-bit
let state = M(qubit); if (state == Zero) {
set numZeros = numZeros + 1;
}
if (state == One) {
set numOnes = numOnes + 1;
}
}
ResetAll(qubit); // Reset the qubit
}
return (numZeros, numOnes);
}}
Das Q # -Sprachdesign
Q # stützt sich auf die Inspiration von F # als funktionale Sprache (der Compiler / Parser ist in F # geschrieben), C # für die Syntax und einige Ideen von Python (insbesondere for in
).
Es ist eine zustandslose Sprache – es gibt keine Möglichkeit, den Zustand zwischen Quantenoperationen zu halten, und die Messung des Zustands, um einen Wert aus einer Operation zurückzugeben, bricht den Quantenzustand in einen einzigen realen Zustand zusammen. Es hat keine Variablen, sondern verwendet die Bindung konstanter unveränderlicher Werte.
Typen basieren auf Tupeln mit beliebiger arity. Es hat Nicht-curry partielle Anwendungsunterstützung und hat Generika und Funktoren. Funktoren ermöglichen es, Sequenzen von Operationen auszudrücken und zu begründen.
Der Q # -Compiler kann die gesamte Programmanalyse durchführen und den Code überdenken, um Optimierungen vorzunehmen, bevor die Operationen an den Quantencomputer gesendet werden. Dies ist wichtig wegen der Betriebskosten, insbesondere angesichts der kleinen Zeitspanne, in der der Qubit-Zustand mit aktuellen und wahrscheinlichen (kurzfristigen) zukünftigen Quantencomputern kohärent ist.
Welche Probleme können Quantencomputer lösen?
Klassische Computer verwenden Bits, die einen von zwei Zuständen haben können — eins oder Null. Quantencomputerbits oder Qubits haben nur einen dieser beiden Zustände, wenn Sie sie betrachten, aber innerhalb des Quantencomputers können sie probabilistische Zustände haben. Damit können sie viele Zustände modellieren – insbesondere die probabilistischen Zustandsformen von Partikeln. Wie machen Sie damit nützliche Berechnungen? Nun, es ist gut für die Modellierung physikalischer Systeme.
1911 haben wir herausgefunden, wie man Ammoniak herstellt. Es erfordert das Erhitzen von Stickstoff auf 5000 Grad und das Komprimieren auf 50 Atmosphären. Dieses Ammoniak wird für Schießpulver und Dünger verwendet, und dieser Dünger ermöglichte die Grüne Revolution der 60er Jahre, die es uns ermöglichte, die Weltbevölkerung zu verdoppeln. 4% des globalen Energiebudgets fließen in die Produktion von Ammoniak.
Nitrogenase ist ein Enzym in einem Bakterium, das in parasitären Knötchen an den Wurzeln von Bohnen lebt. Wenn Sie Bohnen auf einem Feld anbauen, bindet dieses Enzym Stickstoff aus der Atmosphäre in den Boden und düngt den Boden. So drehen die Landwirte Getreide — Weizen, dann Bohnen, dann Weizen -, um den Boden fruchtbar zu halten.
Um zu verstehen, wie man das Ammoniak so herstellt, wie es die Bakterien tun — bei Raumtemperatur mit H2O + N aus der Atmosphäre — muss die Wechselwirkung von 170 Elektronen gelöst werden. Nitrogenase hat zwei Übergangsmetalle, die als Katalysatoren wirken: Eisen und Molybdän. Das bedeutet, dass wir 21⁷⁰ komplexe Zahlen benötigen, um die Wellenformen der Elektronen zu modellieren. Es gibt nur 21⁵⁰ Atome auf der Erde — Sie würden also 1.000.000 Erden benötigen, um die Problemdefinition zu speichern.
Ein Quantencomputer mit 200 Qubits kann so viele Zustände modellieren.
Mit diesem Computer können wir die Simulationen ausführen, um zu verstehen, wie man es wie die Bakterien macht. Es wird zusätzliches Engineering geben, sobald wir die Lösung haben, etwas zu bauen, das dies kann — genau wie neue Arzneimittelverbindungen hergestellt werden müssen. Und sobald dies geschehen ist, wird die landwirtschaftliche Produktion der Landwirtschaft deutlich höher sein.
Quantencomputerkonstruktion
In einem Quantencomputer gibt es zwei Komponenten für ein Qubit — eine physikalische Komponente, die den Quantenzustand enthält, und eine Komponente, die Operationen an der physikalischen Komponente ausführt.
Ein Qubit — zumindest so, wie wir es jetzt angehen – arbeitet mit 15 milliKelvin. Flüssiges Helium ist 4 Kelvin.
Das Modell des Quantencomputings ist eine Verallgemeinerung des klassischen Rechnens. Es ist mathematisch Lineare Algebra. Mathematisch gesehen ist ein Qubit ein Vektor in einem hochdimensionalen linearen Raum (einem Hilbert-Raum).
Sie können das Qubit in diesem Raum nicht beobachten, aber Sie können es bearbeiten, indem Sie das System auffordern, Rotationsübersetzungen darauf anzuwenden.
Aktuelle Quantencomputer sind in der Lage, ein physikalisches Qubit für 10 ^ -6 Sekunden zu erzeugen. Nach dieser Zeit zerfällt es, daher ist eine Fehlerkorrektur erforderlich.
Es gibt zwei Modelle des Quantencomputings:
- Das Gate-Modell – zeitliche Entwicklung des Quantenzustands mit Matrixmultiplikation. Dies ist das Modell, das Q # verwendet.
- Quantenglühen – den niedrigsten Energiezustand finden, der ein Problem löst. Der DWave-Computer verwendet diese Methode.
Klassisches Rechnen ist ein Sonderfall des Quantencomputings. Entwicklungen und Entdeckungen im Quantencomputing führen also zu Erkenntnissen im klassischen Computing.
Auswirkungen des Quantencomputings
Das Aushängeschild der wahrscheinlichen zukünftigen Auswirkungen des Quantencomputings ist die Möglichkeit, aktuelle Verschlüsselungsschemata zu durchbrechen. Bis dahin wird es jedoch wahrscheinlich noch viele weitere einflussreiche Änderungen geben.
Um moderne Kryptographie zu brechen, werden Quantencomputer mit 5000 Qubits benötigt.
Microsoft führt bereits post-Quantum-Computing-resistente Verschlüsselung ein – einschließlich gitterbasierter Kryptographie. Die moderne Kryptographie basiert auf der Faktorisierung großer Primzahlen — klassisch teuer zu lösen, aber für Quantencomputer trivial.
NISQC steht für „Noisy Intermediate Scale Quantum Computing“. Einige Leute entwickeln Computer mit einer großen Anzahl verrauschter Qubits. MS macht das nicht. Sie arbeiten an ihrem ersten „topologischen Qubit“ — einem dekohärenzresistenten Qubit. Es wird rechnerisch relevanter sein. Sie sind auf dem besten Weg, es in diesem Jahr zu bekommen. John hofft, dass wir in seinem Leben 1000-1.000.000 Qubits auf einem Wafer bei 15 Millikelvin sehen werden.
Wenn wir Quantencomputer online stellen, werden sie uns unter anderem dabei helfen, physikalische Systeme zu modellieren, mit denen wir effizientere Quantencomputer herstellen können.
Die Lösung von Problemen wie Stickstoffase oder wie Chlorophyll CO2 aus der Atmosphäre einfängt und in Kohlenhydrate umwandelt — den Treibhauseffekt umkehren und es uns ermöglichen, Nahrung aus dünner Luft (und Sonnenschein) zu erzeugen — sind näher am Horizont und werden große Auswirkungen haben — ebenso wie die Verwendung von Quantencomputern zur Entwicklung von Supraleitern.
Und sie werden auch Probleme und Möglichkeiten eröffnen, die wir gerade nicht einmal in Betracht ziehen. Einstein dachte nicht an das iPhone oder das Internet, als er seine Arbeit über Schwarzkörperstrahlung veröffentlichte.
Wir leben jetzt in der Zukunft.
Für ein paar großartige Bücher, die die Quantenphysik ohne viel Mathematik vorstellen, empfehle ich:
“ Auf der Suche nach Schrödingers Katze: Quantenphysik und Realität“ — eine populäre Geschichte der Entwicklung der Quantenmechanik, die die Entwicklung des Denkens und der Entdeckung im 20.
“ The Fabric of Reality – The Science of Parallel Universes, and its Implications“ — ein Buch von David Deutsch, einem Pionier des Quantencomputings. Dieses Buch beginnt mit der Wissenschaftsphilosophie (insbesondere ihrer Erkenntnistheorie) und untersucht einige der philosophischen Implikationen der Quantenmechanik.
Wenn Sie direkt darauf eingehen möchten, lesen Sie „Quantencomputer für Informatiker“. Dies ist das Buch, das John empfiehlt.
In diesem Bereich gibt es Stand der Technik — zum Beispiel Quipper, der in Haskell implementiert ist. Q # ist jedoch in einem Quantum Computing SDK enthalten, das einen lokalen 3-Qubit-Simulator und Zugriff auf einen cloudbasierten 40-Qubit-Simulator enthält. IBM hat OpenQASM — eine Quantenassembly-Programmiersprache, die über einen Scratch-ähnlichen visuellen Editor und eine Cloud-basierte (echte) Quantencomputerplattform verfügt. Q # ist eine übergeordnete Sprache mit Typen und Kontrollfluss.