| Safe Haskell | None |
|---|
Quipper.Algorithms.TF.Alternatives
Description
Synopsis
- increment_TF :: QIntTF -> Circ QIntTF
- decrement_TF :: QIntTF -> Circ QIntTF
- o5_MOD3_alt :: QIntTF -> Circ (QIntTF, QIntTF)
- indexed_fetch :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa)
- indexed_store :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa)
- indexed_swap :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa)
- alt_qram :: Qram
Arithmetic functions
increment_TF :: QIntTF -> Circ QIntTF Source #
Increment a QIntTF (i.e., little-endian, mod 2l – 1)
in place.
This and decrement_TF assume as precondition that the input is never
11…11, and preserve this condition, by fixing 11…11. This means these
are not correct if IntTF is treated as a formal quotient of
2l ; with that approach, incrementing/decrementing in place
cannot be a quantum operation (since it must map 00…00 and 11…11 both
to 00…01, so would have nonzero kernel). These are however correct if
IntTF is considered as a formal subspace of 2l (in which
case the other arithmetic routines are unsound, since they may break
the precondition).
o5_MOD3_alt :: QIntTF -> Circ (QIntTF, QIntTF) Source #
An alternative to o5_MOD3 for
reducing mod-3, conceptually simpler and not size-limited: uses the
fact that 2-bit QIntTFs give us true mod-3 arithmetic.
Has same complexity O(l) as
o5_MOD3, with (probably) a slightly
higher leading coefficient, due to difference in size between
increment_TF and increment_little.
Efficient qRAM
We provide an efficient qRAM implementation in Quipper.Libraries.Qram.
The following turns it into a Qram object for the Triangle
Finding algorithm.
indexed_fetch :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa) Source #
Efficient qRAM "fetch" operation.
performs the operation q ⊕= m[i].indexed_fetch i m q
indexed_store :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa) Source #
Efficient qRAM "store" operation.
performs the operation m[i] ⊕= q.indexed_store i m q
indexed_swap :: QData qa => QDInt -> IntMap qa -> qa -> Circ (QDInt, IntMap qa, qa) Source #
Efficient qRAM "swap" operation.
swaps q and m[i].indexed_swap i m q