I'm currently using version 2 of ITensor, so I will pose my problem in its language, but I believe my question is not version specific. My questions are about the Heisenberg.h sample code for spin-one moments, which I'm trying to extend to spin-half as an exercise. In particular, my questions are about the following bit of code:

```
for(int l = 0; l <= N_; ++l)
{
q0.at(l) = Index(nameint("q0_",l),3);
qP.at(l) = Index(nameint("qP_",l),1);
qM.at(l) = Index(nameint("qM_",l),1);
links.at(l) = IQIndex(nameint("hl",l),
q0[l],QN( 0),
qP[l],QN(-2),
qM[l],QN(+2),
Out);
}
```

**First Question:**

In the spin-half scenario, would the link QN's be identical to this spin-one example? My understanding is that the links should carry the difference in the quantum numbers of the physical sites. Following the docs, the "Sz=+1/2" and "Sz=-1/2" moments are coded QN(+1) and QN(-1) respectively. Naively, I would think that the link QN's would be {+1,0,-1} since, for example, "(+1/2) - (-1/2) = +1". However, since we code the half-integer spins using whole numbers, should I instead be thinking, for example, "QN(+1)-QN(-1)=QN(+2)"? Which would make the link QN's {+2,0,-2}. Same as spin-one.

**Second Question:**

What tells us that the dimension of the indices associated with the QN(-2) and QN(+2) quantum numbers should each be 1? I understand that the matrix of operators (i.e this matrix) has a total dimension 5. I further see that the net change in QN due to all the operators on any row/col is 0 for three of the rows, and +1 and -1 for the remaining two. Is this how one should determine the dimension of the indices associated with the QN's on the bond?