Functor 애플리케이션
함자는 호출 가능 항목의 특정 특수화 구현에 액세스할 수 있는 팩터리입니다. Q#은 현재 두 개의 함자를 지원합니다. Adjoint
및 Controlled
, 둘 모두는 필요한 특수화를 제공하는 연산에 적용할 수 있습니다.
Controlled
및 Adjoint
펀터는 왕복 이동합니다. ApplyUnitary
이 두 펀터를 모두 지원하는 연산이면 Controlled Adjoint ApplyUnitary
와 Adjoint Controlled ApplyUnitary
간에 차이가 없습니다.
둘 다 동일한 형식을 가지며 호출 시 특수화에 대해 정의된 구현을 controlled adjoint
실행합니다.
수반 함자
ApplyUnitary
연산이 양자 상태의 단일 변환 U를 정의하는 경우 Adjoint ApplyUnitary
는 U†의 구현에 액세스합니다. Adjoint
함자는 정의에 따라 (U†)† = U이므로 자체 역입니다. 예를 들어 Adjoint Adjoint ApplyUnitary
은 ApplyUnitary
과 같습니다.
식 Adjoint ApplyUnitary
는 ApplyUnitary
와 같은 형식의 연산입니다. 동일한 인수와 반환 형식을 가지며 동일한 펀터를 지원합니다. 다른 연산과 마찬가지로 적절한 형식의 인수를 사용하여 호출할 수 있습니다. 다음 식은 ApplyUnitary
의 수반 특수화를 arg
인수에 적용합니다.
Adjoint ApplyUnitary(arg)
제어된 함자
양자 상태의 단일 변환 U를 정의하는 연산 ApplyUnitary
의 경우 Controlled ApplyUnitary
는 |1⟩ 상태에 있는 제어 큐비트 배열의 모든 큐비트에 조건부로 U를 적용하는 구현에 액세스합니다.
Controlled ApplyUnitary
식은 ApplyUnitary
와 동일한 반환 형식 및 연산 특성이 있는 연산입니다. 즉, 동일한 펀터를 지원합니다.
싱글톤 튜플 동등성을 고려하여 <TIn>
을 ApplyUnitary
의 인수 형식으로 대체해야 하는 (Qubit[], <TIn>)
형식의 인수를 사용합니다.
연산 | 인수 형식 | 제어된 인수 형식 |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
교환 | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
구체적으로, cs
에 큐비트 배열이 포함되어 있고 q1
및 q2
가 두 개의 큐비트이고 SWAP
연산이 여기에 정의된 대로인 경우 다음 식은 cs
의 모든 큐비트가 |1⟩ 상태이면 q1
및 q2
상태를 교환합니다.
Controlled SWAP(cs, (q1, q2))
참고 항목
호출하기 전에 적절한 인접 변환을 컨트롤 큐비트에 적용하고 그 후에 역을 적용하여 |1⟩ 상태가 아닌 상태에 있는 컨트롤 큐비트에 따라 작업을 조건부로 적용할 수 있습니다. 예를 들어 |0⟩ 상태에 있는 모든 제어 큐비트에 대한 변환을 조건화하는 것은 전후에 X
연산을 적용하여 달성할 수 있습니다. 이는 접합을 사용하여 편리하게 표현할 수 있습니다. 그럼에도 불구하고, 그러한 구조의 자세한 내용은 향후에 보다 간결한 구문에 대한 추가 지원을 받을 필요가 있습니다.