quipper-libraries- The standard libraries for Quipper.

Safe HaskellNone




Functions to decompose circuits into various gate bases. This decompositions are "legacy". The GB_Toffoli and GB_CliffordT decomposers contained here are being superseded by their counterparts in Quipper.Libraries.Decompose.CliffordT.


Legacy gatebase

data LegacyGateBase Source #

An enumeration type for the three gate bases handled by this module.

Helper functions

with_combined_controls_gb :: LegacyGateBase -> Int -> [Signed Endpoint] -> ([Signed Qubit] -> Circ a) -> Circ a Source #

Decompose quantum controls recursively until at most n remain, and then pass these reduced controls to the given circuit. Precondition: n ≥ 1. The decomposition is done using Toffoli gates, decomposed into the gate base. Classical controls are left untouched.

For example, when n=2, this typically yields a circuit such as the following (but with the Toffoli gates further decomposed into the LegacyGateBase):

And for n=1, the circuit typically looks like this:

decomposeQToffoli :: LegacyGateBase -> Qubit -> (Signed Qubit, Signed Qubit) -> Circ () Source #

Decompose a Toffoli gate into the given LegacyGateBase. The controls on the Toffoli gate may be positive or negative, as specified.

decomposeQMultinot :: [Qubit] -> Circ () Source #

Implement a QMultinot gate in terms of QNot gates.

Decomposition transformers

decompose_transformer :: LegacyGateBase -> Transformer Circ Qubit Bit Source #

A transformer to decompose a circuit into LegacyGateBase gates. Note that in the case of classically-controlled quantum gates, the classical controls are unaffected.

open_subroutine :: TypedSubroutine -> [Endpoint] -> Circ [Endpoint] Source #

Return a circuit producing function from a TypedSubroutine

decompose_subroutine :: LegacyGateBase -> BoxId -> TypedSubroutine -> Circ () Source #

Apply the decompose transformer to the given TypedSubroutine Note: by default, set the classical-control flag to false.

decompose_dynamic_transformer :: LegacyGateBase -> DynamicTransformer Circ Qubit Bit Source #

A dynamic transformer variant of the decompose transformer

Generic decomposition

decompose_legacy_unary :: (QCData qa, QCData qb) => LegacyGateBase -> (qa -> Circ qb) -> qa -> Circ qb Source #

Decompose a circuit into gates from the given LegacyGateBase.

decompose_legacy_generic :: (QCData qa, QCData qb, QCurry qfun qa qb) => LegacyGateBase -> qfun -> qfun Source #

Decompose a circuit into gates from the given LegacyGateBase. Unlike decompose_legacy_unary, this can be applied to a circuit-generating function in curried form with n arguments, for any n ≥ 0.

The type of this heavily overloaded function is difficult to read. In more readable form, it has all of the following types:

decompose_legacy_generic :: (QCData qa) => LegacyGateBase -> Circ qa -> Circ qa
decompose_legacy_generic :: (QCData qa, QCData qb) => LegacyGateBase -> (qa -> Circ qb) -> (qa -> Circ qb)
decompose_legacy_generic :: (QCData qa, QCData qb, QCData qc) => LegacyGateBase -> (qa -> qb -> Circ qc) -> (qa -> qb -> Circ qc)

and so forth.