Category Archives: Personal research

Calculations on Quantum Cuboids and the EPRL-FK path integral for quantum gravity

This week I have been studying a really great paper looking at Quantum Cuboids and path-integral calculations for the EPRL vertex in LQG and also beginning to write some calculational software tools for performing these calculations using Sagemath.

In this work the authors investigate the 4d path integral for Euclidean quantum gravity on a hypercubic lattice, as given by the EPRL-FK model. To tackle the problem, they restrict the path to a set of quantum geometries that reflects the lattice symmetries. In particular, the sum over intertwiners is restricted to quantum cuboids, that is,  coherent intertwiners which describe a cuboidal
geometry in the large-j limit.

Using asymptotic expressions for the vertex amplitude, several interesting properties of the state sum are found.

  • The value of coupling constants in the amplitude functions determines whether geometric or non-geometric configurations dominate the path integral.
  • There is a critical value of the coupling constant α, which separates two phases.  In one phase the main contribution
    comes from very irregular and crumpled states. In the other phase, the dominant contribution comes from a highly regular configuration, which can be interpreted as flat Euclidean space, with small non-geometric perturbations around it.
  • States which describe boundary geometry with high
    torsion have exponentially suppressed physical norm.

The symmetry-restricted state sum

Will work on a regular hypercubic lattice in 4d. On this lattice consider only states which conform to the lattice symmetry. This is a condition on the intertwiners, which  corresponds to cuboids.
A cuboid is completely determined by its three edge lengths, or equivalently by its three areas.


All internal angles are π/2 , and the condition of regular cuboids on all dual edges of the lattice result in a high degree of symmetries on the labels: The area and hence the spin on each two parallel squares of the lattice which are translations perpendicular to the squares, have to be equal.

The high degree of symmetry will make all quantum geometries flat. The analysis carried out here is therefore not suited for describing local curvature.


The plan of the paper is as follows:

  • Review of the EPRL-FK spin foam model
  • Semiclassical regime of the path integral
  • Construction of the quantum cuboid intertwiner
  • Full vertex amplitude, in particular describe its asymptotic expression for large spins
  • Numerical investigation of the quantum path integral

The spin foam state sum  employed is the Euclidean EPRL-FK model with Barbero-Immirzi parameter γ < 1. The EPRL-FK model is defined on an arbitrary 2-complexes. A 2-complex 􀀀 is determined by its vertices v, its edges e connecting two vertices, and faces f which are bounded by the edges.

The path integral is formulated as a sum over states. A state in this context is given by a collection of spins –  irreducible representations
jf ∈ 1/2 N of SU(2) to the faces, as well as a collection of intertwiners ιe on edges.

The actual sum is given by


where Af , Ae and Av are the face-, edge- and vertex- amplitude functions, depending on the state. The sum has to be carried out over all spins, and over an orthonormal orthonormal basis in the intertwiner space at each edge.

The allowed spins jf in the EPRL-FK model are such
that jf are both also half-integer spins.

The face amplitudes are either


The edge amplitudes Ae are usually taken to be equal to 1.

In Sagemath code this looks like:


Coherent intertwiners

In this paper, the space-time manifold used is  M∼ T³×[0, 1] is the product of the 3-torus T3 and a closed interval. The space is compactified toroidally. M is covered by 4d hypercubes, which
form a regular hypercubic lattice H.There is a vertex for each hypercube, and two vertices are connected by an edge whenever two hypercubes intersect ina 3d cube. The faces of 􀀀 are dual to squares in H, on which four hypercubes meet.The geometry will be encoded in the state, by specification of spins jf
and intertwiners ιe.


Intertwiners ιe can be given a geometric interpretation in terms of polyhedra in R³. Given a collection of spins j1, . . . jn and vectors n1, . . . nn which close closure. Can define the coherent polyhedron


The geometric interpretation is that of a polyhedron, with face areas jf and face normals ni. The closure condition ensures that such a polyhedron exists.

We are interested in the large j-regime of the quantum cuboids. In this limit, these become classical cuboids  which are completely specified by their three areas. Therefore, a
semiclassical configuration is given by an assignment of
areas a = lp² to the squares of the hypercubic lattice.

