Introduction
Graph state is a kind of notation of graphs in a quantum state version. It is widely used in surface coding, one-way quantum computing (also known as measurement-based computing), and probably some other amazing places. I add this type in order to implement the simulation about one-way quantum computing in QuCmp.jl.
New Dependencies
LightGraphs.jl An optimized graphs package for Julia
Implementation
Type structure
The graph state’s data is stored in a LightGraphs.jl Graph type.
|
|
methods
Convert
Graph state can be converted to a normal state vector. Suppose \(S_1,S_2,S_m\) are the stabilizers of graph state \(|G\rangle\). Define Hamiltonian \(H\)
\[ H = \sum_i S_i \]
The state vector of \(|G\rangle\) can be proved to be the ground state of \(H\). Therefore, the convert function is defined to use Julia’s function eigs to calculate the eigen vector of sparse matrix H, and is normalized by normalize
Stabilizers
Stabilizer group is calculated in this method : stabilizers, with a return collection of all stabilizers defined by a certain graph structure
LC equivalence
LC equivalence is evaluated by isLCeq
\[ \mathbf{flag} = (\mathbf{1}|\mathbf{\Gamma}\^{A}) \mathbf{P} (\mathbf{1}|\mathbf{\Gamma}\^{B})^T \]
where \(\mathbf{\Gamma}\) is the adjacency matrix of graph A, while \(\mathbf{\Gamma'}\) is the adjacency matrix of graph B, and \(\mathbf{P}\) is defined below
\[ \begin{pmatrix} \mathbf{0} & \mathbf{1} \\\\ \mathbf{1} & \mathbf{0} \end{pmatrix} \]
A is LC-equivalent to B, only when \(\mathbf{flag}\) is a zero matrix.
To-Do and To be decided
I’m note sure whether it is better to include GraphState in AbstractQuState or a subtype of AbstractQuVector in QuBase or just let it be a single type. The problem is I can not convert a given state vector to a GraphState or stlzState due to their space are not actually equal.