Skip to main content

Non-interacting fermions

Overview

In many-body physics, we often look for good approximations of complicated interacting models so that we can obtain analytical tools for calculating relevant physical properties. In the context of fermionic many-body systems, non-interacting fermionic models are often used as a basis to construct such approximations.

A prelude on fermions

Fermionic particles

Fermions are a class of quantum particles defined by their obedience to the Pauli exclusion principle.

note

The Pauli exclusion principle states that identical fermionic particles can never occupy the same physical quantum state. This contrasts with bosons, which can accumulate in the same state without restriction.

An example of a fermion is the electron which has total spin 1/21/2.

note

Any fermionic particle must have a half-integer total spin. The quantum spin of a particle is an intrinsic property, just as electric charge is an intrinsic property.

In first quantization, to describe a system of fermions one first defines a relevant basis of functions ϕs(r)\phi_s(\vec{r}) where ss labels the different states the fermion can occupy. The wave function corresponding to having a fermion in each state ϕs1,ϕs2...,ϕsL\phi_{s_1}, \phi_{s_2} ..., \phi_{s_L} can be written as

ψ(r1,...,rL)=F(ϕs1,...,ϕsL)\psi(\vec{r}_1,...,\vec{r}_L) = F(\phi_{s_1},...,\phi_{s_L})

where LL is the number of fermions, ri\vec{r}_i is the position coordinate of the ithi^{th} particle and FF is a function whose structure is discussed below.

Identical fundamental particles are indistinguishable from one another. As a consequence the coordinates ri\vec{r}_i cannot be tied to any specific fermionic particle. The function FF must be chosen such that exchanging a pair of position labels rj\vec{r}_j keeps the wave function invariant up to an unobservable global phase.

Taking Pi,jP_{i,j} to be the operator which exchanges the position labels ri\vec{r}_i and rj\vec{r}_j, it then holds that for fermions

Pi,jψ(...,ri,...,rj,...)=ψ(...,rj,...,ri,...)P_{i,j} \psi(...,\vec{r}_i, ...,\vec{r}_j, ...) = - \psi(...,\vec{r}_j, ...,\vec{r}_i, ...)

where we see that the acquired phase is 1-1.

note

The reason for the negative phase is tied to the Pauli exclusion principle. Indeed, if fermion ii and jj were in the same state, then exchanging the fermions keeps the wave function invariant which then implies ψ=ψ\psi = -\psi and thus ψ=0\psi = 0, so no fermions can occupy the same state as expected.

The only possible form of F(ϕs1,...,ϕsL)F(\phi_{s_1},...,\phi_{s_L}) which satisfies the above constraints is given by

F(ϕs1,...,ϕsL)=1L!Psgn(P)ϕsP(1)(r1)...ϕsP(L)(rL)F(\phi_{s_1},...,\phi_{s_L}) = \frac{1}{\sqrt{L!}} \sum_{P}\text{sgn}(P)\phi_{s_{P(1)}}(\vec{r}_1)...\phi_{s_{P(L)}}(\vec{r}_L)

where PP labels the possible permutations of the state indices and sgn(P)\text{sgn}(P) is the sign of the permutation (11 if it can be constructed from an even number of pairwise permutations, 1-1 otherwise). More complicated fermionic states are obtained by taking linear superpositions of the function FF evaluated with different states ϕsj\phi_{s_j} and potentially different number of particles if the state describes a situation in which the number of fermions is not fixed.

The Fock space

Albeit possible to work exclusively with wave functions, a more convenient way to describe systems with multiple fermions is instead to use a framework that captures the possible states of the fermions together with the occupation of each available state. This can be achieved by defining the so-called Fock space. In this representation, the available states are labeled s1,s2,...,sNs_1, s_2, ..., s_N where NN is the total number of states. A many-body fermionic configuration can then be represented as n1n2...nN\vert n_1n_2...n_N \rangle where nk{1,0}n_k \in \{1,0\} (correspondingly occupied or unoccupied) is the occupation number of the corresponding state sks_k. The states n1n2...nN\vert n_1n_2...n_N \rangle are in one to one correspondence with the states F(ϕs1,...,ϕsL)F(\phi_{s_1},...,\phi_{s_L}) discussed above. As an example, suppose N=4N = 4 and (n1=0,n2=1,n3=0,n4=1)(n_1 = 0, n_2 = 1, n_3 = 0, n_4 = 1), then we have that

F(ϕs2,ϕs4)0,1,0,1F(\phi_{s_2},\phi_{s_4}) \equiv \ket{0,1,0,1}

Fermionic operators

Now that we have a way of describing the available states the fermions can be in, the natural next step is to introduce operators that can change the occupancy of the available states. Since the only relevant information to describe a system of fermions is the occupancy of the available states, we introduce corresponding creation and annihilation operators ckc^{\dagger}_{k} and ckc_{k} which respectively add or remove a fermion from the state sks_k. Sums of products of these operators alone is sufficient to describe the dynamics of any system of fermions since any physical process can be viewed as an update rule for the population of the available fermionic states. Any Fock state can be represented in terms of these operators as

n1,n2,...=((c1)n1(c2)n2...)0\ket{n_1, n_2, ...} = ((c_1^{\dagger})^{n_1}(c_2^{\dagger})^{n_2}...)\ket{0}

where 0\ket{0} is the vacuum state (the state for which nj=0n_j = 0 j\forall j). The action of the creation and annihilation operators on any Fock states is given by

