## Standard Gates

Quantum gates are the meat of quantum algorithms. Each Gate is an Op with several basic methods. There are three types of gates defined with TargetGate, ControlGate, and SwapGate traits. The former is a gate applied to one qubit. All it needs is a qubit index and a gate matrix generator, which is an anonymous function. ControlGate provides an abstraction for controlled quantum gates. Finally, SwapGate defines a structure for different types of swap gates.

All target gates can be parametric depending on the gate. Gate parameters are supposed to be listed first followed by qubit indexes:

SomeGate(param1, param2, index1, index2, ...)


Gate parameters are expected to be individual method parameters and indexes are represented by variable arguments (varargs).

Scotty provides a set of standard gates that matches gates in the Quil gate set:

Name Qubits Params Description
I 1   The identity gate. Doesn’t change the state.
X 1   Pauli X gate (the NOT gate). Rotates the qubit around the x-axis by $pi$ radians.
Y 1   Pauli Y gate. Rotates the qubit around the y-axis by $\pi$ radians.
Z 1   Pauli Z gate. Rotates the qubit around the z-axis by $\pi$ radians.
RX 1 theta Rotates the qubit around the x-axis by $\theta$ radians.
RY 1 theta Rotates the qubit around the y-axis by $\theta$ radians.
RZ 1 theta Rotates the qubit around the z-axis by $\theta$ radians.
CNOT 2   Controlled-NOT gate.
CCNOT 3   Controlled-controlled-NOT gate (the Toffoli gate).
CZ 2   Controlled-Z gate.
SWAP 2   Swap gate.
CSWAP 2   Controlled-SWAP gate.
ISWAP 2   Swaps the state of two qubits, applying an i phase to the first qubit when it’s in the $\lvert1\rangle$ state and an i phase to the second qubit when it’ i’s in the $\lvert0\rangle$ state.
PSWAP 2 phi Swaps the state of two qubits, applying a custom phase $\phi$ to the first qubit when it’s in the $\lvert1\rangle$ state and a custom phase $\phi$ to the second qubit when it’ i’s in the $\lvert0\rangle$ state.
PHASE 1 phi Leaves $\lvert0\rangle$ unchanged and maps $\lvert1\rangle$ to $e^{i\phi}\lvert1\rangle$.
CPHASE 2 phi Controlled PHASE gate acting on the $\lvert11\rangle$ state.
CPHASE00 2 phi Controlled PHASE gate acting on the $\lvert00\rangle$ state.
CPHASE10 2 phi Controlled PHASE gate acting on the $\lvert10\rangle$ state.
CPHASE01 2 phi Controlled PHASE gate acting on the $\lvert01\rangle$ state.
S 1   PHASE gate that represents a $\frac{\pi}{2}$ rotation around the z-axis.
T 1   PHASE gate that represents a $\frac{\pi}{4}$ rotation around the z-axis.

### How Are Gates Implemented

Single-qubit gates are implemented in the framework itself with a gate matrix or with other gates. For example, S and T are implemented with PHASE.

Multi-qubit gates are different and their internals depends on the QuantumContext implementation. In the QuantumSimulator we use an efficient algorithm for single-qubit and control gate state application implementations that has a running time of $\mathcal{O}(n)$.

The simulator treats each gate as a separate sequential step. However, each step is parallelized.

For multi-qubit gates that are not simple controlled gates we use CompositeGates that are covered in the next section.