The Algebra of Vector Calculus: Mastering the Levi-Civita Symbol
Index notation and tensor algebra

The Algebra of Vector Calculus: Mastering the Levi-Civita Symbol

June 26, 2026·
Agustin Arias, MSc
Agustin Arias, MSc
· 5 min read
blog

Through countless hours spent working through electromagnetism and fluid dynamics, I have learned that classic vector calculus identities often hide algebraic elegances that brute-force matrix determinant methods tend to overlook.

Memorizing formulas for the curl of a cross product or the divergence of a curl is tedious and prone to sign errors. Today, we look at a more rigorous approach: using index notation and the Levi-Civita symbol to reduce complex vector calculus operations into straightforward algebraic derivations.

The Problem with Traditional Vector Calculus

When faced with an expression like $\nabla \times (\nabla \times \mathbf{A})$, the standard approach is to write out massive determinant expansions for each cross product. This quickly becomes an unreadable mess of partial derivatives, $x$, $y$, and $z$ components, and arbitrary minus signs.

By switching to Einstein summation convention and index notation, we can abandon coordinate-specific expansions and prove vector identities strictly through symmetry and algebra.

Defining the Levi-Civita Symbol

The Levi-Civita symbol, $\epsilon_{ijk}$, is a totally anti-symmetric mathematical object used in three-dimensional space to represent the cross product. Its value depends entirely on the sequence of its indices ($i, j, k \in \{1, 2, 3\}$).

$$ \epsilon_{ijk} = \begin{cases} +1 & \text{if } (i, j, k) \text{ is an even permutation of } (1, 2, 3) \\ -1 & \text{if } (i, j, k) \text{ is an odd permutation of } (1, 2, 3) \\ 0 & \text{if any index is repeated} \end{cases} $$
  • Even permutations (cyclic): $\epsilon_{123} = \epsilon_{231} = \epsilon_{312} = 1$
  • Odd permutations (anti-cyclic): $\epsilon_{132} = \epsilon_{213} = \epsilon_{321} = -1$
  • Repeated indices: $\epsilon_{112} = \epsilon_{222} = 0$

Using this symbol, the $i$-th component of a cross product $\mathbf{C} = \mathbf{A} \times \mathbf{B}$ is written concisely as:

$$C_i = \epsilon_{ijk} A_j B_k$$

(Note: We are using the Einstein summation convention, meaning repeated indices like $j$ and $k$ are implicitly summed over from 1 to 3).

The Fundamental Identity

To calculate combinations of curls and cross products, we need to multiply two Levi-Civita symbols together. The most important identity in vector algebra relates the product of two Levi-Civita symbols that share a single dummy index (in this case, $i$) to a combination of Kronecker deltas ($\delta$):

$$\epsilon_{ijk} \epsilon_{ilm} = \delta_{jl}\delta_{km} - \delta_{jm}\delta_{kl}$$

This identity is the engine that drives all complex vector calculus derivations. Let’s see it in action.


Application 1: The Curl of a Curl

Let’s derive the identity for $\nabla \times (\nabla \times \mathbf{A})$.

1. Setting up the Index Notation

First, write the outer curl. The $i$-th component is:

$$[\nabla \times (\nabla \times \mathbf{A})]_i = \epsilon_{ijk} \partial_j (\nabla \times \mathbf{A})_k$$

Now, substitute the inner curl, which has the index $k$:

$$[\nabla \times (\nabla \times \mathbf{A})]_i = \epsilon_{ijk} \partial_j (\epsilon_{klm} \partial_l A_m)$$

2. Rearranging and Applying the Identity

Since constants and symbols commute, we can pull $\epsilon_{klm}$ to the front. We also need to rearrange the indices of $\epsilon_{ijk}$ to match the shared index $k$ in the first position. Since cyclic permutations don’t change the sign: $\epsilon_{ijk} = \epsilon_{kij}$.

$$= \epsilon_{kij} \epsilon_{klm} \partial_j \partial_l A_m$$