Denote the four directions in the lattice by x, y, z, t. The areas satisfy


The two constraints which reduce the twisted geometric
configurations to geometric configurations are given by:


For a non-geometric configuration, define the 4-volume of a hypercube as:


Define the four diameters to be:


then we have, V4 = dxdydzdt

We also define the non- geometricity as:


as a measure of the deviation from the constraints.

In sagemath code this looks like:


Quantum Cuboids

We let’s look at  the quantum theory. In the 2-complex, every edge has six faces attached to it, corresponding to the six faces of the cubes. So any intertwiner in the state-sum will be six-valent, and therefore can be described by a coherent polyhedron with six faces. In our setup, we restrict the state-sum to coherent cuboids, or quantum cuboids. A cuboid is characterized by areas on opposite sides of the cuboid being equal, and the respective normals being negatives of one another


The state ιj1,j2,j3 is given by:


The vertex amplitude for a Barbero-Immirzi parameter γ < 1 factorizes as Av = A+vAv with


with the complex action


where, a is the source node of the link l, while b is its target node.

Large j asymptotics
The amplitudes A±v possess an asymptotic expression for large jl. There are two distinct stationary and critical points, satisfying the equations.

cuboidequ15for all links ab . Using the convention shown below

cuboidfig4having fixed g0 = 1, the two solutions Σ1 and Σ2 are


The amplitudes A±satisfy, in the large j limit,


In the large j-limit, the norm squared of the quantum cuboid states is given by:


For the state sum, in the large-j limit on a regular hypercubic lattice:


In sagemath code this looks like:






Related articles


Numerical work with python 27: Wigner d matrix

This week I been working on a  python program for calculating the  wigner d matrix and displaying the real and imaginary parts. Below I have posted some of the images produced by this program:















This looks great when animated:




below is the python program for these diagrams.

from scipy.special import jv, legendre, sph_harm, jacobi
from scipy.misc import factorial, comb
from numpy import floor, sqrt, sin, cos, exp, power
from math import pi

def wignerd(j,m,n=0,approx_lim=10):
Wigner “small d” matrix. (Euler z-y-z convention)
j = 2
m = 1
n = 0
beta = linspace(0,pi,100)
wd210 = wignerd(j,m,n)(beta)

some conditions have to be met:
j >= 0
-j <= m <= j
-j <= n <= j

The approx_lim determines at what point
bessel functions are used. Default is when:
j > m+10
j > n+10

for integer l and n=0, we can use the spherical harmonics. If in
addition m=0, we can use the ordinary legendre polynomials.

if (j < 0) or (abs(m) > j) or (abs(n) > j):
raise ValueError(“wignerd(j = {0}, m = {1}, n = {2}) value error.”.format(j,m,n) \
+ ” Valid range for parameters: j>=0, -j<=m,n<=j.”)

if (j > (m + approx_lim)) and (j > (n + approx_lim)):
#print ‘bessel (approximation)’
return lambda beta: jv(m-n, j*beta)

if (floor(j) == j) and (n == 0):
if m == 0:
#print ‘legendre (exact)’
return lambda beta: legendre(j)(cos(beta))
elif False:
#print ‘spherical harmonics (exact)’
a = sqrt(4.*pi / (2.*j + 1.))
return lambda beta: a * conjugate(sph_harm(m,j,beta,0.))

