Safe Haskell | None |
---|
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 QIntTF
s 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