Fixing 2 mode Grover search #704
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Changing the 2 mode Grover search to make it correspond better to the kiwat reference and to grover algorithm.
What was wrong
In the old version, the state after initialization would be the wrong state (2 of the terms had a phase of \ pi ).
Also the inversion circuit would amplify the state having opposite polarization to the marked state. ({0;P:H} marked would amplify {0;P:V})
What was changed :
Both the issues were fixed.
In initialization : the components before the BS were lowered to mode 1 allowing to create the right superposition
In the inversion : the components between the BS were lowered to mode 1 allowing to amplify the right state.
In the circuit evaluation : Now the circuit is initialized to pcvl.BasicState("|0,{P:H}, 0, 0>") and not pcvl.BasicState("|{P:H},0, 0, 0>")
Please note that changing the mode for the initialization is not just a symetric change, it creates a totally different state :
Older version :
State after initialization : -0.5*|{P:H},0>+0.5*|0,{P:H}>-0.5*|{P:V},0>+0.5*|0,{P:V}>
New version :
State after initialization : 0.5*|{P:H},0>+0.5*|0,{P:H}>+0.5*|{P:V},0>+0.5*|0,{P:V}>