ObliviousOracle user defined type


This documentation refers to the Classic QDK, which has been replaced by the Modern QDK.

Please see https://aka.ms/qdk.api for the API documentation for the Modern QDK.

Namespace: Microsoft.Quantum.Oracles

Package: Microsoft.Quantum.Standard

Represents an oracle for oblivious amplitude amplification.

newtype ObliviousOracle = (((Qubit[], Qubit[]) => Unit is Adj + Ctl));


The inputs to the oracle $O$ are:

  • The ancilla register $a$ that $O$ acts on.
  • The system register $s$ on which the desired unitary $U$ is applied, post-selected on register $a$ being in state $\ket{t}_a$.


This oracle defined by $$ O\ket{s}_a\ket{\psi}_s= \lambda\ket{t}_a U \ket{\psi}_s + \sqrt{1-|\lambda|^2}\ket{t^\perp}_a\cdots $$ acts on the ancilla state $\ket{s}_a$ to implement the unitary $U$ on any system state $\ket{\psi}_s$ with amplitude $\lambda$ in the basis flagged by $\ket{t}_a$. The first parameter is the qubit register of $\ket{s}_a$. The second parameter is the qubit register of $\ket{\psi}_s$.