Skip to main content
Try out the RareSkills ZK AI Tutor!
The RareSkills Book of Zero Knowledge

Proof that the Inverse of a Vandermonde Matrix Is Another Vandermonde Matrix

Last updated on May 2, 2026

In the previous chapter on the Inverse Number Theoretic Transform, we claimed that the inverse of the Vandermonde matrix V(ω) for a primitive k-th root of unity ω is also a Vandermonde matrix, given by 1kV(ω−1). We now prove this fact.

Less mathematically inclined readers can skip this chapter without any loss. It is not necessary to understand the INTT, provided they accept that our proposed inverse matrix is valid.

The Vandermonde matrix is defined as a matrix where each row is a geometric progression.

  • The first row is the geometric progression of ω0 from (ω0)0 to (ω)k−1.
  • The second row is the geometric progression of ω1 from (ω1)0 to (ω1)k−1.
  • This continues until the last row, which is the geometric progression of ωk−1 from (ωk−1)0 to (ωk−1)k−1.
V(ω)=[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω1)0(ω1)1(ω1)2⋯(ω1)k−1(ω2)0(ω2)1(ω2)2⋯(ω2)k−1⋮⋮⋮⋱⋮(ωk−1)0(ωk−1)1(ωk−1)2⋯(ωk−1)k−1].

Thus, each entry in row i and column j of V(ω) is given by

(ωi)j

Consider a polynomial f(x) of degree at most k−1, given by

f(x)=a0+a1x+a2x2+⋯+ak−1xk−1

Let S be the set consisting of the k-th roots of unity generated by a primitive k-th root:

S={ω0,ω1,ω2,⋯ωk−1}

The vector of evaluations of f(x) on the set S,

𝐲=[f(ω0)f(ω1)f(ω2)⋮f(ωk−1)]

can be obtained by multiplying the coefficient vector 𝐚 by V(ω):

\mathbf{y}= V(\omega) \cdot \mathbf{a}\
[f(ω0)f(ω1)f(ω2)⋮f(ωk−1)]=[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω1)0(ω1)1(ω1)2⋯(ω1)k−1(ω2)0(ω2)1(ω2)2⋯(ω2)k−1⋮⋮⋮⋱⋮(ωk−1)0(ωk−1)1(ωk−1)2⋯(ωk−1)k−1][a0a1a2⋮ak−1]

where a0,a1,...,ak−1 are the coefficients of the polynomial f(x).

Each row on the left-hand side is the inner product of the i-th row of the Vandermonde matrix and the vector 𝐚. For instance, the i-th element f(ωi) is

f(ωi)=⟨[(ωi)0,(ωi)1,…,(ωi)k−1],𝐚⟩=(ωi)0a0+(ωi)1a1+…+(ωi)k−1ak−1=ωi0a0()+ωi1a1()+…+ωi(k−1)ak−1

Thus, the evaluations can be written as

f(ωi)=∑j=0k−1ωijaj

for i∈{0,1,2,...,k−1}.

Note on indices: In the equation above, we have two indices. The index i indicates which evaluation we are dealing with, and it can take the values 0,1,2,…,k−1. This means that the formula above represents not just one equation, but k equations, one for each value of i. For instance, the notation above is a shorthand for

f(ω0)=∑j=0k−1ω0jajf(ω1)=∑j=0k−1ω1jaj⋮f(ωk−1)=∑j=0k−1ω(k−1)jaj

The index j in ωij and aj is a summation index and therefore “consumed” by the sum. Because it is consumed by the sum, it does not appear on the left-hand side of the equation. The choice of the indices i and j is arbitrary; we could have used m,n,p,q or any other letters. In general, for vector indices, it is common to use letters from the middle of the alphabet.

Now we want to find the inverse relation to obtain the vector 𝐚 from the vector 𝐲. In other words, we want to calculate 𝐚=V−1(ω)⋅𝐲, where V−1(ω) is the inverse of V(ω).

Our claim is that the inverse of the Vandermonde matrix V(ω) is also a Vandermonde matrix, given by 1kV(ω−1).

To be completely clear, our claim is that

V−1(ω)=1kV(ω−1)

where ω is a primitive k-th root of unity.

If the claim is correct, the vector 𝐚 can be calculated as follows:

𝐚=1kV(ω−1)⋅𝐲
[a0a1⋮ai⋮ak−1]=1k[(ω0)0(ω0)1⋯(ω0)k−1(ω−1)0(ω−1)1⋯(ω−1)k−1⋮⋮⋱⋮(ω−i)0(ω−i)1⋯(ω−i)k−1⋮⋮⋱⋮(ω−(k−1))0(ω−(k−1))1⋯(ω−(k−1))k−1][f(ω0)f(ω1)⋮f(ωk−1)]

The component ai is the inner product between the i-th row of 1kV(ω−1) and the vector 𝐲:

