Skip to content
Snippets Groups Projects
Commit 9800f45b authored by rjm432's avatar rjm432
Browse files

update

parent 07d60570
No related branches found
No related tags found
No related merge requests found
# Ryan McShane
from qiskit import *
def conjunction(circuit, q, L, R, T):
# Implements X1 /\ X3 /\ X5 /\ X6 = X7
circuit.ccx(q[0], q[1], q[T[0]])
tIndex = 0
lIndex = 2
circuit.barrier(q)
while lIndex < (len(L)-1):
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[T[tIndex+1]])
lIndex += 1
tIndex += 1
circuit.barrier(q)
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[R])
# Undo
while lIndex > 2:
lIndex -= 1
tIndex -= 1
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[T[tIndex+1]])
circuit.barrier(q)
circuit.ccx(q[0], q[1], q[T[0]])
def disjunction(circuit, q, L, R, T):
circuit.x(q[0])
circuit.x(q[1])
circuit.ccx(q[0], q[1], q[T[0]])
circuit.barrier(q)
tIndex = 0
lIndex = 2
while lIndex < (len(L) - 1):
circuit.x(q[L[lIndex]])
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[T[tIndex + 1]])
lIndex += 1
tIndex += 1
circuit.barrier(q)
circuit.x(q[L[lIndex]])
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[R])
circuit.x(q[R])
circuit.barrier(q)
# Undo
while lIndex > 2:
lIndex -= 1
tIndex -= 1
circuit.ccx(q[L[lIndex]], q[T[tIndex]], q[T[tIndex + 1]])
circuit.x(q[L[lIndex]])
circuit.barrier(q)
circuit.ccx(q[0], q[1], q[T[0]])
circuit.x(q[1])
circuit.x(q[0])
......@@ -2,10 +2,10 @@
# Logic Gates Modules
# AND, OR, XOR, NAND, NOR, XNOR
def and(circuit, A, B, result):
def AND(circuit, q, A, B, result):
circuit.ccx(q[A], q[B], q[result])
def or(circuit, A, B, result):
def OR(circuit, q, A, B, result):
circuit.x(q[A])
circuit.x(q[B])
circuit.ccx(q[result])
......@@ -14,36 +14,40 @@ def or(circuit, A, B, result):
circuit.x(q[B])
circuit.x(q[A])
def nand(circuit, A, B, result):
def NAND(circuit, q, A, B, result):
circuit.ccx(q[A], q[B], q[result])
circuit.x(q[result])
def nor(circuit, A, B, result):
def NOR(circuit, q, A, B, result):
circuit.x(q[A])
circuit.x(q[B])
circuit.ccx(q[result])
# Undo
circuit.x(q[B])
circuit.x(q[A])
def xor(circuit, A, B, result, t1, t2, t3):
nand(circuit, q[A], q[B], q[t1])
def XOR(circuit, q, A, B, result, t1, t2, t3):
NAND(circuit, q[A], q[B], q[t1])
circuit.x(q[t1])
nand(circuit, q[A], q[t1], q[t2])
NAND(circuit, q[A], q[t1], q[t2])
circuit.x(q[t2])
nand(circuit, q[B], q[t1], q[t3])
NAND(circuit, q[B], q[t1], q[t3])
circuit.x(q[t3])
nand(circuit, q[t2], q[t3], q[result])
NAND(circuit, q[t2], q[t3], q[result])
circuit.x(q[result])
# Undo
circuit.x(q[t3])
nand(circuit, q[B], q[t1], q[t3])
NAND(circuit, q[B], q[t1], q[t3])
circuit.x(q[t2])
nand(circuit, q[A], q[t1], q[t2])
NAND(circuit, q[A], q[t1], q[t2])
circuit.x(q[t1])
nand(circuit, q[A], q[B], q[t1])
NAND(circuit, q[A], q[B], q[t1])
def xnor(circuit, a, b, result, R, At, Bt):
xor(circuit, a, b, result, R, At, Bt)
circuit.x(q[result])
def XNOR(circuit, q, a, b, result, R, At, Bt):
# circuit, q = quantum register, a, b, result, R = first NAND, At=second NAND, Bt = third NAND
XOR(circuit, a, b, result, R, At, Bt)
circuit.x(q[result]) # Just XOR negated
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment