# QN Index

We have seen that indices of quantum-number conserving tensors have
quantum number *subspaces*. That is, some values the index takes
correspond to a quantum number q1; other values of the index correspond to q2; etc.
(These quantum numbers are the small red numbers in the figure below.)

Let us revisit our example from the last chapter of a single-site operator acting on the Hilbert space of a single hard-core boson:

We see that for each index, if the index value is 1 then it is in the quantum number 0 subspace. If the index value is 2, the index is in the quantum number 1 subspace. Below we will see that more generally, multiple index values can fall into the same quantum number subspace.

## Constructing a Simple QN Index

Continuing with the above example, let us construct a tensor index with quantum-number subspaces: a QN Index.

```
auto I = Index(QN(0),1,
QN(1),1,
Out,"I");
```

An QN Index contains an ordered collection of QN-integer pairs. Each QN labels the quantum number of a subspace of the Index, and the integer defines the dimension or size of that subspace. In mathematical terms, the Index defines a vector space with an internal direct-sum structure.

In the code above, the QN Index has a tag "I". It has two subspaces, both of size 1. The first subspace has quantum number QN(0). The second subspace has a quantum number QN(1). The arrow direction of I is specified as Out.

The size of this QN Index is 2, because it has two subspaces each of size 1.

## Constructing a General QN Index

Now lets construct an QN Index whose subspaces correspond to multiple index values. This can be done by making subspaces whose sizes are greater than 1.

```
auto J = Index(QN(-2),2,
QN(-1),4,
QN( 0),6,
QN(+1),4,
QN(+2),2,
Out,"J");
```

This Index has five subspaces, labeled by five QN-integer pairs.

The first subspace has a size of 3 and an QN (quantum number) of -2.

The second subspace has a size of 5, and a QN of -1.

Overall we can see that the Index J has 5 subspaces of varying sizes and quantum numbers.

The values that J can take (the index values of J) range from 1 up to 18 (=2+4+6+4+2). Values 1 and 2 correspond to the first subspace; values 3 through 6 to the second subspace; etc.

The above example can be summarized in a chart:

## Relationship to regular Index objects

A QN Index is of type Index just like a regular Index used for dense ITensors.
But internally, it carries extra information about its subspaces (direct-sum subspaces).
To check whether an Index `I`

carries QN information, you can call `hasQNs(I)`

.

Back to Book

Back to Main