cj...nj...=(1)r<jnr(1nj)...(1+nj)...cj...nj...=(1)r<jnrnj...(nj1)....c_j^{\dagger}\vert ...n_j... \rangle = (-1)^{\sum_{r < j}n_r}(1 - n_j)\vert ...(1 + n_j)... \rangle \quad c_j\vert ...n_j... \rangle = (-1)^{\sum_{r < j}n_r}n_j\vert ...(n_j-1)... \rangle.

The creation and annihilation operators correspond to the physical process of adding a fermion in the specified state sjs_j to the many-body wave function in such a way that the resulting state continues to respect the Pauli exclusion principle and does not break the indistinguishably property. This in turn enforces the following anti-commutation relations

cicj+cjci=0c_ic_j + c_jc_i = 0 cicj+cjci=0c_i^{\dagger}c_j^{\dagger} + c_j^{\dagger}c_i^{\dagger} = 0 cicj+cjci=δijc_i^{\dagger}c_j + c_jc_i^{\dagger} = \delta_{i \neq j}

Quadratic fermionic models

A system of fermions is said to be quadratic whenever the Hamiltonian can be written down as a sum of pairs of creation and annihilation operators.

Hquadratic=(j,kAj,kcjck+12(Bj,kcjck+h.c))H_{\text{quadratic}} = \left(\sum_{j,k} A_{j,k} c_j^{\dagger}c_k + \frac{1}{2}(B_{j,k}c_j^{\dagger}c_k^{\dagger} + \text{h.c})\right)

where A is a hermitian matrix and B is an antisymmetric matrix. Quadratic models are characterized by the absence of interaction terms.

note

An interacting Hamiltonian would include terms such as cjckcj+δck+δ+h.c.c_j^\dagger c_k^\dagger c_{j + \delta} c_{k + \delta} + \text{h.c.} which here represents an interaction between two fermionic particles.

Quadratic Hamiltonians can always be diagonalized with a Bogoliubov–de Gennes transformation.

note

In an upcoming feature, we introduce support for interacting with quadratic fermionic models together with an expansion of this concept.

The single-particle sector

Often, a relevant first step in studying a many-body fermionic quantum system is to solve the single-particle problem by using some heuristics to replace interacting terms by an effective potential in the original Hamiltonian. A generic single-particle fermionic Hamiltonian can be expressed as

Hfree=(j,kAj,kcjck)H_{\text{free}} = \left(\sum_{j,k} A_{j,k} c_j^{\dagger}c_k\right)
note

In aleph and everywhere in the documentation, we refer to operators that only involve hopping terms as free, in analogy to a particle which is free to roam around in a potential landscape.

The matrix Aj,kA_{j,k} is a Hermitian matrix when the above representation represents a Hamiltonian. By relaxing the hermitian constraint, the above equation can be used to represent any operator whose action on states is non-trivial only in the single-particle sector.

note

The single-particle sector is characterized by the property inj=1\sum_{i}n_j = 1. Terms such as cjckc_j^{\dagger}c_k^{\dagger} violate particle conservation and so do not appear in the single-particle Hamiltonian. Furthermore, any fermionic operator involving a product of terms acting on more than one fermion vanishes in the single-particle sector.

From the form of HfreeH_{\text{free}}, it is clear that single-particle Hamiltonians are a subset of the more general quadratic fermionic models. The additional structure provided by the single-particle constraint can be leveraged to represent both the states and the Hamiltonian efficiently. First, we note that any fermionic state containing only one fermion can be written down as

ψfree=j=0L1αjcj0\psi_{\text{free}} = \sum_{j = 0}^{L-1} \alpha_j c_j^{\dagger} \ket{0}

where jαj2=1\sum_j |\alpha_j|^2 = 1. As such, one may represent a single-particle state with a vector of coefficients α0,...,αL1\alpha_0, ..., \alpha_{L-1}. In aleph, such a representation can be created as follows

// 12 possible modes for the fermionic particle
var L = 12;

// specify the state vector options to produce a single-particle state vector
var options = as_fermion | as_singleparticle | as_real

//Set a randomized normalized state
var sp_state = state_vector(L, options)
sp_state.set_random()
sp_state.normalize()

//Extract the probability to find the state in a given mode
var mode = 3
var prob_occupied = abs(sp_state[mode])**2 // Yields the probability to find the state in the third fermionic mode

The resulting state vector stores LL coefficients whose amplitudes squared correspond to the probability to find the fermionic particle in the specified mode.

Single-particle state vectors are most useful when used with operators that represent a set of single-particle operations. As discussed above, any single-particle operator can be described with a matrix Aj,kA_{j,k} of size LL by LL. In aleph, a single-particle operator can be created either by directly specifying the matrix Aj,kA_{j,k} or by constructing the single-particle operator from a sum of operators which individually act non-trivially on the single-particle sector.

// Similar set-up as above
var L = 4;
var options = as_fermion | as_singleparticle | as_real
var sp_state = state_vector(L, options)
sp_state.set_random()
sp_state.normalize()

// Create a single-particle operator from a matrix
{
var sp_representation = operator_free(matrix([[1,1,0,0],[1,1,0,0],[0,0,1,0],[0,0,0,1]]), options) // Represents Number(0) + Number(1) + Number(3) + Hop(0,1)
// Basic operations on state vectors
sp_representation >> sp_state
sp_representation * sp_state
}

// Create a single-particle operator from an operator sum
{
var op_sum = Number(0) + Number(1) + Hop(1,2) + Number(3) + Hop(0,1)
var sp_representation = operator_free(op_sum, options)
// Basic operations on state vectors
sp_representation >> sp_state
sp_representation * sp_state
}

Further Reading

  • For a more in depth example of what can be done with single-particle operators, stay tuned for the upcoming tutorial on how to use the functionalities of operator_free.

Documentation Contributors

Pierre-Gabriel Rozon