Поделиться через


Применение функтора

Functors — это фабрики, которые позволяют получить доступ к определенным реализациям специализации вызываемого объекта. Q# в настоящее время поддерживает два functor; Adjoint и Controlled, оба из которых могут применяться к операциям, предоставляющим необходимые специализации.

Коммутируются Controlled и Adjoint воронки; Если ApplyUnitary является операцией, поддерживающей оба воронкторов, то разница между Controlled Adjoint ApplyUnitary и Adjoint Controlled ApplyUnitaryотсутствует. Оба имеют один и тот же тип, и при вызове выполните реализацию, определенную для специализацииcontrolled adjointспециализации.

Примыкает functor

Если операция ApplyUnitary определяет унитарное преобразование U квантового состояния, Adjoint ApplyUnitary обращается к реализации U†. Adjoint functor является собственным обратным, так как (U†)† = U по определению. Например, Adjoint Adjoint ApplyUnitary — это тоже самое, что и ApplyUnitary.

Выражение Adjoint ApplyUnitary является операцией того же типа, что и ApplyUnitary; он имеет один и тот же аргумент и тип возвращаемого значения и поддерживает те же воронки. Как и любая операция, ее можно вызвать с аргументом подходящего типа. Следующее выражение применяет специализациюApplyUnitary к аргументу arg:

Adjoint ApplyUnitary(arg) 

Контролируемый functor

Для операции ApplyUnitary, определяющей унитарное преобразование U квантового состояния, Controlled ApplyUnitary обращается к реализации, которая применяет U условно для всех кубитов в массиве кубитов управления, входящих в состояние |1⟩.

Выражение Controlled ApplyUnitary — это операция с тем же типом возвращаемого значения и характеристиками операции , что означает, ApplyUnitaryчто она поддерживает те же воронки. Он принимает аргумент типа (Qubit[], <TIn>), где <TIn> следует заменить типом аргумента ApplyUnitary, принимая эквивалентность одноэлементного кортежа в учет.

Операция Тип аргумента Управляемый тип аргумента
X Qubit (Qubit[], Qubit)
ОБМЕНИВАТЬ (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

Если cs содержит массив кубитов, q1 и q2 два кубита, а операция SWAP определена здесь, то следующее выражение обменивается состоянием q1 и q2, если все кубиты в cs находятся в состоянии |1⟩:

Controlled SWAP(cs, (q1, q2))

Примечание.

Условное применение операции на основе кубитов элемента управления в состоянии, отличном от состояния |1⟩, может быть достигнуто путем применения соответствующего привязываемого преобразования к кубитам управления перед вызовом и применением обратных операций после. Например, можно добиться преобразования для всех кубитов управления, входящих в состояние |0⟩, например, путем применения операции X до и после нее. Это можно удобно выразить с помощью конъюгации. Тем не менее, детализация такой конструкции может заслуживают дополнительной поддержки более компактного синтаксиса в будущем.