Handling constrained Hilbert spaces

Hi everyone,
I wondered if there was a way to enforce constraints between two neighboring sites. For now, I use energy penalty terms to impose the constraint. This helps identify the excited states, but it will get highly inefficient as I scale up to larger and larger lattice sizes. Primarily, the constraints contain operator squares and sums. I wondered if there was a way to enforce the Hilbert space constraint via the siteind construction or maybe at the level of the 2-site DMRG. Any pointer towards this would be helpful.
TIA!

The short answer is probably not, at this time. Could you give an example of the constraint or constraints you are wanting to impose though, just in case we do know a way to do it? Most likely energy penalties are the best way, since ITensor works in tensor product spaces.

Over the next year or two, we are working on a system for handling non Abelian symmetries which might be extended to also handle “tensor category”vector spaces which amount to constrained spaces (eg things like Fibonacci anyons). But that is very much in the early planning stage right now so no estimate of when it will be done or what capabilities it will eventually have.

The system I am working with has a local Hilbert space consisting of three quantum numbers, one bosonic and the other two fermionic. The constraint relates two different algebraic combinations of these three numbers between neighboring sites such that they’re equal. i.e., say the three numbers are a, b, and c. Then the constraint is the following relation: a(x)+b(x)(1-c(x)) = a(x+1)+c(x+1)(1-b(x+1)). My initial thought was to filter out states that do not obey this constraint, but that might be harder to do in practice.

The energy penalty works, and I will most likely stick to it, but excited states are more challenging. If I could impose these constraints, it would be far more efficient!

I don’t think there will be an automatic way to enforce them in ITensor for some time, so energy penalty is probably the best way to go.

The other thing you could try is to put all of your degrees of freedom into a single (larger) site. Then you could simply exclude combinations of states that are constrained to have infinite energy. As long as the resulting site dimension is not too large, then it could work ok. The real way to go at that point would be single-site DMRG which scales better with site dimension. We will soon have that (it is already available in the ITensorNetworks package, but that’s under heavy development) but it’s not available in ITensors.jl at the moment.