‘quantum’ Dialect¶
A quantum computing dialect with value semantics.
The quantum dialect extends core MLIR with the necessary types and operations to form the core IR of the Catalyst compiler.
At a minimum, a representation of quantum programs typically contains qubit management, quantum gate operations, and measurements. The chosen representation for this dialect is closely aligned with the operations in the PennyLane quantum computing framework, but also allows for custom instruction sets.
In this dialect, quantum operations are expressed using value semantics. That is abstract qubit values are consumed and produced by operations, instead of operations merely acting on qubit references. This exposes the dataflow of the quantum program in the SSA graph of the MLIR. See QIRO: An SSA-based Quantum IR for Optimization.
Types¶
ObservableType¶
A quantum observable for use in measurements.
Syntax: !quantum.obs
QubitType¶
A value-semantic qubit (state).
Syntax: !quantum.bit
QuregType¶
An array of value-semantic qubits (i.e. quantum register).
Syntax: !quantum.reg
ResultType¶
A quantum measurement result.
Syntax: !quantum.res
Operations¶
quantum.adjoint
(::catalyst::quantum::AdjointOp)quantum.alloc
(::catalyst::quantum::AllocOp)quantum.alloc_qb
(::catalyst::quantum::AllocQubitOp)quantum.compbasis
(::catalyst::quantum::ComputationalBasisOp)quantum.counts
(::catalyst::quantum::CountsOp)quantum.custom
(::catalyst::quantum::CustomOp)quantum.dealloc
(::catalyst::quantum::DeallocOp)quantum.dealloc_qb
(::catalyst::quantum::DeallocQubitOp)quantum.device
(::catalyst::quantum::DeviceInitOp)quantum.device_release
(::catalyst::quantum::DeviceReleaseOp)quantum.expval
(::catalyst::quantum::ExpvalOp)quantum.extract
(::catalyst::quantum::ExtractOp)quantum.finalize
(::catalyst::quantum::FinalizeOp)quantum.gphase
(::catalyst::quantum::GlobalPhaseOp)quantum.hamiltonian
(::catalyst::quantum::HamiltonianOp)quantum.hermitian
(::catalyst::quantum::HermitianOp)quantum.init
(::catalyst::quantum::InitializeOp)quantum.insert
(::catalyst::quantum::InsertOp)quantum.measure
(::catalyst::quantum::MeasureOp)quantum.multirz
(::catalyst::quantum::MultiRZOp)quantum.namedobs
(::catalyst::quantum::NamedObsOp)quantum.num_qubits
(::catalyst::quantum::NumQubitsOp)quantum.probs
(::catalyst::quantum::ProbsOp)quantum.unitary
(::catalyst::quantum::QubitUnitaryOp)quantum.sample
(::catalyst::quantum::SampleOp)quantum.set_basis_state
(::catalyst::quantum::SetBasisStateOp)quantum.set_state
(::catalyst::quantum::SetStateOp)quantum.state
(::catalyst::quantum::StateOp)quantum.tensor
(::catalyst::quantum::TensorOp)quantum.var
(::catalyst::quantum::VarianceOp)quantum.yield
(::catalyst::quantum::YieldOp)