I am trying to find the ground state of a Hamiltonian with a \mathbb{Z}_2 \otimes \mathbb{Z}_2 global symmetry. To this end, I want to initialize the ground state in a way that respects the symmetry and then make DMRG remain in the symmetry sector. The simplest such ground state is the following: |\psi_0 \rangle =\frac{1}{\sqrt{2}}(\underbrace{|0+++...++0\rangle}_{\psi_a} +\underbrace{|1+++...++1\rangle}_{\psi_b} ) where |+\rangle stands for the +1 eigenstate of \sigma_x. I tried to implement this strategy using the example laid out in the documentation but came across two problems.

First of all, when defining the \psi_a part of the state, ITensor doesn’t seem to recognize the |+\rangle state as part of the Qubit library.

using ITensors
N = 10
sites = siteinds("Qubit",N;conserve_qns=true)
state_a = [ isequal(n,1)|| isequal(n,N) ? "0" : "X+" for n=1:N ]
psi_a = productMPS(sites,state)

producing

ArgumentError: Overload of “state” or “state!” functions not found for state name “X+” and Index tags “Qubit,Site,n=1”.

Finally, I don’t know if adding two product states \psi_a and \psi_b is allowed in this context in ITensor.

Hi Arnab,
It’s an interesting question. First of all, what you’re trying in the code above is probably not working for two reasons:

you defined your array as state_a but then wrote state when plugging it into the productMPS function, so you just have a minor bug there

the state_a state you are making (I get state_a = ["0", "X+", "X+", "X+", "X+", "X+", "X+", "X+", "X+", "0"] when printing it out) does not conserve total qubit parity, which is what conserve_qns=true conserves for the “Qubit” site type. As I think you’d agree it’s a state which is a superposition of different parity sectors.

So to understand what you’re trying to do I’d need some more information. What is the Z_2 \otimes Z_2 symmetry you are trying to conserve? What does each copy of Z_2 correspond to in terms of the qubits?

Thank you very much for your response! The \mathbb{Z}_2 \otimes \mathbb{Z}_2 symmetry I am trying to conserve acts on the qubits via \cong \langle ZXIXI…XIZ, XIXIX…XIX\rangle. So the parity is conserved in the bulk but at the two boundary sites, things get a little more complicated.

That helps me understand a bit more, but I’m afraid I don’t have all the information I would need to help you if you still want to try to conserve this. Is there a way of explaining the symmetry in terms of a quantity which is conserved? Like for spins a common example is that total Sz is conserved. Is it here that the parity of a subset of the qubits is conserved or always remains the same?