함수 애플리케이션

함자는 호출 가능 항목의 특정 특수화 구현에 액세스할 수 있는 팩터리입니다. Q#은 현재 두 개의 함자를 지원합니다. AdjointControlled, 둘 모두는 필요한 특수화를 제공하는 연산에 적용할 수 있습니다.

ControlledAdjoint 펀터는 왕복 이동합니다. ApplyUnitary이 두 펀터를 모두 지원하는 연산이면 Controlled Adjoint ApplyUnitaryAdjoint Controlled ApplyUnitary 간에 차이가 없습니다. 둘 모두는 동일한 형식이며 호출 시 controlled adjoint특수화에 대해 정의된 구현을 실행합니다.

수반 함자

ApplyUnitary 연산이 양자 상태의 단일 변환 U를 정의하는 경우 Adjoint ApplyUnitaryU†의 구현에 액세스합니다. Adjoint 함자는 정의에 따라 (U†)† = U이므로 자체 역입니다. 예를 들어 Adjoint Adjoint ApplyUnitaryApplyUnitary과 같습니다.

Adjoint ApplyUnitaryApplyUnitary와 같은 형식의 연산입니다. 동일한 인수와 반환 형식을 가지며 동일한 펀터를 지원합니다. 다른 연산과 마찬가지로 적절한 형식의 인수를 사용하여 호출할 수 있습니다. 다음 식은 ApplyUnitary수반 특수화arg 인수에 적용합니다.

Adjoint ApplyUnitary(arg) 

제어된 함자

양자 상태의 단일 변환 U를 정의하는 연산 ApplyUnitary의 경우 Controlled ApplyUnitary는 |1⟩ 상태에 있는 제어 큐비트 배열의 모든 큐비트에 조건부로 U를 적용하는 구현에 액세스합니다.

Controlled ApplyUnitary 식은 ApplyUnitary와 동일한 반환 형식 및 연산 특성이 있는 연산입니다. 즉, 동일한 펀터를 지원합니다. 싱글톤 튜플 동등성을 고려하여 <TIn>ApplyUnitary의 인수 형식으로 대체해야 하는 (Qubit[], <TIn>) 형식의 인수를 사용합니다.

작업 인수 형식 제어된 인수 형식
X Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

구체적으로, cs에 큐비트 배열이 포함되어 있고 q1q2가 두 개의 큐비트이고 SWAP 연산이 여기에 정의된 대로인 경우 다음 식은 cs의 모든 큐비트가 |1⟩ 상태이면 q1q2 상태를 교환합니다.

Controlled SWAP(cs, (q1, q2))

참고

|1⟩ 상태가 아닌 상태에 있는 컨트롤 큐비트를 기반으로 하는 작업을 조건부로 적용하는 작업은 호출 전에 적절한 인접 가능한 변환을 컨트롤 큐비트에 적용하고 그 후에 역방향을 적용하여 수행할 수 있습니다. 예를 들어 |0⟩ 상태에 있는 모든 제어 큐비트에 대한 변환을 조건화하는 것은 전후에 X 연산을 적용하여 달성할 수 있습니다. 이는 접합을 사용하여 편리하게 표현할 수 있습니다. 그럼에도 불구하고, 그러한 구조의 자세한 내용은 향후에 보다 간결한 구문에 대한 추가 지원을 받을 필요가 있습니다.