Why is the quantum number flux of the link dimension cumulative?

Hi, I was learning more about QN flux and was wondering why for a QN MPS the QN of the link index is cumulative. For a simple example,

using ITensors
n = 5
s = siteinds("S=1/2", n; conserve_qns=true)
psi = MPS(s, ["Dn", "Dn", "Up", "Dn", "Up"])

which returns

MPS
[1] ((dim=2|id=772|"S=1/2,Site,n=1") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1, (dim=1|id=67|"Link,l=1") <In>
 1: QN("Sz",-1) => 1)
[2] ((dim=1|id=67|"Link,l=1") <Out>
 1: QN("Sz",-1) => 1, (dim=2|id=790|"S=1/2,Site,n=2") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1, (dim=1|id=909|"Link,l=2") <In>
 1: QN("Sz",-2) => 1)
[3] ((dim=1|id=909|"Link,l=2") <Out>
 1: QN("Sz",-2) => 1, (dim=2|id=608|"S=1/2,Site,n=3") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1, (dim=1|id=600|"Link,l=3") <In>
 1: QN("Sz",-1) => 1)
[4] ((dim=1|id=600|"Link,l=3") <Out>
 1: QN("Sz",-1) => 1, (dim=2|id=270|"S=1/2,Site,n=4") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1, (dim=1|id=502|"Link,l=4") <In>
 1: QN("Sz",-2) => 1)
[5] ((dim=1|id=502|"Link,l=4") <Out>
 1: QN("Sz",-2) => 1, (dim=2|id=267|"S=1/2,Site,n=5") <Out>
 1: QN("Sz",1) => 1
 2: QN("Sz",-1) => 1)

The link index for site 1 (Link,l=1) starts out as -1 since the state at site 1 is \ket{\downarrow} which has -1 QN flux. For site 2, it is -2 since the cumulative QN flux of \ket{\downarrow \downarrow} is -2. For site 3, it is -1 since \ket{\downarrow \downarrow \uparrow} is has net QN flux -1, and so on. Why do the link indices follow this pattern?

Thank you.

1 Like

Thanks for the question. Before directly answering your question about this particular MPS, the more general answer is (in the context of QN-conserving ITensors):

  • a tensor network has a total “QN flux” which for spin means the total “Sz” of the tensor represented by the network (recall that an MPS represents a single tensor, which would be the tensor you’d get if you contracted all the MPS tensors together)
  • the total flux of a tensor network is the sum of the fluxes of all the tensors in the network
  • for an individual QN conserving ITensor, we require it to have a “well-defined” flux, meaning that if you take any of its non-zero blocks, and look at the corresponding subspaces of its indices and add their QN values, weighted by the index arrow (+1 for Out, -1 for In) then you always get the same result. This result is the flux of the ITensor (you can compute it by calling flux(T) for an ITensor T)

Putting the above facts together, if you go through an MPS and compute the flux of each of its tensors and add them all up you will get the total flux of the MPS. In the case of the MPS you made this should be flux(psi)==QN("Sz",-1) since your state has a total Sz of -1/2 in physics units, which is -1 in “ITensor units”.

As to why the links have the particular patterns they do, this is a detail of how the code was written for the MPS constructor. There are many different patterns of QNs the link indices could have, and these patterns are not unique, as long as they satisfy the rules mentioned above so that the total flux of the MPS comes out correctly.

If you want to study the details of this MPS more, I would suggest printing out each ITensor to see what non-zero blocks it has and then compute its flux by the method mentioned above. You can also call flux(T) on each tensor T to check your result.

Also, you may want to call orthogonalize!(psi,1) to put psi into “left-orthogonal form” which is a well-defined gauge that has nice properties. Then the pattern of arrows follows a specific convention which is that they flow “out” from the “orthogonality center” site which would be site 1.

1 Like

For more information on the QN system of ITensor, please see the following resources:

  1. section 8 of the ITensor Paper
  2. this page of the “ITensor Book” part of the ITensor C++ documentation
1 Like

Thank you for your reply. What you wrote at the beginning I am familiar with and it conforms to my understand which is good. Indeed, I thought the structure of the link indices was somewhat arbitrary (in the sense that one could choose many different possibilities). This clarifies it. I’ll try the left orthogonal pattern as well.

1 Like