Generalized gates
MimiqCircuitsBase.QFT
— TypeQFT(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]
MimiqCircuitsBase.PhaseGradient
— TypePhaseGradient(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}\]
MimiqCircuitsBase.PolynomialOracle
— TypePolynomialOracle(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]
This operation is not yet implemented for decomposition. Might not work with some backends, where is not specifically implemented.
MimiqCircuitsBase.Diffusion
— TypeDiffusion(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]