Generalized gates

MimiqCircuitsBase.QFTType
QFT(n)

Quantum Fourier transform.

Performs the quantum Fourier transform on a register of n qubits.

The inverse quantum Fourier transform is simply given inverse(qft).

It implements the unitary transformation.

\[\frac{1}{2^{n/2}} \sum_{x=0}^{2^n-1} \sum_{y=0}^{2^n-1} e^{2\pi i \frac{xy}{2^n}} \ket{y}\bra{x}\]

Examples

julia> c = push!(Circuit(), QFT(10), 1:10...)
10-qubit circuit with 1 instructions:
└── QFT @ q[1:10]

julia> push!(c, inverse(QFT(10)), 1:10...)
10-qubit circuit with 2 instructions:
├── QFT @ q[1:10]
└── QFT† @ q[1:10]
source
MimiqCircuitsBase.PhaseGradientType
PhaseGradient(n)

A phase gradient gate applies a phase shift to a quantum register of n qubits, where each computational basis state $\ket{k}$ experiences a phase proportional to its integer value $k$:

\[\operatorname{PhaseGradient} = \sum{k=0}^{n-1} \mathrm{e}^{i \frac{2 \pi}{N} k} \ket{k}\bra{k}\]

source
MimiqCircuitsBase.PolynomialOracleType
PolynomialOracle(xregsize, yregsize, a, b, c, d)
PolynomialOracle(a, b, c, d) # lazy

Quantum oracle for a polynomial function of two registers.

Applies a $\pi$ phase shift to any basis state which satifies $a xy + bx + cy + d == 0$, where $\ket{x}$ and $\ket{y}$ are the states of the two registers.

Examples

julia> c = push!(Circuit(), PolynomialOracle(5,5,1,2,3,4), 1:10...)
10-qubit circuit with 1 instructions:
└── PolynomialOracle(1,2,3,4) @ q[1:5], q[6:10]

julia> push!(c, inverse(PolynomialOracle(5,5,1,2,3,4)), 1:10...)
10-qubit circuit with 2 instructions:
├── PolynomialOracle(1,2,3,4) @ q[1:5], q[6:10]
└── PolynomialOracle(1,2,3,4) @ q[1:5], q[6:10]
Warn

This operation is not yet implemented for decomposition. Might not work with some backends, where is not specifically implemented.

source
MimiqCircuitsBase.DiffusionType
Diffusion(n)
Diffusion() # lazy

Grover's diffusion operator.

It implements the unitary transformation.

\[H^{\otimes n} (1-2\ket{0^n}\bra{0^n}) H^{\otimes n}\]

Examples

julia> c = push!(Circuit(), Diffusion(10), 1:10...)
10-qubit circuit with 1 instructions:
└── Diffusion @ q[1:10]

julia> push!(c, inverse(Diffusion(10)), 1:10...)
10-qubit circuit with 2 instructions:
├── Diffusion @ q[1:10]
└── Diffusion† @ q[1:10]
julia> decompose(Diffusion(4))
4-qubit circuit with 9 instructions:
├── RY(π/2) @ q[1]
├── RY(π/2) @ q[2]
├── RY(π/2) @ q[3]
├── RY(π/2) @ q[4]
├── C₃Z @ q[1:3], q[4]
├── RY(π/2) @ q[1]
├── RY(π/2) @ q[2]
├── RY(π/2) @ q[3]
└── RY(π/2) @ q[4]
source