# Decomposition of the Toffoli gate in terms of CNOT and single-qubit rotations¶

Copyright (C) 2011 and later, Paul D. Nation & Robert J. Johansson

This notebooks demonstrates how a toffoli gate can be rewritten in terms of CNOT gates and single qubit gates, and verifies the equivalence of the two gate sequences by comparing their matrix representations. For more information about the toffoli decomposition, see Nielsen & Chuang, Sec. 4.3, p178.

In [1]:
from qutip import *

In [2]:
q = QubitCircuit(3, reverse_states=False)

In [3]:
q.png

Out[3]:
In [4]:
U = gate_sequence_product(q.propagators())

U.tidyup()

Out[4]:
Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\begin{equation*}\left(\begin{array}{*{11}c}1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.0 & 0.0 & 0.0\\\end{array}\right)\end{equation*}
In [5]:
q2 = q.resolve_gates()

In [6]:
q2.png

Out[6]:
In [7]:
U2 = gate_sequence_product(q2.propagators())

U2.tidyup()

Out[7]:
Quantum object: dims = [[2, 2, 2], [2, 2, 2]], shape = [8, 8], type = oper, isherm = True\begin{equation*}\left(\begin{array}{*{11}c}1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0\\0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 1.000 & 0.0 & 0.0\\\end{array}\right)\end{equation*}
In [8]:
U == U2

Out[8]:
True

## Versions¶

In [9]:
%reload_ext version_information

%version_information numpy, cython, scipy, matplotlib, qutip

Out[9]:
SoftwareVersion
Python3.4.0 64bit [GCC 4.8.2]
IPython2.3.1
OSLinux 3.16.0 29 generic x86_64 with Ubuntu 14.10 utopic
numpy1.9.1
cython0.21.2
scipy0.14.1
matplotlib1.4.2
qutip3.1.0
Tue Jan 13 13:21:05 2015 JST