# Correlation functions and Jordan-Wigner string

+1 vote
edited Sep 24

In the page on Jordan-Wigner strings, it says

Even though AutoMPO will produce a correct MPO, if you use this MPO in DMRG, for example, to find a ground state of a fermionic system, when measuring correlation functions such as $⟨c_i^\dagger c_j⟩$ it is still required that you insert the necessary Jordan-Wigner string operators yourself.

I don't understand this. If I do something like

auto ampo = AutoMPO(sites);
ampo+=1,"Cdagup",i,"Cup",j;
auto mpo = MPO(ampo);
auto answer = overlap(psi,mpo,psi);


will this not give the correct answer automatically? I thought the whole point of AutoMPO was that it generated the exact right thing for fermions.

Or am I misinterpreting something?

Thanks!

+1 vote
answered Sep 24 by (19,810 points)
selected Sep 28 by jclaes

Hi, good question but it was basically just some writing that was unclear. I just made a small edit to that page.

What it now says is "when measuring a correlation function... not using an MPO made by AutoMPO". The thinking here is that generally you don't want to use MPOs to measure correlation functions because it is much more efficient to follow the procedure on this page:
http://itensor.org/docs.cgi?page=tutorials/correlations
Generalizing this procedure to fermionic operators requires putting F operators on the sites between the c and c^dagger.

If you do use MPOs generated by AutoMPO everything is fine. It's a good way to test the more efficient procedure linked above.

Also if you make your own MPO "by hand" then you also need to put in string operators in the sense of the finite-state automata picture of MPOs as generating sums of operators of the form XYYYYYZ (usually Y is the identity but for fermionic operators X and Z it should be the Jordan-Wigner string operator F).

commented Sep 28 by (340 points)
Hi Miles, thanks for the answer! If I define two fermionic MPOs using AutoMPO and then apply them each to my wavefunction, or do Overlap(psi,MPO1,MPO2,psi), do the commutation relations still all work? Let's say MPO1 and MPO2 act on different parts of my chain. Thanks!
commented Sep 28 by (19,810 points)
Yes all the commutation relations should be correct automatically in that case. (As an implementation note the MPOs created by AutoMPO have Jordan-Wigner string inside them.)

So it's a good way to check your own hand-written correlation function code, or a convenient option when you don't need to use the absolute quickest approach.