I would to apply a particle hole transform across all sites of an MPO of fermions, where conserve_qns=true. Applying c+cdag for all the sites doesn’t work as this operator doesn’t have a well defined flux. However it maps states with well defined particle number to states with well defined particle number, so quantum numbers should be able to be used afterwards. Is there a way of turning quantum numbers back on, or doing this operation with quantum numbers in any way?
Hi David,
So I think the problem here is that c+c^\dagger does not map states with a well-defined particle number to other states with a well defined particle number. Consider the following:
(c+c^\dagger) |1\rangle = |0\rangle + |2\rangle
So then the state on the right is in a superposition of states with 0 and 2 particles i.e. the total particle number is not well-defined. (The overall parity is well-defined, but that’s not the quantum number that is conserved by default when you pass conserve_qns=true.)
So for fermions, technically c^\dagger |1\rangle = 0 so you are correct that (c+c^\dagger) acting on |1\rangle would result in state with well-defined particle number.
However, I was just being informal about explaining why (c+c^\dagger) does not have a well-defined flux. Acting it on a single “test ket” can show that it does not in some cases, but in other cases it can make it incorrectly appear that it does. It’s really more about how it acts on all possible states in general, and more formally it’s that the c operator removes particles while c^\dagger adds particles, so they have different flux and you cannot add them when conserving total particle number in our system.
More mathematically, c transforms as one irrep of the group U(1) whereas c^\dagger transforms under a different irrep of U(1), so their combination would not belong to a single irrep.
I completely agree that it doesn’t work for all states. However, if I have a chain of fermions in a state with definite particle number, and apply a particle hole transform to every mode in the chain I should get back a state with a definite particle number. As a matrix, this would be like a transpose but along the anti-diagonal. I’m unsure of how this generalises to an MPO, as applying each particle hole transform individually makes the QN undefined, before becoming defined again at the end. Would there be any way to do this?
Our system does not support making operators like (c+c^\dagger) while conserving U(1) quantum numbers, because the operator (c+c^\dagger) does not transform as an irrep under the action of the U(1) group.
Perhaps based on the system you are trying to study, you are actually working in a case where just fermion parity is conserved? Then you could try only enabling that quantum number instead of particle conservation.
Lastly, I forgot to ask why you are wanting to conserve particle number. Is it to make your code run faster? In that case, I don’t think it would help here because your tensors would not be sparse in the way implied by U(1) symmetry.