jmn_terms = {
j+n : (m-n,m-n),
j-n : (n-m,0.),
j+m : (n-m,0.),
j-m : (m-n,m-n),

k = min(jmn_terms)
a, lmb = jmn_terms[k]

b = 2.*j – 2.*k – a

if (a < 0) or (b < 0):
raise ValueError(“wignerd(j = {0}, m = {1}, n = {2}) value error.”.format(j,m,n) \
+ ” Encountered negative values in (a,b) = ({0},{1})”.format(a,b))

coeff = power(-1.,lmb) * sqrt(comb(2.*j-k,k+a)) * (1./sqrt(comb(k+b,b)))

#print ‘jacobi (exact)’
return lambda beta: coeff \
* power(sin(0.5*beta),a) \
* power(cos(0.5*beta),b) \
* jacobi(k,a,b)(cos(beta))
def wignerD(j,m,n=0,approx_lim=10):
Wigner D-function. (Euler z-y-z convention)

This returns a function of 2 to 3 Euler angles:
(alpha, beta, gamma)

gamma defaults to zero and does not need to be

The approx_lim determines at what point
bessel functions are used. Default is when:
j > m+10
j > n+10

from numpy import linspace, meshgrid
a = linspace(0, 2*pi, 100)
b = linspace(0, pi, 100)
aa,bb = meshgrid(a,b)
j,m,n = 1,1,1
zz = wignerD(j,m,n)(aa,bb)

return lambda alpha,beta,gamma=0: \
exp(-1j*m*alpha) \
* wignerd(j,m,n,approx_lim)(beta) \
* exp(-1j*n*gamma)
if __name__ == ‘__main__’:
just a bunch of plots in (phi,theta) for
integer and half-integer j and where m and
n take values of [-j, -j+1, …, j-1, j]

Note that all indexes can be any real number
with the conditions:
j >= 0
-j <= m <= j
-j <= n <= j
from matplotlib import pyplot, cm, rc
from numpy import linspace, arange, meshgrid, real, imag, arccos

rc(‘text’, usetex=False)

ext = [0.,2.*pi,0.,pi]

phi = linspace(ext[0],ext[1],200)
theta = linspace(ext[2],ext[3],200)

pphi,ttheta = meshgrid(phi,theta)

# The maximum value of j to plot. Will plot real and imaginary
# distributions for j = 0, 0.5, … maxj
maxj = 2.0

for j in arange(0,maxj+.1,step=0.5):

fsize = (j*2+3,j*2+3)
title = ‘WignerD(j,m,n)(phi,theta)’
if j == 0:
fsize = (4,4)
title += ‘, j = ‘+str(j)

figr = pyplot.figure(figsize=fsize)
figr.suptitle(r’Real Part of ‘+title)

figi = pyplot.figure(figsize=fsize)
figi.suptitle(r’Imaginary Part of ‘+title)

for fig in [figr,figi]:

if j == 0:
if j == 0.5:
if j == 1:
if j == 1.5:
if j == 2:

if j != 0:
axtot = fig.add_subplot(1,1,1)





nplts = 2*j+1

for m in arange(-j,j+0.1,step=1):
for n in arange(-j,j+0.1,step=1):
print j,m,n
zz = wignerD(j,m,n)(pphi,ttheta)
i = n+j + nplts*(j-m)

for fig,data in zip((figr,figi), (real(zz),imag(zz))):

ax = fig.add_subplot(nplts, nplts, i+1, projection=’polar’)
plt = ax.pcolormesh(pphi,ttheta,data.copy(),
vmin=-1., vmax=1.)

if j == 0:

ax.grid(True, alpha=0.5)
ax.set_title(r’j,m,n = (0,0,0)’, position=(0.5,1.1), size=12)
ax.set_ylabel(r’$\theta$’, rotation=’horizontal’, va=’bottom’)
ax.xaxis.set_ticklabels([‘0′,r’$\frac{\pi}{4}$’,r’$\frac{\pi}{2}$’,r’$\frac{3 \pi}{4}$’,r’$\pi$’,r’$\frac{5 \pi}{4}$’,r’$\frac{3 \pi}{2}$’,r’$\frac{7 \pi}{4}$’], size=14)
ax.yaxis.set_ticklabels([‘0′,r’$\frac{\pi}{4}$’,r’$\frac{\pi}{2}$’,r’$\frac{3 \pi}{4}$’,r’$\pi$’], size=14)


if j == 0:
fig.colorbar(plt, pad=0.07)
# uncomment the following if you want to save these to image files
#figr.savefig(‘wignerD_j’+str(j)+’_real.png’, dpi=150)
#figi.savefig(‘wignerD_j’+str(j)+’_imag.png’, dpi=150)
print ‘j_data=’,data_j
#print ‘zz_data=’, data_zz


Related posts

Numerical work using mathematica 26: The Gauge invariant area operator in the flux formulation of LQG

This week I been following up the posts:

The starting point is to take the action of the area operator in the spin representation, and to consider the following normalized trace of the area operator:

gauge invariant

If this give a well-defined operator on either the kinematical Hilbert space or on the Hilbert space of fully gauge-invariant wave functions, and also if we took the limit Λfix →∞ it is possible to  read off the spectrum from the representation. There, the oscillatory behaviour of the sine function is suppressed by a factor of 1/dwhich leads to a discrete spectrum for sufficiently small spins j.



Mathematica code for the normalized trace of the gauge invariant area operator for μ = 0.1 and j=1…100.

And below the figure from the original paper, A new realization of quantum geometry.




Mathematica code for the normalized trace of the gauge invariant area operator for μ = 0.3 and j=1…100.

And below the figure from the original paper, A new realization of quantum geometry.




Mathematica code for the normalized trace of the gauge invariant area operator for μ = 0.05, 0.1 and 0.3 and j=1…100

Related posts



Numerical work with sagemath 25: The Wigner D matrix

This week I have been studying the paper ‘A New Realisation of Quantum Geometry’. I’ll review the paper in the next post and follow up that with an analysis of the area operator in  the SU(2) case.

What I’m posting at the moment is some exploratory work looking at the behaviour of the Wigner D matrix elements and U(1)area operator using python and sagemath.

Below I look at the general behaviour of the Wigner D matrix elements:



Below  Here I  look at the behaviour of the spectrum of the area operator with U(1).



Below I look at the how the area varies with μ for the values 0.1, 0.3, 0.5:



Numerical work with sagemath 24: 6j Symbols and non-eucledean Tetrahedra

This week I have begun to look at Hyperbolic Tetrahedra and their geometry. In the paper ‘6j Symbols for Uq and non-eucledean Tetrahedra‘, Taylor and Woodward  relate the semiclassical asymptotics of the 6j symbols for the  quantized enveloping algebra Uq(sl2) to the geometry of spherical and  hyperbolic tetrahedra.

The quantum 6j symbol is a function of a 6-tuple jab, 1 ≤ a ≤ b ≤ 4. The 6j symbols

6jsym6j for q = 1 were introduced as a tool in atomic spectroscopy
by Racah, and then studied mathematically by Wigner. 6j symbols
for Uq(sl2) were introduced by Kirillov and Reshetikhin, who used them to generalize the Jones knot invariant. Turaev and Viro used them to define three manifold invariants or  quantum gravity with a cosmological constant.



I have started doing some preliminary work with sagemath on 3j symbols, 6j symbols, the quantum integer and on the gram matrix.

graph 1 program6jvsj graph1

graph 2 program

quantumnvsn graph2


graph 3 program

3jvsj3 graph3

graph 4 program

ampltudevsj graph4


gram matrix

 Related articles

Numerical work with sagemath 23: Wigner Reduced Rotation Matrix Elements as Limits of 6j Symbols

This work is based on the paper “Exact Computation and Asymptotic Approximations of 6j Symbols: Illustration of Their Semiclassical Limits by Mirco Ragni et al which I’ll be reviewing in my next post.

The 6j symbols tend asymptotically to Wigner dlnm functions when some angular momenta are large where θ assumes certain discrete values.







These formulas are illustrated below:




This can be modelled using sagemath.


The routine gives some great results:

For N=320, M=320, n=0, m=0, l=20, L=0,  Lmax=640

Wigner 6j vs cosθL


For N=320, M=320, n=0, m=0, l=10, L=0,  Lmax=640

Wigner 6j vs cosθL


For N=320, M=320, n=0, m=0, l=5, L=0,  Lmax=640

Wigner 6j vs cosθL



Numerical work with sagemath 22: The Hypergeometric function

In order to follow up some work on the the last two posts I have been looking at  the capabilities of Sagemath with regard to calculating hypergeometric functions:

Fortunately sagemath can implement at number of great codes for hypergeometric functions including:

These give excellent results:





The ability to use mpmath code is very useful since it enables me to calculate a wide range of hypergeometric functions as can be seen on the reference pages. I’ll be using this over the coming posts starting with :

Exact Computation and Asymptotic Approximations of 6j Symbols:
Illustration of Their Semiclassical Limits which is in preparation.

Related articles