Aplicação functor
Os functores são fábricas que lhe permitem aceder a implementações de especialização específicas de um callable. Q# atualmente suporta dois functores; e Adjoint
os Controlled
, ambos podem ser aplicados a operações que fornecem as especializações necessárias.
Os Controlled
functores e Adjoint
deslocam-se; se ApplyUnitary
for uma operação que suporte ambos os functores, não há diferença entre Controlled Adjoint ApplyUnitary
e Adjoint Controlled ApplyUnitary
.
Ambos têm o mesmo tipo e, após invocação, executam a implementação definida para a controlled adjoint
especialização.
Functor adjacente
Se a operação ApplyUnitary
definir uma transformação unitária U do estado quântico, Adjoint ApplyUnitary
acede à implementação de U†. O Adjoint
functor é o seu próprio inverso, uma vez que (U†)† = U por definição. Por exemplo, Adjoint Adjoint ApplyUnitary
é o mesmo ApplyUnitary
que .
A expressão Adjoint ApplyUnitary
é uma operação do mesmo tipo ApplyUnitary
que ; tem o mesmo argumento e tipo de retorno e suporta os mesmos functores. Como qualquer operação, pode ser invocada com um argumento de tipo adequado. A expressão seguinte aplica a especialização adjacente de ApplyUnitary
a um argumento arg
:
Adjoint ApplyUnitary(arg)
Functor controlado
Para uma operação ApplyUnitary
que define uma transformação unitária U do estado quântico, Controlled ApplyUnitary
acede à implementação que aplica a condição U em todos os qubits numa matriz de qubits de controlo no estado |1⟩.
A expressão Controlled ApplyUnitary
é uma operação com o mesmo tipo de retorno e características de operação que ApplyUnitary
, o que significa que suporta os mesmos functores.
É necessário um argumento do tipo (Qubit[], <TIn>)
, em que <TIn>
deve ser substituído pelo tipo de argumento de , tendo em conta a equivalência da ApplyUnitary
cadeia de identificação singleton.
Operação | Tipo de Argumento | Tipo de Argumento Controlado |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Concretamente, se cs
contiver uma matriz de qubits q1
e q2
forem dois qubits e a operação SWAP
estiver definida aqui, a seguinte expressão trocará o estado de q1
e q2
se todos os qubits no cs
estão no estado |1⟩:
Controlled SWAP(cs, (q1, q2))
Nota
A aplicação condicional de uma operação com base nos qubits de controlo que estão num estado diferente do estado |1⟩ pode ser alcançado ao aplicar a transformação adjacente adequada aos qubits de controlo antes da invocação e ao aplicar as inversas após. Condicionar a transformação em todos os qubits de controlo no estado |0⟩, por exemplo, pode ser alcançado ao aplicar a X
operação antes e depois. Isto pode ser expressa convenientemente através de uma conjugação. No entanto, a verbosidade de tal construção pode merecer suporte adicional para uma sintaxe mais compacta no futuro.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários