Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add GroundStateProjection operator for FockSpace #229

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

benneti
Copy link

@benneti benneti commented Dec 11, 2024

this PR extends the Fockspace definition to include a ground state projection operator.

@benneti
Copy link
Author

benneti commented Dec 11, 2024

if you have an opinion on where to best add it to the documentation, let me know.

@benneti
Copy link
Author

benneti commented Dec 11, 2024

also maybe it would be nice to use the same symbol as for the destroyer and make the print symbol something like ∅ₐ if the symbol is a

@david-pl
Copy link
Member

Hi @benneti ! Thanks for contributing here.

I had a brief look at the code and everything looks completely fine. However, I'm afraid I have to raise a conceptual issue here, which I'm not entirely certain on myself.

In this PR you're implementing the Fock ground state projector $P_0 = |0\rangle \langle 0 |$ and the following simplifications:

  • $a P_0 = 0$
  • $P_0 a^\dagger = 0$
  • $P_0 ^2 = P_0$
  • $P_0^\dagger = P_0$

Is that correct?

The issue that I'm talking about arises when you consider products such as (I'm picking a simple example here) $a^\dagger P_0 a$. With this implementation, that product doesn't get simplified further, right? However, you can simplify that, since in fact you just have $a^\dagger P_0 a = P_1 = |1\rangle\langle 1|$.
This means, that you are treating the projector $P_1$ as the product, which again means it will be treated as a third-order product when performing the cumulant expansion. I'm not sure whether this is consistent, since you're effectively treating the ground state projector differently from any other projector on a Fock state. Now, this might be fine, but I've grown a bit skeptical with things like this as it can often lead to wrong dynamics since the cumulant approximation isn't fully correct.
Please note that I really don't want to discourage you here, I'd just like to point to a possible issue.

You'd need to check that for some example. That actually brings me to another question: while I'm sure there are applications for this out there, I don't really know one off the top of my head. Since you're implementing this, I'm sure you have a specific problem you'd like to solve in mind. Could you share that? Or better yet a reduced example? That would allow us to see if the current implementation makes sense. After all, what matters is whether the produced Physics is correct.

Also, one more note: if you're now thinking you could implement the simplification I mention and generally implement a projection operator of the for $P_{mn} = |m\rangle \langle n|$, you could do that in principle. Unfortunately, this doesn't really work in general. There's infinitely many of them, so you'd have to set some cutoff. And then, you are effectively deriving an equation for every element of the corresponding density operator, so you might as well just solve the master equation using QuantumOptics.jl. There might be some special cases (some specific Hamiltonian or so), where the you'd be able to derive a closed set of equations without a cutoff, but I'm not sure if that even exists and how "strange" that Hamiltonian would have to be.

@benneti
Copy link
Author

benneti commented Dec 11, 2024

Thank you, to be honest this is a fair point; I never intend to use this for a cumulant expansion but as a convenient way to calculate some linear optics expectation values using the commutation algebra you have already implemented.
And also as you can see from your argument, to play with the bosonic algebra, |0><0| should be enough as I can simply write |n><m| = 1/sqrt(n!m!) a'^n |0><0| a^m.
I discussed a bit with @ChristophHotter and it sounded to me that at the moment the easiest way to access and extend the commutation algebra is right here.
If you prefer not to extend the algebra here in cumulants, I am open to suggestions, i.e., splitting the package; what do you think?

@benneti
Copy link
Author

benneti commented Dec 11, 2024

also yes the properties of the GS Projection are correct

@david-pl
Copy link
Member

Ah I see. Well that context was lost on me of course. No need to split things as this is a clean addition and doesn't affect anything else. It would probably be good to point out this issue in the documentation as it will "just work" with the cumulant expansion.

@benneti
Copy link
Author

benneti commented Dec 11, 2024

Yeah sorry, I did not think of adding some context to the PR. Added a warning to the docstring and squashed the commits!

@benneti
Copy link
Author

benneti commented Dec 11, 2024

But I think the latexify logic is not right yet.

EDIT: nevermind works now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants