ファンクター適用

ファンクターは、callable の特定の特殊実装にアクセスできるようにするファクトリです。 Q# では現在、AdjointControlled の 2 つのファンクターがサポートされています。いずれも、必要な特殊化を提供する演算に適用できます。

Controlled および Adjoint ファンクターは、ApplyUnitary が両方のファンクターをサポートする演算の場合、可換です。その場合、Controlled Adjoint ApplyUnitaryAdjoint Controlled ApplyUnitary に違いはありません。 どちらも同じ型を持ち、呼び出し時に、 controlled adjoint specialization に対して定義された実装を実行

Adjoint ファンクター

演算 ApplyUnitary で量子状態のユニタリ変換 U が定義されている場合、Adjoint ApplyUnitaryU† の実装にアクセスします。 Adjoint ファンクターは、それ自体の逆です。これは、定義上、(U†)† = U であるためです。 例えば、Adjoint Adjoint ApplyUnitaryApplyUnitary と同じです。

Adjoint ApplyUnitary は、ApplyUnitary と同じ型の演算です。同じ引数と戻り値の型を持ち、同じファンクターをサポートします。 任意の演算と同様に、適切な型の引数を使用して呼び出すことができます。 次の式は、ApplyUnitaryAdjoint 特殊化を引数 arg に適用します。

Adjoint ApplyUnitary(arg) 

Controlled ファンクター

量子状態のユニタリ変換 U を定義する演算 ApplyUnitary の場合、Controlled ApplyUnitary は、|1⟩ 状態にある制御量子ビットの配列内のすべての量子ビットに U 条件を適用する実装にアクセスします。

Controlled ApplyUnitary は、ApplyUnitary と戻り値の型と演算の特性が同じ演算であり、同じファンクターをサポートしています。 これは、(Qubit[], <TIn>) 型の引数を受け取ります。ここで、<TIn>単一タプルの等価性を考慮して、ApplyUnitary 型の引数に置き換える必要があります。

操作 引数の型 制御された引数の型
x Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

具体的には、cs に量子ビットの配列が含まれており、q1q2 が 2 つの量子ビットで、演算 SWAPここで定義されているとおりの場合、次の式は、cs のすべての量子ビットが |1⟩ 状態にある場合に q1q2 の状態を交換します。

Controlled SWAP(cs, (q1, q2))

Note

|1⟩状態以外の状態にある制御量子ビットに基づいて操作を条件付きで適用するには、呼び出し前に適切な隣接可能な変換を制御量子ビットに適用し、その後に逆を適用します。 たとえば、|0⟩ 状態にあるすべての制御量子ビットに対する変換を条件付けるには、変換の前後に X 演算を適用します。 これは、共役を使用して簡単に表現できます。 ただし、このような構成体の詳細性は、将来のよりコンパクトな構文において追加サポートのメリットを得られる可能性があります。