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.
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 .
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 where labels the different states the fermion can occupy. The wave function corresponding to having a fermion in each state can be written as
where is the number of fermions, is the position coordinate of the particle and is a function whose structure is discussed below.
Identical fundamental particles are indistinguishable from one another. As a consequence the coordinates cannot be tied to any specific fermionic particle. The function must be chosen such that exchanging a pair of position labels keeps the wave function invariant up to an unobservable global phase.
Taking to be the operator which exchanges the position labels and , it then holds that for fermions
where we see that the acquired phase is .
The reason for the negative phase is tied to the Pauli exclusion principle. Indeed, if fermion and were in the same state, then exchanging the fermions keeps the wave function invariant which then implies and thus , so no fermions can occupy the same state as expected.
The only possible form of which satisfies the above constraints is given by
where labels the possible permutations of the state indices and is the sign of the permutation ( if it can be constructed from an even number of pairwise permutations, otherwise). More complicated fermionic states are obtained by taking linear superpositions of the function evaluated with different states 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 where is the total number of states. A many-body fermionic configuration can then be represented as where (correspondingly occupied or unoccupied) is the occupation number of the corresponding state . The states are in one to one correspondence with the states discussed above. As an example, suppose and , then we have that
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 and which respectively add or remove a fermion from the state . 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
where is the vacuum state (the state for which ). The action of the creation and annihilation operators on any Fock states is given by
The creation and annihilation operators correspond to the physical process of adding a fermion in the specified state 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
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.
An interacting Hamiltonian would include terms such as which here represents an interaction between two fermionic particles.
Quadratic Hamiltonians can always be diagonalized with a Bogoliubov–de Gennes transformation. Aleph provides several operators that can be used to represent either the totality or part of . Before discussing the available Aleph functionalities it is useful to consider the more general quadratic operator
where is some constant.
We do not enforce to be Hermitian. As such, the matrices can be chosen arbitrarily.
Any operator of this form can be compactly represented by making use of the so-called Nambu spinor. Given
the Nambu spinor can be written as
The operator can be written compactly as
where we have defined
The matrix is not unique due to the fermionic anti-commutation relationships , ,
The representation of can be fixed by instead considering the matrix
where
which allows us to write the following compact representation of any quadratic fermionic operator
We note that in this form it holds true that
When the operator is Hermitian the matrix corresponds to the well known Bogoliubov-de Gennes representation of the Hamiltonian. Given the constraints imposed by the structure of the matrix we see that out of the parameters of the matrix only of them are non-redundant. Indeed can be used to deduce and the upper/lower triangular part of can be used to find the lower/upper triangular part of . Furthermore, the diagonal part of and are fixed to zero. These constraints motivate the introduction of two operators. The first one TransferSum is tied to the block. Explicitly we have that
for some arbitrary matrix . This operator is compatible with the single-particle functionalities of Aleph (see the next section for more details), as it conserves the total particle number. The second relevant operator is the PairingSum operator. Explicitly we have that
where we have used the notation and to denote the upper and lower triangular part of the matrix respectively. A generic can thus be written as
which implicitly defines the relationships
For convenience the operators TransferSum and PairingSum can be constructed either by providing their explicit parameter and or simply by passing a sum of compatible fermionic operators.
| Signature | Description |
|---|---|
TransferSum(matrix) | Pass the A matrix explicitly. |
TransferSum(operator [, options]) | Pass a valid sum of quadratic fermionic terms and optionally a scalar option. |
PairingSum(matrix) | Pass the P matrix explicitly. |
PairingSum(operator [, options]) | Pass a valid sum of quadratic fermionic terms and optionally a scalar option. |
Both the TransferSum and the PairingSum operator do not admit the identity as part of their valid set of operators. To construct an operator with an explicitly added energy shift simply add a multiple of the Identity() to TransferSum(A) + PairingSum(P).
For convenience the operators TransferSum and PairingSum provide the methods extract_bdg_matrix and extract_bdg_shift which return the corresponding matrix and the energy shift of the operator. Finally, aleph also provides the operator QuadraticSum which is a convenient way of representing as a whole. First we note that it is always possible to write
by incorporating the identity term in the matrix elements of by making use of the identity . In this form one obtains the relationship
Just like TransferSum and PairingSum, the QuadraticSum operator provides the methods extract_bdg_matrix and extract_bdg_shift. A QuadraticSum operator can be constructed either by providing the explicit matrix or by passing a sum of valid quadratic operators.
| Signature | Description |
|---|---|
QuadraticSum(matrix) | Pass the Q matrix explicitly. |
QuadraticSum(operator [, options]) | Pass a valid sum of quadratic fermionic terms and optionally a scalar option. |
As an example a typical workflow to solve problems involving a quadratic Hamiltonian may look like
// Define the Hamiltonian parameters
var t = -1.0 // hopping
var mu = 0.5 // chemical potential
var delta = 0.4 // pairing terms
var alpha = 0.7 // explicit energy shift
// Group terms of interest
var transfer_terms = t*(Hop(0,1) + Hop(1,2)) + mu*(Number(0) + Number(1)) // transfer terms
var pairing_terms = delta*(CreateCreate(0,1) + CreateCreate(1,2) + DestroyDestroy(1,0) + DestroyDestroy(2,1)) // pairing terms
var identity_term = alpha*Identity()
var quadratic_terms = transfer_terms + pairing_terms + identity_term // quadratic terms
// Build the relevant operators
var transfer_sum = TransferSum(transfer_terms)
var pairing_sum = PairingSum(pairing_terms)
var quadratic_sum = QuadraticSum(quadratic_terms)
// Obtain quantities of interest
var bdg_matrix_hopping = transfer_sum.get_bdg_matrix()
var bdg_shift_hopping = transfer_sum.get_bdg_shift()
var bdg_matrix_pairing = pairing_sum.get_bdg_matrix()
var bdg_shift_pairing = pairing_sum.get_bdg_shift() // Always zero
var bdg_matrix_quadratic = quadratic_sum.get_bdg_matrix()
var bdg_shift_quadratic = quadratic_sum.get_bdg_shift()
In the code snippet above it holds true that bdg_matrix_hopping + bdg_matrix_pairing == bdg_matrix_quadratic and that bdg_shift_quadratic == bdg_shift_pairing + bdg_shift_hopping + alpha. The Bogoliubov-de Gennes matrix and the corresponding energy shift can then be used to find the quasiparticle energies and quasiparticle eigenmodes .
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
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 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.
The single-particle sector is characterized by the property . Terms such as 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 , 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
where . As such, one may represent a single-particle state with a vector of coefficients . 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 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 of size by . In Aleph, a single-particle operator can be created either by directly specifying the matrix 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.