qml.spin.haldane

haldane(lattice, n_cells, hopping=1.0, hopping_next=1.0, phi=1.0, boundary_condition=False, mapping='jordan_wigner')[source]

Generates the Hamiltonian for the Haldane model on a lattice.

The Hamiltonian for the Haldane model is represented as:

\[\begin{align*} \hat{H} & = - t^{1} \sum_{\langle i,j \rangle, \sigma} c_{i\sigma}^\dagger c_{j\sigma} - t^{2} \sum_{\langle\langle i,j \rangle\rangle, \sigma} \left( e^{i\phi} c_{i\sigma}^\dagger c_{j\sigma} + e^{-i\phi} c_{j\sigma}^\dagger c_{i\sigma} \right) \end{align*}\]

where \(t^{1}\) is the hopping amplitude between neighbouring sites \(\langle i,j \rangle\), \(t^{2}\) is the hopping amplitude between next-nearest neighbour sites \(\langle \langle i,j \rangle \rangle\), \(\phi\) is the phase factor that breaks time-reversal symmetry in the system, and \(\sigma\) is the spin degree of freedom. This function assumes two fermions with opposite spins on each lattice site.

Parameters
  • lattice (str) – Shape of the lattice. Input values can be 'chain', 'square', 'rectangle', 'triangle', 'honeycomb', 'kagome', 'lieb', 'cubic', 'bcc', 'fcc' or 'diamond'.

  • n_cells (list[int]) – Number of cells in each direction of the grid.

  • hopping (float or tensor_like[float]) – Hopping strength between nearest neighbouring sites. It can be a number, or a square matrix of size (n_sites, n_sites), where n_sites is the total number of sites. Default value is 1.0.

  • hopping_next (float or tensor_like[float]) – Hopping strength between next-nearest neighbouring sites. It can be a number, or a square matrix of size (n_sites, n_sites), where n_sites is the total number of sites. Default value is 1.0.

  • phi (float or tensor_like[float]) – Phase factor in the system. It can be a number, or a square matrix of size (n_sites, n_sites), where n_sites is the total number of sites. Default value is 1.0.

  • boundary_condition (bool or list[bool]) – Specifies whether or not to enforce periodic boundary conditions for the different lattice axes. Default is False indicating open boundary condition.

  • mapping (str) – Specifies the fermion-to-qubit mapping. Input values can be 'jordan_wigner', 'parity' or 'bravyi_kitaev'.

Raises

ValueError – If hopping, hopping_next, or phi doesn’t have correct dimensions, or if mapping is not available.

Returns

Hamiltonian for the Haldane model.

Return type

Sum

Example

>>> n_cells = [2]
>>> h1 = 0.5
>>> h2 = 1.0
>>> phi = 0.1
>>> spin_ham = qml.spin.haldane("chain", n_cells, hopping=h1, hopping_next=h2, phi=phi)
>>> spin_ham
(
  -0.25 * (Y(0) @ Z(1) @ Y(2))
  + -0.25 * (X(0) @ Z(1) @ X(2))
  + -0.25 * (Y(1) @ Z(2) @ Y(3))
  + -0.25 * (X(1) @ Z(2) @ X(3))
)