OpenFermion-Cirq icon indicating copy to clipboard operation
OpenFermion-Cirq copied to clipboard

Implement phase estimation

Open kevinsung opened this issue 7 years ago • 8 comments

There are many variants of the basic phase estimation circuit. For instance, the one presented in the Kitaev, Shen, Vyalyi book is usually called 'iterative' and is different from the one in Nielsen and Chuang. There are many more variants on these in the literature. Does anyone have thoughts about what is the best for us right now/tricks we should incorporate? Or perhaps a textbook implementation of iterative phase estimation is good? I may end up working on this soon so references would be helpful.

kevinsung avatar Apr 20 '18 23:04 kevinsung

Iterative phase estimation is what you want. Unlike the original phase estimation of Kitaev, the iterative variety is projective, which means that it is capable of projecting a non-eigenstate of U to an eigenstate of U. This is what we want because we'll be starting in the Hartree-Fock state. Furthermore, unlike the entanglement based method of Nielsen and Chuang (which involves an inverse QFT), iterative phase estimation requires only a single ancilla.

babbush avatar Apr 20 '18 23:04 babbush

This should be fine: https://arxiv.org/abs/quant-ph/0610214

babbush avatar Apr 20 '18 23:04 babbush

Although iterative phase estimation requires classical feedback. @Strilanc is that going to even be possible to simulate in Cirq?

babbush avatar Apr 20 '18 23:04 babbush

Currently we don't support feedback because we don't know how the hardware will go about exposing feedback.

Strilanc avatar Apr 21 '18 00:04 Strilanc

I don't think it makes sense to decide on or implement the outer loop for iterative phase estimation at this stage, especially without classical feedback.

IMO the most important thing to do would be a good implementation of the building block of IPEA (Fig. 2 of the paper @babbush linked). We should replace the power $2^{k-1}$ with M, and allow for arbitrary real M>0 and $\omega_k$. That gives full flexibility / generality later.

idk3 avatar Apr 21 '18 20:04 idk3

@kevinsung @idk3 how is this going? Obtaining these numerics on the Trotter error is probably the most important task right now.

babbush avatar May 04 '18 18:05 babbush

I spent some time thinking about how to resolve #5 but decided that for now, I'll just write custom routines to produce controlled versions of the Trotter steps. I don't plan on using the trick where the control bit being 0 actually induces time evolution in reverse, or on trying to do everything with nearest neighbor interactions, unless you think either of these are critical. Although Cirq does not naturally support classical feedback, it should still be possible to implement the outer loop I think.

kevinsung avatar May 05 '18 23:05 kevinsung

That sounds good. Indeed, in order to get a handle on Trotter errors it is not necessary to do anything fancy.

babbush avatar May 05 '18 23:05 babbush