Freigeben über


Funktionselementanwendung

Functors sind Fabriken, mit denen Sie auf bestimmte Spezialisierungsimplementierungen einer aufrufbaren Anwendung zugreifen können. Q# unterstützt derzeit zwei Funktoren; die Adjoint und die Controlled, die beide auf Vorgänge angewendet werden können, die die erforderlichen Spezialisierungen bieten.

Die Controlled und Adjoint Functors pendeln; wenn ApplyUnitary ein Vorgang ist, der beide Functors unterstützt, gibt es keinen Unterschied zwischen Controlled Adjoint ApplyUnitary und Adjoint Controlled ApplyUnitary. Beide haben denselben Typ und führen bei Aufruf die implementierung aus, die für die controlled adjointSpezialisierungdefiniert ist.

Angrenzender Pilz

Wenn die Operation ApplyUnitary eine einheitliche Transformation U- des Quantenzustands definiert, greift Adjoint ApplyUnitary auf die Implementierung von U†zu. Der Adjoint Functor ist eine eigene Umkehrung, da (U†)† = U definitionlich. Beispielsweise ist Adjoint Adjoint ApplyUnitary mit ApplyUnitaryidentisch.

Der Ausdruck Adjoint ApplyUnitary ist ein Vorgang desselben Typs wie ApplyUnitary; es hat dasselbe Argument und gibt denselben Rückgabetyp und unterstützt dieselben Functors. Wie jeder Vorgang kann er mit einem Argument vom geeigneten Typ aufgerufen werden. Der folgende Ausdruck wendet die angrenzende SpezialisierungApplyUnitary auf ein Argument argan:

Adjoint ApplyUnitary(arg) 

Kontrollierter Functor

Für einen Vorgang ApplyUnitary, der eine einheitliche Transformation U- des Quantenzustands definiert, greift Controlled ApplyUnitary auf die Implementierung zu, die U- auf alle Qubits in einem Array von Steuerelement-Qubits anwendet, die im Zustand |1⟩ enthalten sind.

Der Ausdruck Controlled ApplyUnitary ist ein Vorgang mit demselben Rückgabetyp und Vorgangseigenschaften wie ApplyUnitary, was bedeutet, dass er dieselben Funktoren unterstützt. Es wird ein Argument vom Typ (Qubit[], <TIn>)verwendet, wobei <TIn> durch den Argumenttyp ApplyUnitaryersetzt werden sollte, wobei Singleton-Tupel-Äquivalenz berücksichtigt.

Vorgang Argumenttyp Kontrollierter Argumenttyp
X Qubit (Qubit[], Qubit)
TAUSCHEN (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

Wenn cs ein Array von Qubits enthält, sind q1 und q2 zwei Qubits, und der Vorgang SWAP ist wie hier definiert , dann tauscht der folgende Ausdruck den Zustand q1 und q2 aus, wenn alle Qubits in cs im Zustand |1⟩ befinden:

Controlled SWAP(cs, (q1, q2))

Hinweis

Das bedingte Anwenden eines Vorgangs basierend auf den Steuerelementqubits, die sich in einem anderen Zustand als dem Zustand |1 befinden⟩ kann erreicht werden, indem die entsprechende angrenzende Transformation auf die Kontroll qubits vor dem Aufruf angewendet und die Umkehrungen angewendet werden. Die Formatierung der Transformation auf allen Steuerelement-Qubits, die sich im Zustand "|0⟩" befinden, kann z. B. durch Anwenden des X Vorgangs vor und nach erreicht werden. Dies kann bequem mit einer Konjugationausgedrückt werden. Dennoch kann die Ausführlichkeit eines solchen Konstrukts in Zukunft zusätzliche Unterstützung für eine kompaktere Syntax haben.