Das Toffoli-Gatter oder englisch Toffoli Gate ist ein Logikgatter für Reversibles Computing.
Für reversible Logik ist es unabdingbar, dass zu jedem Ausgang eines Logikgatters ein eindeutiger Eingang gehört und durch Umkehrung der Operation der Eingang wiederhergestellt werden kann. Herkömmliche Logikgatter wie Und-Gatter und NOR-Gatter verarbeiten mehrere Eingangssignale und liefern typischerweise nur ein Ausgangssignal. Aus dem Ausgangssignal lässt sich also nicht mehr schließen, welche Eingangssignale das Ergebnis bewirkt haben.
Waren früher die Überlegungen des Reversiblen Computings getrieben von der Erkenntnis, dass Logik-Gatter, die mehr Eingänge als Ausgänge haben, Information „vernichten“ und nach dem Landauer-Prinzip dadurch Energie als Wärme abgeben, so muss in jüngerer Zeit in Quantencomputern, die riesige Datenmengen komplex verarbeiten, die Entwicklung von Wärme minimiert werden, da diese zu Fehlfunktionen führen würde.
Ein einfaches Gatter, das reversibel ist, ist das Kontrollierte-Nicht-Gatter (englisch: Controlled NOT Gate / CNOT-Gate). Dieses verknüpft ein Kontroll-Bit und ein Ziel-Bit als Eingänge und liefert als Ausgänge wieder das Kontroll-Bit und verarbeitetes Ziel-Bit.
| Eingänge | Ausgänge | ||
|---|---|---|---|
| Kontroll-Bit | Ziel-Bit | Kontrol-Bit Out | Ziel Out |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 |
Diese Funktion kann wie folgt dargestellt werden: Gibt man die Ausgangssignale wieder als Eingangssignale in das CNOT-Gatter, erhält man als Ausgang wieder die ursprünglichen Eingangssignale – die Funktion ist also reversibel. Allerdings lassen sich mit diesem einfachen Gatter (und gegebenenfalls kombiniert mit einem Nicht-Gatters) nicht sämtliche Funktionen der Booleschen Logik verwirklichen.
Andere Darstellungsweisen für das CNOT-Gate:
Tommaso Toffoli entwarf 1980 ein universelles, reversibles Gatter, mit dem sämtliche Booleschen Funktionen verwirklicht werden können: das CCNOT gate (controlled, controlled NOT gate). Die zwei Eingangsgrößen werden direkt zwei Ausgangsgrößen zugeordnet. Das Ziel-Bit wird invertiert, wenn beide Kontroll-Bits gesetzt sind (entsprechend einer Und-Verknüpfung der beiden Kontroll-Bits).
| Eingänge | Ausgänge | ||||
|---|---|---|---|---|---|
| Kontroll-Bit 1 | Kontroll-Bit 2 | Ziel Bit | Kontroll-Bit 1 Out | Kontroll-Bit 2 Out | Ziel Out |
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 1 |
| 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 | 0 |
Diese Funktion kann als dargestellt werden.
Da das Toffoli-Gatter universell ist, kann ein (Quanten-)Computer, der sämtliche logische Funktionen ausführen kann, allein mit Toffoli-Gattern aufgebaut werden. In Quantencomputern werden die logischen Bits durch Qubits ersetzt.
Andere Darstellungsweisen für das Toffoli-Gate: