Применение функтора
Функторы — это фабрики, которые обеспечивают доступ к определенным реализациям специализаций вызываемого объекта. В Q# в настоящее время поддерживаются два функтора: Adjoint
и Controlled
. Оба они могут применяться к операциям, которые обеспечивают необходимые специализации.
Функторы Controlled
и Adjoint
являются коммутируемыми: если операция ApplyUnitary
поддерживает оба функтора, разницы между Controlled Adjoint ApplyUnitary
и Adjoint Controlled ApplyUnitary
нет.
Оба они имеют одинаковый тип и при вызове выполняют реализацию, определенную для controlled adjoint
специализации.
Функтор Adjoint
Если операция ApplyUnitary
определяет унитарное преобразование U квантового состояния, Adjoint ApplyUnitary
обращается к реализации U†. Функтор Adjoint
является самоинверсным, так как по определению (U†)† = U. Например, Adjoint Adjoint ApplyUnitary
равносильно ApplyUnitary
.
Выражение Adjoint ApplyUnitary
является операцией того же типа, что и ApplyUnitary
. Она имеет тот же аргумент и тип возвращаемого значения и поддерживает те же функторы. Как и любую операцию, ее можно вызвать с аргументом подходящего типа. Следующее выражение применяет сопряженную специализациюApplyUnitary
к аргументу arg
:
Adjoint ApplyUnitary(arg)
Функтор Controlled
Для операции ApplyUnitary
, определяющей унитарное преобразование U квантового состояния, Controlled ApplyUnitary
обращается к реализации, которая условно применяет U ко всем кубитам в массиве управляющих кубитов в состоянии |1⟩.
Выражение Controlled ApplyUnitary
— это операция с тем же типом возвращаемого значения и характеристиками операций, что и ApplyUnitary
, а значит поддерживает те же функторы.
Она принимает аргумент типа (Qubit[], <TIn>)
, где <TIn>
следует заменить типом аргумента ApplyUnitary
с учетом эквивалентности одноэлементного кортежа.
Операция | Тип аргумента | Контролируемый тип аргумента |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
В частности, если cs
содержит массив кубитов, q1
и q2
— два кубита и операция SWAP
соответствует данному определению, то следующее выражение производит обмен состояний для q1
и q2
при условии, что все кубиты в cs
находятся в состоянии |1⟩:
Controlled SWAP(cs, (q1, q2))
Примечание
Условное применение операции на основе кубитов элемента управления в состоянии, отличном от состояния |1⟩ может быть достигнуто путем применения соответствующего смежного преобразования к кубитам элемента управления перед вызовом и применения обратных значений после. Например, условное преобразование всех управляющих кубитов в состоянии |0⟩ может быть реализовано путем применения операции X
до и после. Это можно легко выразить с помощью сопряжения. Однако такая пространная конструкции может в будущем поддерживать более компактный синтаксис.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по