ai=1k[(ω−i)0(ω−i)1⋯(ω−i)k−1]⋅[f(ω0)f(ω1)⋮f(ωk−1)]=1k(ω−i)0f(ω0)+1k(ω−i)1f(ω1)+…+1k(ω−i)k−1f(ωk−1)=1kω−i0f(ω0)()+1kω−i1f(ω1)()+…+1kω−i(k−1)f(ωk−1)

This operation can be written as the following sum:

ai=∑m=0k−11kω−imf(ωm)

for i∈{0,1,2,...,k−1}.

For pedagogical reasons, we will prove our claim - that the inverse of the Vandermonde matrix V(ω) is another Vandermonde matrix, given by 1kV(ω−1) - in two different ways.

First, we will show that the matrix multiplication of V(ω) and 1kV(ω−1) yields the identity matrix 𝕀, that is,

V(ω)⋅1kV(ω−1)=𝕀

Then, we will show that if we first multiply V(ω) by 𝐚 to obtain 𝐲, and then multiply 1kV(ω−1) by V(ω)𝐚, we recover 𝐚.

These two proofs are essentially the same, just expressed in two different ways.

Proof that V(ω)⋅1kV(ω−1)=𝕀

We will prove that the matrix multiplication of V(ω) with 1kV(ω−1) yields the identity matrix.

The proof relies on the orthogonality property of the roots of unity, which is expressed as a summation. Therefore, we first write the matrix multiplication in summation form so that we can use this orthogonality property.

The multiplication V(ω)⋅1kV(ω−1) in index notation

Recall that the matrix entry of V(ω) in row i and column m is given by

ωim

Note: The numbering of rows and columns here is considered from 0, not 1.

For example, the entry in row 1 and column 2 of V(ω) is (ω1)2, as highlighted below in red:

V(ω)=[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω1)0(ω1)1(ω1)2⋯(ω1)k−1(ω2)0(ω2)1(ω2)2⋯(ω2)k−1⋮⋮⋮⋱⋮(ωk−1)0(ωk−1)1(ωk−1)2⋯(ωk−1)k−1]

Also, the matrix entry of 1kV(ω−1) in row m and column j is given by

1kω−mj

For example, the entry in row 2 and column 0 of 1kV(ω−1) is (ω−2)0, as highlighted below:

1kV(ω−1)=1k[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω−1)0(ω−1)1(ω−1)2⋯(ω−1)k−1(ω−2)0(ω−2)1(ω−2)2⋯(ω−2)k−1⋮⋮⋮⋱⋮(ω−(k−1))0(ω−(k−1))1(ω−(k−1))2⋯(ω−(k−1))k−1]

Therefore, when the two matrices V(ω) and 1kV(ω−1) are multiplied, the resulting element in row i and column j is obtained by multiplying row i of V(ω) (red) with column j of 1kV(ω−1) (blue):

V(ω)⋅1kV(ω−1)=[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω1)0(ω1)1(ω1)2⋯(ω1)k−1⋮⋮⋮⋱⋮(ωi)0(ωi)1(ωi)2⋯(ωi)k−1⋮⋮⋮⋱⋮(ωk−1)0(ωk−1)1(ωk−1)2⋯(ωk−1)k−1]1k[(ω0)0(ω0)1⋯(ω0)j⋯(ω0)k−1(ω−1)0(ω−1)1⋯(ω−1)j⋯(ω−1)k−1(ω−2)0(ω−2)1⋯(ω−2)j⋯(ω−2)k−1⋮⋮⋮⋱⋮(ω−(k−1))0(ω−(k−1))1⋯(ω−(k−1))j⋯(ω−(k−1))k−1]

Each entry of the matrix V(ω)⋅1kV(ω−1), which we denote by Mij, is then given by

Mij=(ωi)0(ω0)j+(ωi)1(ω−1)j+⋯+(ωi)k−1(ω−(k−1))j=ωi0ω0j+ωi1ω−1j+⋯+ωi(k−1)ω−(k−1)j=∑m=0k−1ωim1kω−mj=1k∑m=0k−1(ωm)i−j

Now we need to show that the entries Mij are equal to those of the identity matrix. To do this, we use the orthogonality of the roots of unity.

Recall: Orthogonality of roots of unity

In the chapter on the orthogonality of roots of unity, we showed that