Now apply the fundamental identity ($\epsilon_{kij} \epsilon_{klm} = \delta_{il}\delta_{jm} - \delta_{im}\delta_{jl}$):

$$= (\delta_{il}\delta_{jm} - \delta_{im}\delta_{jl}) \partial_j \partial_l A_m$$

3. Contracting the Tensors

Distribute the derivative terms. The Kronecker delta $\delta_{jm}$ forces $j = m$, collapsing the sum:

$$= \delta_{il}\delta_{jm} \partial_j \partial_l A_m - \delta_{im}\delta_{jl} \partial_j \partial_l A_m$$$$= \partial_m \partial_i A_m - \partial_j \partial_j A_i$$

4. Translating Back to Vector Form

Now we map this back to standard notation.

  • $\partial_m A_m$ is the divergence $\nabla \cdot \mathbf{A}$, and $\partial_i$ makes it the gradient of that divergence: $\nabla(\nabla \cdot \mathbf{A})$.
  • $\partial_j \partial_j$ is the Laplacian operator $\nabla^2$ acting on $A_i$.
$$\boxed{\nabla \times (\nabla \times \mathbf{A}) = \nabla(\nabla \cdot \mathbf{A}) - \nabla^2 \mathbf{A}}$$

Application 2: Divergence of a Cross Product

Let’s derive the identity for $\nabla \cdot (\mathbf{A} \times \mathbf{B})$.

1. Setting up the Index Notation

The divergence is a dot product with the del operator, which means a single derivative applied to a vector with a matching index:

$$\nabla \cdot (\mathbf{A} \times \mathbf{B}) = \partial_i (\mathbf{A} \times \mathbf{B})_i$$

Substitute the cross product definition:

$$= \partial_i (\epsilon_{ijk} A_j B_k)$$

2. Applying the Product Rule

The Levi-Civita symbol is a constant matrix, so it ignores the derivative. We apply the standard product rule to the vector components:

$$= \epsilon_{ijk} [(\partial_i A_j) B_k + A_j (\partial_i B_k)]$$

$$= \epsilon_{ijk} (\partial_i A_j) B_k + \epsilon_{ijk} A_j (\partial_i B_k)$$

3. Rearranging to Identify Curls

Our goal is to recognize the structure of a curl, which requires the derivative index to precede the vector index ($\epsilon_{abc} \partial_b V_c$).

For the first term, we can cyclically permute $\epsilon_{ijk} \rightarrow \epsilon_{kij}$:

$$\epsilon_{kij} B_k (\partial_i A_j) = B_k (\epsilon_{kij} \partial_i A_j)$$

Notice that the term in parentheses is exactly the $k$-th component of $\nabla \times \mathbf{A}$. So this is $\mathbf{B} \cdot (\nabla \times \mathbf{A})$.

For the second term, we swap $i$ and $j$ to match the curl structure for $\mathbf{B}$. Swapping two indices creates an odd permutation, which introduces a minus sign: $\epsilon_{ijk} = -\epsilon_{jik}$.

$$-\epsilon_{jik} A_j (\partial_i B_k) = -A_j (\epsilon_{jik} \partial_i B_k)$$

The term in parentheses is the $j$-th component of $\nabla \times \mathbf{B}$. So this is $-\mathbf{A} \cdot (\nabla \times \mathbf{B})$.

Final Solution

Combining the two terms yields the final identity:

$$\boxed{\nabla \cdot (\mathbf{A} \times \mathbf{B}) = \mathbf{B} \cdot (\nabla \times \mathbf{A}) - \mathbf{A} \cdot (\nabla \times \mathbf{B})}$$

This demonstrates how switching to index notation reduces the need for rote memorization, turning a complex geometric operation into a mechanical, algebraic process.

Agustin Arias, MSc
Authors
AI Architect & Applied Mathematician
I bridge the gap between high-level mathematics and autonomous reasoning. I engineer verifiable AI systems that optimize token budgets and eliminate reasoning fragility, allowing companies to scale agentic fleets without unsupervised errors. Architectural Sovereignty is not a buzzword—it is the discipline of building AI that reasons, not hallucinates.