I trying to make the string order parameter operator and parity order parameter operator defined:
\mathcal{O}_S=\lim _{|i-j| \rightarrow \infty}\left\langle\delta \hat{n}_i e^{i \theta \sum_{i < k<j} \delta \hat{n}_k} \delta \hat{n}_j\right\rangle
In this case \delta \hat{n}_k = \hat{n}_k - I
\mathcal{O}_P=\lim _{|i-j| \rightarrow \infty}\left\langle e^{i \theta \sum_{i < k<j} \delta \hat{n}_k}\right\rangle
and with in this case \theta=\pi.
for a chain of 3 particles and 3 sites, for a MPS which should be a |1,1,1\rangle on Fock basis, I applied two different approaches:
...
function make_n_matrix_minus_i(d)
n = zeros(d, d)
for i in 1:d
n[i, i] = i - 1
end
return n
end
...
ITensors.op(::OpName"diffid", ::SiteType"Boson", d::Int) = make_n_matrix_minus_i(d)
...
sites = siteinds(mps)
op1 = op("I",sites[1])
op2 = exp(1im*(pi)*op("diffid",sites[2]))
op3 = op("I",sites[3])
ez = MPO([op1,op2,op3])
l = real(inner(mpstries', ez, mps))
and
N=3
sites = siteinds(mps)
s=sites
POz = ITensor[]
POzf = ITensor[]
h0 = op("I", s[1])
push!(POz, h0)
hf= op("I",s[N])
push!(POzf,hf)
POzS = ITensor[]
for j=2:N-1
s1 = s[j]
hj = op("make_n_matrix_minus_i",s1)
Gj = exp(1.0im * pi * hj)
push!(POzS,Gj)
end
append!(POz,POzS)
append!(POz,POzf)
real(inner(mps' ,MPO(POz), mps))
Both of them when obtain the expected value of this parameters, in this case the Parity order parameter and I apply to this MPS(MPS which should be a |1,1,1\rangle on Fock basis) gives me a -1, and by exact diagonalization or an analytical result you must have 1 as the expected value for POP for this MPS.
what I did miss? a phase or something? or a -1?
I apologies for the long question, greetings and thank you for reading.