QuantumKitHub / MPSKitModels.jl

MIT License
15 stars 13 forks source link

fermionic creation and annihilation operators (c+, c, n) #7

Closed HumpyBlumpy closed 1 year ago

HumpyBlumpy commented 1 year ago

Hi,

I noticed the overview says "fermionic creation and annihilation operators (c+, c, n)" are defined and exported but I could not find them. I found electron_plusmin and the like but it is not obvious what those are (spinful fermions?). I am interested in spinless fermion operators without any symmetries. Or should I simply be doing Jordan-Wigner and using spins?

lkdvos commented 1 year ago

Hi!

Indeed, this was still on the todo list. eletron_plusmin should be spin half fermions, in order to mimic the behaviour of electrons. I have added spinless fermion operators, do I must warn you, it seems hard to find a natural definition. In particular, I warn for the following:

using MPSKitModels, TensorKit, Test
@tensor begin
    term1[a; b] := ccdag()[a, i; i, b]
    term2[a; b] := cdagc()[a, i; i, b]
end
@test term1 + term2 ≈ id(domain(term))
using MPSKitModels, TensorKit, Test
@tensor begin
    term1[a; b] := ccdag()[i, a; b, i]
    term2[a; b] := cdagc()[i, a; b, i]
end
@test term1 + term2 ≈ -id(domain(term)) # note the minus!

I.e. while TensorKit provides a consistent framework to work with fermions, thinking of these as single creation and annihilation operators becomes confusing rather quickly. I think the main issue lies in how to define daggers, in the sense that I cannot seem to find a consistent way to make sure that for example $(c_i c_j^\dagger)^\dagger =c_i^\dagger c_j$ without breaking the anticommutation relations. If you have any thoughts or ideas on this, feel free to comment, but otherwise, I think the current implementation is the best I can do