44 lines
888 B
HTML
44 lines
888 B
HTML
<h2>Full example</h2>
|
|
<pre class="language-cpp"><code>// https://github.com/Qiskit/openqasm
|
|
/*
|
|
* Repeat-until-success circuit for Rz(theta),
|
|
* cos(theta-pi)=3/5, from Nielsen and Chuang, Chapter 4.
|
|
*/
|
|
OPENQASM 3;
|
|
include "stdgates.inc";
|
|
|
|
/*
|
|
* Applies identity if out is 01, 10, or 11 and a Z-rotation by
|
|
* theta + pi where cos(theta)=3/5 if out is 00.
|
|
* The 00 outcome occurs with probability 5/8.
|
|
*/
|
|
def segment qubit[2]:anc, qubit:psi -> bit[2] {
|
|
bit[2] b;
|
|
reset anc;
|
|
h anc;
|
|
ccx anc[0], anc[1], psi;
|
|
s psi;
|
|
ccx anc[0], anc[1], psi;
|
|
z psi;
|
|
h anc;
|
|
measure anc -> b;
|
|
return b;
|
|
}
|
|
|
|
qubit input;
|
|
qubit ancilla[2];
|
|
bit flags[2] = "11";
|
|
bit output;
|
|
|
|
reset input;
|
|
h input;
|
|
|
|
// braces are optional in this case
|
|
while(int(flags) != 0) {
|
|
flags = segment ancilla, input;
|
|
}
|
|
rz(pi - arccos(3 / 5)) input;
|
|
h input;
|
|
output = measure input; // should get zero
|
|
</code></pre>
|