Swap test

The Swap test is a procedure in quantum computation that is used to check how much two quantum states differ.[1]
Consider two states: and . The state of the system at the beginning of the protocol is . After the Hadamard gate, the state of the system is . The controlled SWAP gate transforms the state into . The second Hadamard gate results in
The Measurement gate on the first qubit ensures that it's 0 with a probability of
when measured. If and are orthogonal , then the probability that 0 is measured is . If the states are equal , then the probability that 0 is measured is 1.[2]
Pseudocode
Below is the pseudocode for implementing the Swap test:
Algorithm Swap Test
- Inputs Two quantum states and , stored in two different qubit registers, each comprised of qubits (We denote the -th qubit in the two registers, respectively, by and )
An ancilla qubit, initialized as (We denote the ancilla qubit by )
Some , representing the number of times the algorithm will be executed
- Output Compute
- For ranging from to :
- Apply a Hadamard gate to the ancilla qubit
- For ranging from to (iterating over each pair of qubits in the two registers):
- Apply ( is the control qubit, while and are the targets)
- Apply a Hadamard gate to the ancilla qubit
- Measure the ancilla qubit in the basis and record the result of the measurement (we assume that measurements yield either or , and we denote the outcome of the measurement by )
- Compute
- Return (Note that , with equality occurring as )
- "←" denotes assignment. For instance, "largest ← item" means that the value of largest changes to the value of item.
- "return" terminates the algorithm and outputs the following value.
Example
An implementation of the Swap test in Cirq.
"""Demonstrates Swap test.
=== EXAMPLE OUTPUT ===
0: ───H───@───H───M('Results')───
│
1: ───H───×──────────────────────
│
2: ───H───×──────────────────────
Results are all 0 because the states are equal.
Results=0000000000
0: ───H───────@───H───M('Results')───
│
1: ───X───H───×──────────────────────
│
2: ───H───────×──────────────────────
Not all the results are 0 because the states are not equal.
Results=1111000011
"""
import cirq
def swap_test(q0, q1, q2, circuit):
circuit.append(
[
cirq.H(q0),
cirq.CSWAP(q0, q1, q2),
cirq.H(q0),
cirq.measure(q0, key="Results"),
]
)
simulator = cirq.Simulator()
print(circuit)
result = simulator.run(circuit, repetitions=10)
return result
def main():
q0, q1, q2 = cirq.LineQubit.range(3)
equal_states = cirq.Circuit.from_ops(cirq.H(q1), cirq.H(q2),)
results = swap_test(q0, q1, q2, equal_states)
print("Results are all 0 because the states are equal.")
print(results)
non_equal_states = cirq.Circuit.from_ops(cirq.X(q1), cirq.H(q1), cirq.H(q2),)
results = swap_test(q0, q1, q2, non_equal_states)
print("Not all the results are 0 because the states are not equal.")
print(results)
if __name__ == "__main__":
main()
References
- ^ Kang Min-Sung, Heo Jino, Choi Seong-Gon, Moon Sung, Han Sang-Wook (2019). "Implementation of SWAP test for two unknown states in photons via cross-Kerr nonlinearities under decoherence effect". Scientific Reports. 9 (1). doi:10.1038/s41598-019-42662-4.
{{cite journal}}
: CS1 maint: multiple names: authors list (link) - ^
Harry Buhrman, Richard Cleve, John Watrous, Ronald de Wolf (2001). "Quantum Fingerprinting". Physical Review Letters. 87 (16). arXiv:quant-ph/0102001. doi:10.1103/PhysRevLett.87.167902.
{{cite journal}}
: CS1 maint: multiple names: authors list (link)
This article needs additional or more specific categories. (August 2019) |