reb-ddm / SliQEC

A BDD-based Quantum Circuit Equivalence Checker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SliQEC - A BDD-based Quantum Circuit Equivalence Checker

Introduction

SliQEC is a BDD-based quantum circuit equivalence checker implemented in C/C++ on top of CUDD package. The concerned equivalence checking problem includes the full equivalence checking and partial equivalence checking. For more details about problem formulations and theories, please refer to the Citation.

Build

First configure CUDD:

cd cudd
./configure --enable-dddmp --enable-obj --enable-shared --enable-static
cd ..

Then build the checker, type the command at the root directory.

$ make

Execution

The circuit format being checked is OpenQASM used by IBM's Qiskit, and our supported gate set now contains Pauli-X, Pauli-Y, Pauli-Z, Hadamard, Phase and its inverse, π/8 and its inverse, Rotation-X with phase π/2, Rotation-Y with phase π/2, Controlled-NOT, Controlled-Z, Toffoli, SWAP, and Fredkin. One can find some example benchmarks in examples folder.

The help message concludes the details for execution:

$ ./SliQEC --help
Options:
  --help                produce help message.
  --reorder arg (=1)    allow variable reordering or not.
                        0: disable 1: enable
  --circuit1 arg        1st circuit for equivalence checking.
  --circuit2 arg        2nd circuit for equivalence checking.
  --p arg (=0)          conduct full or partial equivalence checking.
                        0: full 1: partial
  --nQd arg (=0)        (only for --p 1) the number of data qubits.
  --nQm arg (=0)        (only for --p 1) the number of measured qubits.

Example

Full Equivalence Checking

For conducting full equivalence checking on examples/FEC/bv_1.qasm and examples/FEC/bv_2.qasm, execute:

$ ./SliQEC --circuit1 examples/FEC/bv_1.qasm --circuit2 examples/FEC/bv_2.qasm

Then the results will be shown:

{
	#Qubits (n): 10
	Gatecount of circuit1: 29
	Gatecount of circuit2: 62
	Is equivalent? Yes
}

Runtime: 0.019328 seconds
Peak memory usage: 12881920 bytes

Partial Equivalence Checking

For conducting partial equivalence checking on examples/PEC/period_finding_1.qasm and examples/PEC/period_finding_2.qasm with 3 data qubits and 3 measured qubits, execute:

$ ./SliQEC --p 1 --circuit1 examples/PEC/period_finding_1.qasm --circuit2 examples/PEC/period_finding_2.qasm --nQd 3 --nQm 3

Then the results will be shown:

{
        #Qubits (n): 8
        #Data qubits (d): 3
        #Measured qubits (m): 3
        Gatecount of circuit1: 395
        Gatecount of circuit2: 437
        Is partially equivalent? Yes
}

Runtime: 1.86163 seconds
Peak memory usage: 14553088 bytes

Citation

C.-Y. Wei, Y.-H. Tsai, C. -S. Jhang, and J.-H. R. Jiang, “Accurate BDD-based Unitary Operator Manipulation for Scalable and Robust Quantum Circuit Verification,” in Proceedings of the Design Automation Conference (DAC), 2022, pp. 523-528. T.-F. Chen, J.-H. R. Jiang, and M.-H. Hsieh, “Partial Equivalence Checking of Quantum Circuits,” in Proceedings of the International Conference on Quantum Computing and Engineering (QCE), 2022, pp. 594-604.

Contact

If you have any questions or suggestions, feel free to create an issue, or contact us. For full equivalence checking, please contact joey.cywei@gmail.com. For partial equivalence checking, please contact ghdftff542@gmail.com.

About

A BDD-based Quantum Circuit Equivalence Checker


Languages

Language:C 46.7%Language:Roff 23.7%Language:Shell 12.0%Language:Makefile 8.1%Language:C++ 4.1%Language:HTML 3.5%Language:TeX 1.8%Language:M4 0.1%