Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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
до и после нее. Это можно удобно выразить с помощью конъюгации. Тем не менее, детализация такой конструкции может заслуживают дополнительной поддержки более компактного синтаксиса в будущем.