∑m=0k−1(ωm)i−j={k,if i≡j(modk),0,otherwise.

To recap, the formula above gives us the result of the summation in two cases: (1) when i≡j and (2) when i≢j. We will use both cases below.

Case 1: When i≡j

We want to calculate

Mij=1k∑m=0k−1(ωm)i−j

when i≡j. The orthogonality of the roots of unity says that, when i≡j,

∑m=0k−1(ωm)i−j=k

Using this result for Mij, we have that

Mij=1k∑m=0k−1(ωm)i−j=1kk=1

Thus, for the diagonal terms (such as M00,M11,M22,...,M(k−1)(k−1)), we have

Mij=1when i=j

Case 2: When i≢j

Now we want to calculate

Mij=1k∑m=0k−1(ωm)i−j

when i≢j. The orthogonality of the roots of unity says that, when i≢j ,

∑m=0k−1(ωm)i−j=0

Using this result for Mij, we have

Mij=1k∑m=0k−1(ωm)i−j=1k0=0

Therefore, for any non-diagonal terms (such as M10,M01,M12,…), we have Mij=0.

The matrix M

Taking into account cases (1) and (2) above, we have that the matrix M=(Mij) is

M=(10⋯001⋯0⋮⋮⋱⋮00⋯1)

which is exactly the identity matrix 𝕀. Thus, the matrices V(ω) and 1kV(ω−1) are inverses of each other, because

V(ω)⋅(1kV(ω−1))=M=𝕀

Matrix multiplication of 1kV(ω−1) with vector 𝐲 yields vector 𝐚 back

Another way to show that 1kV(ω−1) is the inverse of V(ω) is to show that it inverts the latter.

That is, if we first apply V(ω) to 𝐚 to obtain 𝐲,

𝐲=V(ω)⋅𝐚

and then apply 1kV(ω−1) to 𝐲, we recover 𝐚:

𝐚=1kV(ω−1)⋅𝐲

That is exactly what we will show.

First transformation: 𝐲=V(ω)⋅𝐚

The first transformation takes the vector of coefficients 𝐚 to the vector of evaluations 𝐲 via the following matrix operation:

[f(ω0)f(ω1)f(ω2)⋮f(ωk−1)]=[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω1)0(ω1)1(ω1)2⋯(ω1)k−1(ω2)0(ω2)1(ω2)2⋯(ω2)k−1⋮⋮⋮⋱⋮(ωk−1)0(ωk−1)1(ωk−1)2⋯(ωk−1)k−1][a0a1a2⋮ak−1]

As we have already seen, this matrix operation can be written using indices:

f(ωi)=∑j=0k−1ωijaj

Second transformation: 𝐚~=1kV(ω−1)𝐲

Now we perform a second transformation on the vector 𝐲, which results in a vector 𝐚~:

[a~0a~1a~2⋮a~k−1]=1k[(ω0)0(ω0)1(ω0)2⋯(ω0)k−1(ω−1)0(ω−1)1(ω−1)2⋯(ω−1)k−1(ω−2)0(ω−2)1(ω−2)2⋯(ω−2)k−1⋮⋮⋮⋱⋮(ω−(k−1))0(ω−(k−1))1(ω−(k−1))2⋯(ω−(k−1))k−1][f(ω0)f(ω1)f(ω2)⋮f(ωk−1)]

If we can show that 𝐚=𝐚~, then the second transformation is the inverse of the first.

The matrix operation above can be written in index form as

a~j=∑m=0k−11kω−jmf(ωm)

Now substitute the expression for f(ωi) . Recall that

f(ωi)=∑j=0k−1ωijaj

where i is just an index that we can replace for m, or any other letter. Thus, replacing f(ωm) in the result for a~j, we have

a~j=∑m=0k−11kω−jmf(ωm)=∑m=0k−11kω−jm(∑i=0k−1ωmiai)

Rewriting as a double sum:

a~j=∑i=0k−1∑m=0k−11kω−jmωmiai=∑i=0k−11k(∑m=0k−1ωm(i−j))ai

The term in parentheses is exactly the orthogonality relation:

∑m=0k−1(ωm)i−j={k,if i≡j(modk),0,otherwise.

To continue the proof, we could study case (1), where i=j, and case (2), where i≠j, but we will proceed differently. We will introduce a symbol called the Kronecker delta.

The Kronecker delta, δij, is a symbol with 2 indices, i and j in this case, which is 1 when i=j and 0 otherwise:

δij={1if i=j0if i≠j

The Kronecker delta can be understood as the entries of the identity matrix.

Using the Kronecker delta, we can write the orthogonality property as

∑m=0k−1(ωm)i−j=kδij

Using the Kronecker delta in the expression for a~j, we have

a~j=∑i=0k−11k(∑m=0k−1ωm(i−j))ai=∑i=0k−11k(kδij)ai=∑i=0k−11k(kδij)ai=∑i=0k−1δijai

Expanding the summation, the expression above can be written as

a~j=δ0ja0+δ1ja1+δ2ja2+...+δ(k−1)jak−1

By the Kronecker delta property, only one term in the summation is nonzero. For example, for j=2, only δ22 is nonzero. Thus, we have

a~2=δ02a0+δ12a1+δ22a2+⋯+δ(k−1)2ak−1=δ02a0+δ12a1+δ22a2+⋯+δ(k−1)2ak−1=a2

This holds true for any j, therefore we have that

a~j=aj

for any j.

This shows that the transformation 1kV(ω−1) is the inverse of the transformation V(ω).

This article is part of a series on the Number Theoretic Transform in our ZK Book