qml.spin.emery

emery(lattice, n_cells, hopping=1.0, coulomb=1.0, intersite_coupling=1.0, boundary_condition=False, neighbour_order=1, mapping='jordan_wigner')[source]

Generates the Hamiltonian for the Emery model on a lattice.

The Hamiltonian for the Emery model is represented as:

\[\begin{align*} \hat{H} & = - t \sum_{\langle i,j \rangle, \sigma} c_{i\sigma}^{\dagger}c_{j\sigma} + U \sum_{i} n_{i \uparrow} n_{i\downarrow} + V \sum_{<i,j>} (n_{i \uparrow} + n_{i \downarrow})(n_{j \uparrow} + n_{j \downarrow})\ , \end{align*}\]

where \(t\) is the hopping term representing the kinetic energy of electrons, \(U\) is the on-site Coulomb interaction representing the repulsion between electrons, \(V\) is the intersite coupling, \(<i,j>\) represents the indices for neighbouring sites, \(\sigma\) is the spin degree of freedom, and \(n_{k \uparrow}\), \(n_{k \downarrow}\) are number operators for spin-up and spin-down fermions at site \(k\). 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 neighbouring sites. It can be a number, an array of length equal to neighbour_order or a square matrix of shape (n_sites, n_sites), where n_sites is the total number of sites. Default value is 1.0.

  • coulomb (float or tensor_like[float]) – Coulomb interaction between spins. It can be a number or an array of length equal to the number of spins. Default value is 1.0.

  • intersite_coupling (float or tensor_like[float]) – Interaction strength between spins on neighbouring sites. It can be a number, an array with length equal to neighbour_order 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.

  • neighbour_order (int) – Specifies the interaction level for neighbors within the lattice. Default is 1, indicating nearest neighbours.

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

Raises

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

Returns

Hamiltonian for the Emery model.

Return type

Sum

Example

>>> n_cells = [2]
>>> h = 0.5
>>> u = 1.0
>>> v = 0.2
>>> spin_ham = qml.spin.emery("chain", n_cells, hopping=h, coulomb=u, intersite_coupling=v)
>>> spin_ham
(
  -0.25 * (Y(0) @ Z(1) @ Y(2))
  + -0.25 * (X(0) @ Z(1) @ X(2))
  + 0.7000000000000002 * I(0)
  + -0.25 * (Y(1) @ Z(2) @ Y(3))
  + -0.25 * (X(1) @ Z(2) @ X(3))
  + -0.35 * Z(1)
  + -0.35 * Z(0)
  + 0.25 * (Z(0) @ Z(1))
  + -0.35 * Z(3)
  + -0.35 * Z(2)
  + 0.25 * (Z(2) @ Z(3))
  + 0.05 * (Z(0) @ Z(2))
  + 0.05 * (Z(0) @ Z(3))
  + 0.05 * (Z(1) @ Z(2))
  + 0.05 * (Z(1) @ Z(3))
)