다음을 통해 공유


Functor 애플리케이션

Functor는 호출 가능한 특정 특수화 구현에 액세스할 수 있는 팩터리입니다. Q# 현재 두 개의 functor를 지원합니다. AdjointControlled모두 필요한 특수화를 제공하는 작업에 적용할 수 있습니다.

ControlledAdjoint 펀터는 통근; ApplyUnitary 두 functor를 모두 지원하는 작업인 경우 Controlled Adjoint ApplyUnitaryAdjoint Controlled ApplyUnitary간에 차이가 없습니다. 둘 다 동일한 형식을 가지며 호출 시 controlled adjoint특수화대해 정의된 구현을 실행합니다.

인접한 펀터

연산 ApplyUnitary 양자 상태의 U 단위 변환을 정의하는 경우 Adjoint ApplyUnitaryU†구현에 액세스합니다. (U†)† = 정의별 U 때문에 Adjoint 펀터는 자체적으로 역방향입니다. 예를 들어 Adjoint Adjoint ApplyUnitaryApplyUnitary같습니다.

Adjoint ApplyUnitaryApplyUnitary;와 동일한 형식의 연산입니다. 인수 및 반환 형식이 동일하며 동일한 functor를 지원합니다. 다른 작업과 마찬가지로 적절한 형식의 인수를 사용하여 호출할 수 있습니다. 다음 식은 ApplyUnitary인접 특수화 인수 arg적용합니다.

Adjoint ApplyUnitary(arg) 

제어된 펀터

양자 상태의 U 단위 변환을 정의하는 작업 ApplyUnitary 경우 Controlled ApplyUnitary |1⟩ 상태인 컨트롤 큐비트 배열의 모든 큐비트에 U 조건부로 적용되는 구현에 액세스합니다.

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

수술 인수 형식 제어된 인수 형식
X Qubit (Qubit[], Qubit)
교환 (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

구체적으로 cs 큐비트 배열을 포함하는 경우 q1q2 두 개의 큐비트이고 작업 SWAP 여기에 정의된 다음 식은 q1 상태를 교환하고 cs 모든 큐비트가 |1⟩ 상태인 경우 q2.

Controlled SWAP(cs, (q1, q2))

메모

호출하기 전에 적절한 인접 변환을 컨트롤 큐비트에 적용하고 그 후에 역을 적용하여 |1⟩ 상태가 아닌 상태에 있는 컨트롤 큐비트에 따라 작업을 조건부로 적용할 수 있습니다. 예를 들어 |0⟩ 상태에 있는 모든 컨트롤 큐비트의 변환을 컨디셔닝하려면 X 연산을 전후에 적용하여 수행할 수 있습니다. 이는 조정사용하여 편리하게 표현할 수 있습니다. 그럼에도 불구 하 고, 이러한 구문의 자세한 내용은 미래에 더 컴팩트 한 구문에 대 한 추가 지원을 받을 수 있습니다.