Search Knowledge

© 2026 LIBREUNI PROJECT

Mathematics / Geometry & Topology

Riemannian Geometry & Curvature

Riemannian Geometry & Curvature

Riemannian geometry provides the rigorous mathematical framework for understanding “curved” spaces by equipping a differentiable manifold with a local notion of distance and angle. While differential geometry deals with properties invariant under diffeomorphism, Riemannian geometry introduces the metric tensor, allowing for the measurement of lengths, areas, and volumes.

1. The Riemannian Metric

A Riemannian metric on a smooth manifold is a correspondence that associates to each point a symmetric, positive-definite bilinear form . In local coordinates , the metric tensor is expressed as:

where . The requirement of positive definiteness ensures that for any non-zero vector , the “squared length” . This inner product allows us to define the length of a curve :

2. The Levi-Civita Connection

To differentiate vector fields on a manifold, we require a connection . On a Riemannian manifold, there exists a unique affine connection, known as the Levi-Civita connection, which satisfies two fundamental properties:

  1. Metric Compatibility: The metric is parallel-transported by the connection, . Specifically, for any vector fields :
  2. Torsion-Free: The torsion tensor vanishes everywhere.

These properties allow us to uniquely determine the connection in terms of the metric via the Koszul formula:

3. Christoffel Symbols

In local coordinates, the action of the connection is captured by the Christoffel symbols , defined by . From the Levi-Civita properties, we derive:

where is the inverse of the metric tensor . Note that while carries indices, it is not a tensor; it does not transform linearly under coordinate changes.

4. Parallel Transport and Geodesics

A vector field along a curve is parallel if . This generalizes the notion of “keeping a vector constant” to curved manifolds.

Geodesics are curves that “go as straight as possible.” Formally, a curve is a geodesic if its velocity vector is parallel along itself: . In local coordinates, this yields the Geodesic Equation:

As explored in Lesson 64 (Calculus of Variations), geodesics are the critical points of the energy functional . For Riemannian metrics, these curves locally minimize the distance between points.

5. Curvature Tensors

Curvature measures the failure of the manifold to be locally Euclidean. The primary object is the Riemann Curvature Tensor , defined by:

In component form:

Contractions of Curvature

  1. Ricci Tensor: . In General Relativity, this tensor (minus half the scalar curvature) is coupled to the energy-momentum tensor.
  2. Scalar Curvature: , the simplest scalar invariant of the curvature.

6. Sectional Curvature

For any 2-dimensional subspace spanned by , the sectional curvature is:

This generalizes the Gaussian curvature of surfaces. A Riemannian manifold has constant sectional curvature if and only if .

7. The Gauss-Bonnet Theorem

The Gauss-Bonnet theorem is a profound link between local geometry (curvature) and global topology. For a compact 2-dimensional Riemannian manifold with boundary :

where is the Gaussian curvature, is the geodesic curvature of the boundary, and is the Euler characteristic. This implies that the total curvature is determined solely by the topology of the manifold.

Python Implementation: Symbolic Christoffel Symbols

The following script uses sympy to compute the Christoffel symbols for a 2-sphere metric: .

import sympy as sp

# Define coordinates and metric
theta, phi = sp.symbols('theta phi')
coords = [theta, phi]

# Metric tensor for a unit sphere
g = sp.Matrix([[1, 0], [0, sp.sin(theta)**2]])
ginv = g.inv()

def get_christoffel(i, j, k):
    """Computes Gamma^k_{ij}"""
    res = 0
    for l in range(len(coords)):
        term = 0.5 * ginv[k, l] * (
            sp.diff(g[j, l], coords[i]) + 
            sp.diff(g[i, l], coords[j]) - 
            sp.diff(g[i, j], coords[l])
        )
        res += term
    return sp.simplify(res)

# Calculate and display non-zero symbols
for k in range(2):
    for i in range(2):
        for j in range(i, 2): # Symmetric in i, j
            val = get_christoffel(i, j, k)
            if val != 0:
                print(f"Gamma^{coords[k]}_{{{coords[i]}{coords[j]}}} = {val}")

# Expected Output:
# Gamma^theta_{phi phi} = -sin(theta)*cos(theta)
# Gamma^phi_{theta phi} = cot(theta)
Conceptual Check

Which property uniquely distinguishes the Levi-Civita connection among all affine connections?

Conceptual Check

In the context of the Einstein Field Equations, what does the Ricci tensor R_{ij} represent?

Conceptual Check

According to the Gauss-Bonnet theorem, if a compact surface has a constant positive sectional curvature, what can we conclude about its topology?