Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Examples

An implementation of the Kitaev-Solovay algorithm

The Kitaev-Solovay algorithm lets us efficiently approximate an arbitray single-qubit gate by a sequence of gates from a given instruction set. By instruction set we just mean a small set of universal single-qubit gates, for example the Hadamard gate 'H' and the /8 gate 'T'. The algorithm is described in detail in this review article.

Source archive: sk-0.1.tar.gz

Win32 binary: sk-0.1_w32.zip

The sources have been successfully compiled with g++ 3.3.5 and with MS Visual C++ 7.1. The Win32 binary contains a pre-compiled version of the Python module which may or may not work on your system.

To compile the Python module you'll need the latest Boost C++ libraries. Installing them is easier than it sounds.

Overview

The main part of the whole Solovay-Kitaev thing is the initial epsilon-net. This is encapsulated by the Net class which allows you generate, save and load nets, and of course, run the algorithm. The main idea behind it is to divide an SU(2) parameter space up into tiles. Each instruction sequence that is generated is associated with nearby tiles, and then when it's time to find an initial approximation to some operator U we just search through the sequences in U's tile.

When generating a Net for the first time you need to provide a 'tile width'. The less instruction sequences in a tile the better so you don't want the tiles too big. On the otherhand you don't want the tiles too small otherwise it's possible that won't have any instruction sequences in it. One of the main problems with the current implementation is that it uses a stupid SU(2) paramaterization and choosing a good tile width is difficult, but see the TODO section below for details.

The examples should be enough to get started with, and the accompanying class documentation should be enough to go further.

TODO

If I were trying to improve this code, these are some of the things I'd do (in order of priority):


Generated on Sun Jul 10 21:57:13 2005 by  doxygen 1.4.1