Second quantization#
Fock space#
Consider a system of electrons in \(M\) spin orbitals. An occupation number vector lists the spin-orbital occupation
where the occupation numbers, \(k_p\), are restricted to 0 or 1.
The Fock space, \(F(M)\), is defined as the vector space of all possible occupation vectors.
There is a unique mapping between occupation number vectors and Slater determinants, but the Fock space includes states with different number of electrons.
The Fock space is a linear vector space with the following properties:
occupation number vectors are orthonormal
\[ \langle \mathbf{k} | \mathbf{m} \rangle = \prod_{p=1}^{M} \delta_{k_p m_p} \]the identity operator can be written as
\[ \hat{I} = \sum_\mathbf{k} | \mathbf{k} \rangle \langle \mathbf{k} | \]it can be partitioned into sub-spaces according to
\[ F(M) = F(0,M) \oplus F(1,M) \oplus \cdots \oplus F(M,M) \]where \(F(N, M)\) is the set of occupation number vectors with \(N\) occupied spin-orbitals.
subspace \(F(0, M)\) corresponds to a completely unoccupied Slater determinant known as the vacuum state, \(| \mathrm{vac} \rangle\). For the vacuum state, we have
\[\begin{equation*} | \mathrm{vac} \rangle = | 0_1 0_2 \ldots 0_M \rangle ; \qquad \langle \mathrm{vac} | \mathrm{vac} \rangle = 1 \end{equation*}\]
Creation and annihilation operators#
Second quantization introduces a convenient way to manipulate states by means of creation and annihilation operators. As their name imply, these operators create and destroy electrons in specific spin-orbitals as follows
creation operator \(\hat{a}_p^\dagger\):
annihilation operator \(\hat{a}_p\):
where the factor \(\delta_{k_p 0}\) prevents the addition of an electron to a state that is already populated and \(\delta_{k_p 1}\) prevents the destruction of a non-existing electron.
The phase factor \(\prod_{i = 1}^{p} (-1)^{k_p}\) ensures the anti-symmetry of the associated wave function and it is a direct consequence of the anti-commutator relationships:
Let us consider the closed-shell ground state for a system with four electrons in five molecular orbitals, or ten spin orbitals,
import numpy as np
M = 10 # number of spin orbitals in our Fock space
We implement a class of occupation number vectors.
class OccupationNumberVector:
def __init__(self, occ_orbs=[]):
self.phase = 1
self.occ_num_vec = np.zeros(M, dtype=int)
for i in occ_orbs:
self.occ_num_vec[i] = 1
def __mul__(self, other):
if np.array_equal(self.occ_num_vec, other.occ_num_vec):
inner_prod = self.phase * other.phase
else:
inner_prod = 0
return inner_prod
def creation(self, p):
if len(self.occ_num_vec) == 0:
return
if self.occ_num_vec[p] == 1:
self.occ_num_vec = []
else:
self.phase *= np.prod((-1) ** self.occ_num_vec[:p])
self.occ_num_vec[p] = 1
def annihilation(self, p):
if len(self.occ_num_vec) == 0:
return
if self.occ_num_vec[p] == 0:
self.occ_num_vec = []
else:
self.phase *= np.prod((-1) ** self.occ_num_vec[:p])
self.occ_num_vec[p] = 0
The ground state can formed by applying a series of creation operators on the vacuum state
ket = OccupationNumberVector()
for i in [3, 2, 1, 0]:
ket.creation(i)
print("ground state:", ket.occ_num_vec)
ground state: [1 1 1 1 0 0 0 0 0 0]
One-electron operators#
A one-electron operator takes the form
where
One-particle density#
The one-particle density matrix becomes
bra = OccupationNumberVector([0, 1, 2, 3])
D = np.zeros((M, M), dtype=int)
for p in range(M):
for q in range(M):
ket = OccupationNumberVector([0, 1, 2, 3])
ket.annihilation(q)
ket.creation(p)
D[p, q] = bra * ket
print("One-particle denisty matrix:\n", D)
One-particle denisty matrix:
[[1 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
Two-electron operators#
A two-electron operator takes the form
where, in the physicist’s notation,
Hamiltonian#
The Hamiltonian becomes
where, in the chemist’s notation,
Here \(\phi_p\) is the spatial part (MO) of spin orbital \(\psi_p\) and the Kronecker deltas are the result of the spin integration.
Illustration#
The energy of a single-determinant state equals
We thus need to evaluate the one- and two-particle density matrices.
For the one-electron term, we notice that orbital \(q\) has to be occupied to obtain a nonzero result as the annihilation operator acts to the right on \(| 0\rangle\). Using the anti-commutator relation, we get
This results in
For the two-electron term, we notice that orbitals \(q\) and \(s\) both have to be occupied to obtain a nonzero result. We focus on \(s\) and will use the same trick to move \(\hat{a}_i\) to the left
The last term will vanish in the expectation value and we are left with only terms involving only pairs of creation or annihilation operators. We get
and the total energy thus becomes equal to