ProjectQ-Framework / ProjectQ

ProjectQ: An open source software framework for quantum computing
https://projectq.ch
Apache License 2.0
888 stars 274 forks source link

How we use Reset Qubits without using measurement in Project Q? #477

Open saifawan2703 opened 4 weeks ago

saifawan2703 commented 4 weeks ago

Hi everyone,

I would like to know if there is a way to reset a qubit to the |0⟩ state in ProjectQ without performing a measurement. The reason is that after measuring, I am unable to use the compute-uncompute pattern. like that

with Compute(eng):
    All(H) | k0
    All(H) | k1
    All(X) | k0
    All(X) | k1

with Control(eng, k0[0:4]):
        with Control(eng, k1[0:-1]):
            Z | k1[-1]  
Uncompute(eng)  #

Any guidance on this would be appreciated.

damiansteiger commented 3 weeks ago

You want to use a measurement within the with Compute section?

A reset or measurement of a qubit within the compute section is not possible (compiler would need to automatically generate an inverse for the uncompute section which is not possible in general, i.e., unknown quantum state before reset or measurement)

Ancilla qubits can be allocated with the compute section and deallocated if they are returned to 0 deterministically. See doc

For more advanced use cases there is always the option to specify the uncompute section with a CustomUncompute