states.ghz

GHZ (Greenberger-Horne-Zeilinger) is used to represent a maximally entangled state.

In the GHZ state, the state of qubits are completely dependent on the state of other qubits. This state is an important part of quantum computing as it is commonly used in algorithms, protocols, error corrections, cryptography, etc.

Functions

ghz(dim, num_qubits[, coeff])

Generate a (generalized) GHZ state [1].

Module Contents

states.ghz.ghz(dim, num_qubits, coeff=None)

Generate a (generalized) GHZ state [1].

Returns a num_qubits-partite GHZ state acting on dim local dimensions, described in [1]. For example, ghz(2, 3) returns the standard 3-qubit GHZ state on qubits. The output of this function is a dense NumPy array.

For a system of num_qubits qubits (i.e., dim = 2), the GHZ state can be written as

\[|GHZ \rangle = \frac{1}{\sqrt{n}} \left(|0\rangle^{\otimes n} + |1 \rangle^{\otimes n} \right)).\]

Examples

When dim = 2, and num_qubits = 3 this produces the standard GHZ state

\[\frac{1}{\sqrt{2}} \left( |000 \rangle + |111 \rangle \right).\]

Using toqito, we can see that this yields the proper state.

>>> from toqito.states import ghz
>>> ghz(2, 3)
array([[0.70710678],
       [0.        ],
       [0.        ],
       [0.        ],
       [0.        ],
       [0.        ],
       [0.        ],
       [0.70710678]])

As this function covers the generalized GHZ state, we can consider higher dimensions. For instance here is the GHZ state in \(\mathbb{C}^{4^{\otimes 7}}\) as

\[\frac{1}{\sqrt{30}} \left(|0000000 \rangle + 2|1111111 \rangle + 3|2222222 \rangle + 4|3333333\rangle \right).\]

Using toqito, we can see this generates the appropriate generalized GHZ state.

>>> from toqito.states import ghz
>>> import numpy as np
>>> ghz(4, 7, np.array([1, 2, 3, 4]) / np.sqrt(30))
array([[0.18257419],
       [0.        ],
       [0.        ],
       ...,
       [0.        ],
       [0.        ],
       [0.73029674]])

References

[1] (1,2,3)

Daniel M. Greenberger, Michael A. Horne, and Anton Zeilinger. Going beyond bell's theorem. 2007. arXiv:0712.0921.

Raises:

ValueError – Number of qubits is not a positive integer.

Parameters:
  • dim (int) – The local dimension.

  • num_qubits (int) – The number of parties (qubits/qudits)

  • coeff (list[int] | None) – (default [1, 1, …, 1])/sqrt(dim): a 1-by-dim vector of coefficients.

Returns:

Numpy vector array as GHZ state.

Return type:

numpy.ndarray