-
Notifications
You must be signed in to change notification settings - Fork 2
/
experiment_teleportation.py
51 lines (37 loc) · 1.33 KB
/
experiment_teleportation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import time
import numpy as np
from symqv.lib.expressions.qbit import Qbits
from symqv.lib.models.circuit import Circuit, Method
from symqv.lib.operations.gates import CNOT, H, CZ, SWAP
from symqv.lib.operations.measurements import measure
from symqv.lib.solver import SpecificationType
# Quantum teleportation
def prove_quantum_teleportation():
# Initialize circuit
(psi, b0, b1) = Qbits(['psi', 'b0', 'b1'])
circuit = Circuit([psi, b0, b1],
[CNOT(psi, b0),
H(psi),
CNOT(b0, b1),
SWAP(psi, b0),
CZ(b0, b1),
SWAP(psi, b0),
measure(psi),
measure(b0)])
circuit.initialize([None, (1, 0), (1, 0)])
circuit.set_initial_gate_applications([
H(b0),
CNOT(b0, b1)
])
# Symbolic execution
(psi_final, b0_final, b1_final) = circuit.get_final_qbits()
circuit.set_specification((psi, b1_final), SpecificationType.equality_pair)
circuit.prove(method=Method.state_model,
overapproximation=False)
if __name__ == "__main__":
times = []
for _ in range(5):
start = time.time()
prove_quantum_teleportation()
times.append(time.time() - start)
print(f'Runtime:', np.mean(times))