Safe Haskell | None |
---|---|
Language | Haskell98 |
This module provides some operations for low-level manipulation of classical circuits. It is built directly on top of Quipper.Internal.Circuit.
Synopsis
- cgate_to_cnot_transformer :: Transformer Circ Qubit Bit
- translate_cgate :: String -> Bit -> [Bit] -> Circ ()
- classical_to_cnot :: (QCData qa, QCData qb, QCurry qfun qa qb) => qfun -> qfun
- trivial_endpoint :: B_Endpoint Qubit Qubit -> Qubit
- classical_to_quantum_transformer :: Transformer Circ Qubit Qubit
- classical_to_quantum_unary :: (QCData qa, QCData qb) => (qa -> Circ qb) -> QType qa -> Circ (QType qb)
- classical_to_quantum :: (QCData qa, QCData qb, QCurry qfun qa qb, QCurry qfun' (QType qa) (QType qb)) => qfun -> qfun'
- classical_to_reversible :: (QCData qa, QCData qb) => (qa -> Circ qb) -> (qa, qb) -> Circ (qa, qb)
Manipulation of classical circuits
Eliminating CGate
cgate_to_cnot_transformer :: Transformer Circ Qubit Bit Source #
A Transformer
to eliminate all CGate
style gates, such as "and", "or", "not", "xor", "eq", and
"if-then-else" gates, and replace them by equivalent
CInit
and
CNot
gates.
translate_cgate :: String -> Bit -> [Bit] -> Circ () Source #
Auxiliary function: compute the reversible circuit corresponding
to a CGate
of the given name, using only
controlled-not gates.
classical_to_cnot :: (QCData qa, QCData qb, QCurry qfun qa qb) => qfun -> qfun Source #
Translate all classical gates in a circuit into equivalent controlled-not gates.
The type of this overloaded function is difficult to read. In more readable form, it has all of the following types:
classical_to_cnot :: (QCData qa) => Circ qa -> Circ qa classical_to_cnot :: (QCData qa, QCData qb) => (qa -> Circ qb) -> (qa -> Circ qb) classical_to_cnot :: (QCData qa, QCData qb, QCData qc) => (qa -> qb -> Circ qc) -> (qa -> qb -> Circ qc)
and so forth.
Classical to quantum
trivial_endpoint :: B_Endpoint Qubit Qubit -> Qubit Source #
Map an endpoint to the underlying Qubit
in the trivial
case. Auxiliary function.
classical_to_quantum_transformer :: Transformer Circ Qubit Qubit Source #
A Transformer
to replace all classical gates in a circuit by
equivalent quantum gates.
classical_to_quantum_unary :: (QCData qa, QCData qb) => (qa -> Circ qb) -> QType qa -> Circ (QType qb) Source #
Replace all classical gates in a circuit by equivalent quantum gates.
classical_to_quantum :: (QCData qa, QCData qb, QCurry qfun qa qb, QCurry qfun' (QType qa) (QType qb)) => qfun -> qfun' Source #
Replace all classical gates in a circuit by equivalent quantum gates.
The type of this overloaded function is difficult to read. In more readable form, it has all of the following types:
classical_to_quantum :: (QCData qa) => Circ qa -> Circ (QType qa) classical_to_quantum :: (QCData qa, QCData qb) => (qa -> Circ qb) -> (QType qa -> Circ (QType qb)) classical_to_quantum :: (QCData qa, QCData qb, QCData qc) => (qa -> qb -> Circ qc) -> (QType qa -> QType qb -> Circ (QType qc))
and so forth.
Classical to reversible
classical_to_reversible :: (QCData qa, QCData qb) => (qa -> Circ qb) -> (qa, qb) -> Circ (qa, qb) Source #
Generic function for turning a classical (or pseudo-classical)
circuit into a reversible circuit. The input is a classical boolean
function x ↦ f(x), given as a not necessarily reversible
circuit (however, the circuit should be one-to-one, i.e., no
"garbage" should be explicitly erased). The output is the
corresponding reversible function (x,y) ↦ (x,y ⊕
f(x)). qa and qb can be any quantum data types. The
function classical_to_reversible
does not itself change
classical bits to qubits; use classical_to_quantum
for that.