{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Examples for QuantumAlgebra.jl" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using QuantumAlgebra" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# convience function to show both the original and normal_form version of an expression\n", "dispnormal(x) = display(\"text/latex\",\"\\$ $(latex(x)) \\\\quad\\\\to\\\\quad $(latex(normal_form(x))) \\$\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parameters\n", "Create parameters with `param(:name,state,indices...)`, where `state = 'r','n','c'` stands for real, non-conjugated, or conjugated parameters. For more convenience, we also have the string macros `Pr\"name\"` for real parameters and `Pc\"name\"` for complex (non-conjugated) parameters. These macros support indices with `Pr\"name_i,j\"`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "${\\omega}_{ij} $" ], "text/plain": [ "ω(ij) " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "${\\alpha} $" ], "text/plain": [ "α " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ωij = param(:ω,'r',:i,:j)\n", "α = param(:α,'n')\n", "display(ωij)\n", "display(α)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "${\\omega}_{ij} $" ], "text/plain": [ "ω(ij) " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "${\\alpha}^{*} $" ], "text/plain": [ "α* " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(ωij == Pr\"ω_i,j\")\n", "display(ωij')\n", "display(α')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`normal_form` also reorders parameters" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "${{\\alpha}}^{2} {\\omega}_{ij} {\\alpha} {\\omega}_{ij} {\\alpha}^{*} $" ], "text/plain": [ "α² ω(ij) α ω(ij) α* " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "${\\alpha}^{*} {{\\alpha}}^{3} {{\\omega}_{ij}}^{2} $" ], "text/plain": [ "α* α³ ω(ij)² " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = α*α*ωij*α*ωij*α'\n", "display(x)\n", "normal_form(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Parameters where state is not set are complex by default." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ g_{2} g_{1} g_{3}^{*} b {a}^{2} d_{3}^{*} f_{1} \\quad\\to\\quad {a}^{2} b d_{3}^{*} f_{1} g_{3}^{*} g_{1} g_{2} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ g_{2}^{*} g_{1}^{*} g_{3} b^{*} {a^{*}}^{2} d_{3} f_{1} \\quad\\to\\quad {a^{*}}^{2} b^{*} d_{3} f_{1} g_{1}^{*} g_{2}^{*} g_{3} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = param(:g,2)*param(:g,1)*param(:g,'c',3)*param(:b)*param(:a)*param(:a)*param(:d,'c',3)*param(:f,'r',1)\n", "dispnormal(x)\n", "dispnormal(x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operators\n", "Three types of operators are currently supported: Bosonic, fermionic, and two-level system operators. By default, `QuantumAlgebra` defines `a` as a bosonic operator, `f` as a fermionic operator, and `σx`,`σy`,`σz`,`σp`,`σm` as two-level system operators (`σp`/`σm` are $\\sigma^\\pm$). These are functions that create `QuExpr` objects. Note that the adjoint `'` can be applied directly to these functions, or to the resulting objects, i.e., `a'() = a()'`. While the recommended interface is to use `a'()` and `f'()` for constructing creation operators, for backwards compatibility, the functions `adag = a'` and `fdag = f'` " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {a} {a}^\\dagger \\quad\\to\\quad 1 + {a}^\\dagger {a} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a()*a'())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with indices" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {a}_{i} {a}_{j}^\\dagger \\quad\\to\\quad \\delta_{ij} + {a}_{j}^\\dagger {a}_{i} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a(:i)*a'(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indices can be symbolic or integer:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {a}_{i} {a}_{1}^\\dagger \\quad\\to\\quad \\delta_{1i} + {a}_{1}^\\dagger {a}_{i} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a(:i)*a'(1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fermions anticommute" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {f}_{i} {f}_{j}^\\dagger \\quad\\to\\quad \\delta_{ij} - {f}_{j}^\\dagger {f}_{i} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f(:i)*f'(:j))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {f}_{ij} {f}_{il}^\\dagger \\quad\\to\\quad \\delta_{jl} - {f}_{il}^\\dagger {f}_{ij} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f(:i,:j)*f'(:i,:l))" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2021-07-13T19:12:43.408000+02:00", "start_time": "2021-07-13T17:12:43.290Z" } }, "source": [ "$f^2$ and $f^{\\dagger 2}$ are normalized to $0$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{f}}^{2} \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {{f}^\\dagger}^{2} \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f()^2)\n", "dispnormal(f'()^2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since normal form also gives canonical ordering of operators by indices, anticommutation of fermionic operators can introduce a minus sign." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {f}_{j} {f}_{i} \\quad\\to\\quad - {f}_{i} {f}_{j} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f(:j)*f(:i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Indices in $\\delta$s are automatically ordered and simplified (so $\\delta_{ik}\\delta_{kj} \\to \\delta_{ij}\\delta_{ik}$)." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {f}_{ik} {f}_{kj}^\\dagger \\quad\\to\\quad \\delta_{ij} \\delta_{ik} - {f}_{kj}^\\dagger {f}_{ik} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f(:i,:k)*f'(:k,:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bosonic and fermionic operators commute (independent of indices)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {a}_{i} {f}_{i} {f}_{j}^\\dagger \\quad\\to\\quad \\delta_{ij} {a}_{i} - {f}_{j}^\\dagger {f}_{i} {a}_{i} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a(:i)*f(:i)*f'(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a second bosonic species with name `b`. These always commute with other species." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "@boson_ops b;" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {a}_{i} {b}_{i} {b}_{j}^\\dagger \\quad\\to\\quad \\delta_{ij} {a}_{i} + {b}_{j}^\\dagger {a}_{i} {b}_{i} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a(:i)*b(:i)*b'(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a second fermionic species with name `g`. These always commute with any other species." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "@fermion_ops g;" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {f}_{i} {g}_{j} + {g}_{j} {f}_{i} \\quad\\to\\quad 2 {f}_{i} {g}_{j} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(f(:i)*g(:j) + g(:j)*f(:i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create (mutually anticommuting) fermionic operators referring to different kinds of states of the\n", "same species, use `@anticommuting_fermion_group`." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "@anticommuting_fermion_group c d e;\n", "anticomm(A,B) = A*B + B*A;" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {c} {d} + {d} {c} \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {e}^\\dagger {c} + {c} {e}^\\dagger \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {c}_{j}^\\dagger {c}_{i} + {c}_{i} {c}_{j}^\\dagger \\quad\\to\\quad \\delta_{ij} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {e}_{j}^\\dagger {d}_{i} + {d}_{i} {e}_{j}^\\dagger \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(anticomm(c(),d()))\n", "dispnormal(anticomm(c(),e'()))\n", "dispnormal(anticomm(c(:i),c'(:j)))\n", "dispnormal(anticomm(d(:i),e'(:j)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, operators for two-level systems (Pauli matrices) are written in terms of the Hermitian matrices $\\sigma^x,\\sigma^y,\\sigma^z$ (we use superscripts so as to avoid possible confusion with indices)." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "${{\\sigma}}_{3}^x$" ], "text/plain": [ "σˣ(3)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "${{\\sigma}}_{3}^z$" ], "text/plain": [ "σᶻ(3)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\frac{1}{2} {{\\sigma}}_{1}^x + \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^y$" ], "text/plain": [ "1//2 σˣ(1) + 1//2i σʸ(1)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(σx(3))\n", "display(σz(3))\n", "display(σp(1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`normal_form` contracts products of Pauli matrices" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{{\\sigma}}^x}^{2} \\quad\\to\\quad 1 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(σx()^2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... but not if indices are different (since the expression would be $\\delta_{ij} + \\sigma^x_i \\sigma^x_j (1-\\delta_{ij})$)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{\\sigma}}_{i}^x {{\\sigma}}_{j}^x \\quad\\to\\quad {{\\sigma}}_{i}^x {{\\sigma}}_{j}^x $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(σx(:i)*σx(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Commutation is performed, using $[\\sigma^a, \\sigma^b] = 2 i \\varepsilon_{a b c} \\sigma^c$ " ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{\\sigma}}_{i}^z {{\\sigma}}_{j}^x \\quad\\to\\quad 2\\mathit{i} \\delta_{ij} {{\\sigma}}_{i}^y + {{\\sigma}}_{j}^x {{\\sigma}}_{i}^z $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(σz(:i)*σx(:j))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Excitation/deexcitation operators $\\sigma^\\pm$ get rewritten in terms of $\\sigma^{x,y,z}$ by default." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\frac{1}{4} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^x + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^y + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{j}^y {{\\sigma}}_{i}^x + \\frac{1}{4} {{\\sigma}}_{j}^y {{\\sigma}}_{i}^y \\quad\\to\\quad - \\frac{1}{2} \\delta_{ij} {{\\sigma}}_{i}^z + \\frac{1}{4} {{\\sigma}}_{i}^x {{\\sigma}}_{j}^x + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{i}^x {{\\sigma}}_{j}^y + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^y + \\frac{1}{4} {{\\sigma}}_{i}^y {{\\sigma}}_{j}^y $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(σm(:j)*σp(:i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With `QuantumAlgebra.use_σpm()`, we can ask to use the excitation/deexcitation operators $\\sigma^+$ and $\\sigma^-$ instead of the Pauli matrices $\\sigma^{x,y,z}$ as the \"natural\" basis.\n", "\n", "Note that exchanging them easily produces \"complicated\" expressions since they are neither bosons nor fermions, but most properly thought of as \"hard-core bosons\"." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{\\sigma}}_{j}^- {{\\sigma}}_{i}^+ \\quad\\to\\quad \\delta_{ij} - 2 \\delta_{ij} {{\\sigma}}_{i}^+ {{\\sigma}}_{i}^- + {{\\sigma}}_{i}^+ {{\\sigma}}_{j}^- $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "QuantumAlgebra.use_σpm()\n", "dispnormal(σm(:j)*σp(:i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use `QuantumAlgebra.use_σxyz()` to switch back to $\\sigma^{x,y,z}$." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\frac{1}{4} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^x + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^y + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{j}^y {{\\sigma}}_{i}^x + \\frac{1}{4} {{\\sigma}}_{j}^y {{\\sigma}}_{i}^y \\quad\\to\\quad - \\frac{1}{2} \\delta_{ij} {{\\sigma}}_{i}^z + \\frac{1}{4} {{\\sigma}}_{i}^x {{\\sigma}}_{j}^x + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{i}^x {{\\sigma}}_{j}^y + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{j}^x {{\\sigma}}_{i}^y + \\frac{1}{4} {{\\sigma}}_{i}^y {{\\sigma}}_{j}^y $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "QuantumAlgebra.use_σxyz()\n", "dispnormal(σm(:j)*σp(:i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scalars are incorporated \"naturally\", with the code trying to use integers and rationals where possible." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ - 1 + {a} {a}^\\dagger \\quad\\to\\quad {a}^\\dagger {a} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\frac{1}{2} {a} {{a}^\\dagger}^{2} \\quad\\to\\quad {a}^\\dagger + \\frac{1}{2} {{a}^\\dagger}^{2} {a} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\frac{5}{4} {{\\sigma}}^x {{\\sigma}}^y {{\\sigma}}^z \\quad\\to\\quad \\frac{5}{4}\\mathit{i} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ 2 {{\\sigma}}^x {{\\sigma}}^y {{\\sigma}}^z \\quad\\to\\quad 2\\mathit{i} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ - \\frac{1}{2} + \\frac{1}{4} {{{\\sigma}}_{1}^x}^{2} + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{1}^x {{\\sigma}}_{1}^y + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{1}^x + \\frac{1}{4} {{{\\sigma}}_{1}^y}^{2} \\quad\\to\\quad \\frac{1}{2} {{\\sigma}}_{1}^z $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(a()*a'() - 1)\n", "dispnormal(1//2*a()*a'()*a'())\n", "dispnormal(5//4*σx()*σy()*σz())\n", "dispnormal(6//3*σx()*σy()*σz())\n", "dispnormal(σp(1) * σm(1) - 1//2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analytic sums\n", "Define sums over indices with `∑(ind`, where `∑` is entered as `\\sum` (note that this is **not** `Σ = \\Sigma`). Sum indices are automatically renamed to the special symbol `#ᵢ` (with $i=1,2,\\ldots$) and reordered since they have no definite identity.\n", "Sums over $\\delta$s disappear automatically." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{\\#_{1}} {a}_{j}^\\dagger \\quad\\to\\quad 1 + \\sum_{\\#_{1}} {a}_{j}^\\dagger {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} g_{\\#_{1}} {a}_{\\#_{1}} {a}_{j}^\\dagger \\quad\\to\\quad g_{j} + \\sum_{\\#_{1}} g_{\\#_{1}} {a}_{j}^\\dagger {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(∑(:i, a(:i)*a'(:j)))\n", "dispnormal(∑(:i, Pr\"g_i\"*a(:i)*a'(:j)))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{\\#_{1}\\#_{1}}^\\dagger$" ], "text/plain": [ "∑₁ ω(#₁) a†(#₁#₁)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{kk} {a}_{\\#_{1}\\#_{1}}^\\dagger \\quad\\to\\quad {\\omega}_{k} + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{\\#_{1}\\#_{1}}^\\dagger {a}_{kk} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "H = ∑(:i,Pr\"ω_i\"*a'(:i,:i))\n", "display(H)\n", "dispnormal(a(:k,:k)*H)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}}$" ], "text/plain": [ "∑₁ ω(#₁) a†(#₁) a(#₁)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{k} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad {\\omega}_{k} {a}_{k} + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {a}_{k} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "H = ∑(:i,Pr\"ω_i\"*a'(:i)*a(:i))\n", "display(H)\n", "dispnormal(a(:k)*H)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{n}^\\dagger {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{n}^\\dagger {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{n} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad {a}_{n} + \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {a}_{n} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {{\\sigma}}_{n}^z {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{n}^z {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} g_{n} {a}_{n} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} \\quad\\to\\quad g_{n} {a}_{n} + \\sum_{\\#_{1}} g_{n} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {a}_{n} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {a}_{n}^\\dagger \\quad\\to\\quad {a}_{n}^\\dagger + \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{n}^\\dagger {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {{a}_{n}^\\dagger}^{2} \\quad\\to\\quad 2 {{a}_{n}^\\dagger}^{2} + \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {{a}_{n}^\\dagger}^{2} {a}_{\\#_{1}} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} {a}_{n}^\\dagger {a}_{n} \\quad\\to\\quad {a}_{n}^\\dagger {a}_{n} + \\sum_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{n}^\\dagger {a}_{\\#_{1}} {a}_{n} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = ∑(:i,a'(:i)*a(:i))\n", "dispnormal(x)\n", "dispnormal(a'(:n)*x)\n", "dispnormal(a(:n)*x)\n", "dispnormal(σz(:n)*x)\n", "dispnormal(Pc\"g_n\"*a(:n)*x)\n", "dispnormal(x*a'(:n))\n", "dispnormal(x*a'(:n)*a'(:n))\n", "dispnormal(x*a'(:n)*a(:n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Commutators" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ {{\\sigma}}_{5}^x {{\\sigma}}_{3}^y - {{\\sigma}}_{3}^y {{\\sigma}}_{5}^x \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ 0 \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {{\\sigma}}_{1}^x {{\\sigma}}_{1}^z - {{\\sigma}}_{1}^z {{\\sigma}}_{1}^x \\quad\\to\\quad -2\\mathit{i} {{\\sigma}}_{1}^y $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ 2 {{\\sigma}}_{5}^x {{\\sigma}}_{5}^y - 2 {{\\sigma}}_{5}^y {{\\sigma}}_{5}^x \\quad\\to\\quad 4\\mathit{i} {{\\sigma}}_{5}^z $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ - {{\\sigma}}_{5}^x {{{\\sigma}}_{5}^y}^{2} + 2 {{\\sigma}}_{5}^y {{\\sigma}}_{5}^x {{\\sigma}}_{5}^y - {{{\\sigma}}_{5}^y}^{2} {{\\sigma}}_{5}^x \\quad\\to\\quad - 4 {{\\sigma}}_{5}^x $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(σx(5),σy(3)))\n", "dispnormal(comm(σx(5),σx(5)))\n", "dispnormal(comm(σx(1),σz(1)))\n", "dispnormal(2*comm(σx(5),σy(5)))\n", "dispnormal(comm(σy(5),comm(σx(5),σy(5))))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\frac{6}{5} h g {{\\sigma}}_{5}^x {{\\sigma}}_{5}^y - \\frac{6}{5} g h {{\\sigma}}_{5}^y {{\\sigma}}_{5}^x \\quad\\to\\quad \\frac{12}{5}\\mathit{i} g h {{\\sigma}}_{5}^z $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(2//5*param(:h)*σx(5),3*param(:g)*σy(5)))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ 0 \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\frac{-1}{2}\\mathit{i} {{\\sigma}}_{1}^x {{\\sigma}}_{1}^y + \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{1}^x \\quad\\to\\quad {{\\sigma}}_{1}^z $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^x {{\\sigma}}_{1}^y + \\frac{-1}{2}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{1}^x \\quad\\to\\quad - {{\\sigma}}_{1}^z $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ 0 \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ \\frac{1}{4} {{\\sigma}}_{1}^x {{\\sigma}}_{2}^x + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{1}^x {{\\sigma}}_{2}^y - \\frac{1}{4} {{\\sigma}}_{2}^x {{\\sigma}}_{1}^x + \\frac{1}{4}\\mathit{i} {{\\sigma}}_{2}^x {{\\sigma}}_{1}^y + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{2}^x + \\frac{1}{4} {{\\sigma}}_{1}^y {{\\sigma}}_{2}^y + \\frac{-1}{4}\\mathit{i} {{\\sigma}}_{2}^y {{\\sigma}}_{1}^x - \\frac{1}{4} {{\\sigma}}_{2}^y {{\\sigma}}_{1}^y \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(σp(1),σp(1)))\n", "dispnormal(comm(σp(1),σm(1)))\n", "dispnormal(comm(σm(1),σp(1)))\n", "dispnormal(comm(σm(1),σm(1)))\n", "dispnormal(comm(σm(1),σp(2)))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\frac{1}{2} {{\\sigma}}_{1}^x {{\\sigma}}_{1}^z + \\frac{-1}{2}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{1}^z - \\frac{1}{2} {{\\sigma}}_{1}^z {{\\sigma}}_{1}^x + \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^z {{\\sigma}}_{1}^y \\quad\\to\\quad {{\\sigma}}_{1}^x -\\mathit{i} {{\\sigma}}_{1}^y $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(σm(1),σz(1)))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ - {a}_{1}^\\dagger {a}_{2} + {a}_{2} {a}_{1}^\\dagger \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(a(2),a'(1)))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ - {a}_{1}^\\dagger {{a}_{1}}^{2} + {a}_{1} {a}_{1}^\\dagger {a}_{1} \\quad\\to\\quad {a}_{1} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ - {a}_{1}^\\dagger {a}_{2} {{a}_{1}}^{2} + {a}_{1} {a}_{1}^\\dagger {a}_{2} {a}_{1} \\quad\\to\\quad {a}_{1} {a}_{2} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ {a}_{1} {a}_{2} {a}_{1}^\\dagger {a}_{1} {a}_{2}^\\dagger - {a}_{2} {a}_{1}^\\dagger {a}_{1} {a}_{2}^\\dagger {a}_{1} \\quad\\to\\quad {a}_{1} + {a}_{2}^\\dagger {a}_{1} {a}_{2} $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(comm(a(1),a'(1)*a(1)))\n", "dispnormal(comm(a(1),a'(1)*a(2)*a(1)))\n", "dispnormal(comm(a(1),a(2)*a'(1)*a(1)*a'(2)))" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$ \\frac{1}{2} {{\\sigma}}_{1}^x + \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^y + \\frac{1}{2} {{\\sigma}}_{1}^x {{\\sigma}}_{1}^z + \\frac{1}{2}\\mathit{i} {{\\sigma}}_{1}^y {{\\sigma}}_{1}^z \\quad\\to\\quad 0 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dispnormal(σp(1)*σz(1) + σp(1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Many-mode Tavis-Cummings" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\frac{1}{2} \\sum_{\\#_{1}} {\\omega}e_{\\#_{1}} {{\\sigma}}_{\\#_{1}}^z + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{\\#_{2}}^x + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}} + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} {a}_{\\#_{1}} {{\\sigma}}_{\\#_{2}}^x$" ], "text/plain": [ "1//2 ∑₁ ωe(#₁) σᶻ(#₁) + ∑₁₂ g(#₁#₂) a†(#₁) σˣ(#₂) + ∑₁ ω(#₁) a†(#₁) a(#₁) + ∑₁₂ g(#₁#₂) a(#₁) σˣ(#₂)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "H = ∑(:i,Pr\"ω_i\"*a'(:i)*a(:i)) + ∑(:j,1//2*Pr\"ωe_j\"*σz(:j)) + ∑(:i,∑(:j,Pr\"g_i,j\"*(a'(:i)+a(:i))*σx(:j)))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\sum_{\\#_{1}} g_{m\\#_{1}} {a}_{n}^\\dagger {{\\sigma}}_{\\#_{1}}^x + {\\omega}_{m} {a}_{n}^\\dagger {a}_{m} - {\\omega}_{n} {a}_{n}^\\dagger {a}_{m} - \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x {a}_{m}$" ], "text/plain": [ "∑₁ g(m#₁) a†(n) σˣ(#₁) + ω(m) a†(n) a(m) - ω(n) a†(n) a(m) - ∑₁ g(n#₁) σˣ(#₁) a(m)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\sum_{\\#_{1}} g_{n\\#_{1}} {a}_{n}^\\dagger {{\\sigma}}_{\\#_{1}}^x - \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x {a}_{n}$" ], "text/plain": [ "∑₁ g(n#₁) a†(n) σˣ(#₁) - ∑₁ g(n#₁) σˣ(#₁) a(n)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$0$" ], "text/plain": [ "0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tmp1 = normal_form(comm(a'(:n)*a(:m),H))\n", "tmp2 = normal_form(comm(a'(:n)*a(:n),H))\n", "display(tmp1)\n", "display(tmp2)\n", "display(tmp2 - QuantumAlgebra.replace_inds(QuantumAlgebra.QuIndex(:m)=>QuantumAlgebra.QuIndex(:n))(tmp1))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$[{a}_{n},H] = \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x + {\\omega}_{n} {a}_{n}$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$[{a}_{n}^\\dagger,H] = - {\\omega}_{n} {a}_{n}^\\dagger - \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$[{{\\sigma}}_{k}^x,H] = -\\mathit{i} {\\omega}e_{k} {{\\sigma}}_{k}^y$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$[{{\\sigma}}_{k}^y,H] = \\mathit{i} {\\omega}e_{k} {{\\sigma}}_{k}^x -2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{k}^z -2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {{\\sigma}}_{k}^z {a}_{\\#_{1}}$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$[{{\\sigma}}_{k}^z,H] = 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{k}^y + 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {{\\sigma}}_{k}^y {a}_{\\#_{1}}$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for op in [a(:n),a'(:n),σx(:k),σy(:k),σz(:k)]\n", " display(\"text/latex\",string(\"\\$[\",latex(op),\",H] = \",latex(normal_form(comm(op,H))),\"\\$\"))\n", "end" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$[{a}_{n}^\\dagger {{\\sigma}}_{k}^z,H] = - {\\omega}_{n} {a}_{n}^\\dagger {{\\sigma}}_{k}^z - \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x {{\\sigma}}_{k}^z + 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {a}_{\\#_{1}}^\\dagger {a}_{n}^\\dagger {{\\sigma}}_{k}^y + 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {a}_{n}^\\dagger {{\\sigma}}_{k}^y {a}_{\\#_{1}}$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$[{a}_{n} {{\\sigma}}_{k}^z,H] = 2\\mathit{i} g_{nk} {{\\sigma}}_{k}^y + \\sum_{\\#_{1}} g_{n\\#_{1}} {{\\sigma}}_{\\#_{1}}^x {{\\sigma}}_{k}^z + {\\omega}_{n} {{\\sigma}}_{k}^z {a}_{n} + 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{k}^y {a}_{n} + 2\\mathit{i} \\sum_{\\#_{1}} g_{\\#_{1}k} {{\\sigma}}_{k}^y {a}_{\\#_{1}} {a}_{n}$" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for op in [a'(:n)*σz(:k),a(:n)*σz(:k)]\n", " display(\"text/latex\",string(\"\\$[\",latex(op),\",H] = \",latex(normal_form(comm(op,H))),\"\\$\"))\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cumulant expansions\n", "`expval_as_corrs` expresses expectation values of operator products in terms of correlators." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\frac{1}{2} \\sum_{\\#_{1}} {\\omega}e_{\\#_{1}} \\langle {{\\sigma}}_{\\#_{1}}^z\\rangle + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{\\#_{2}}^x\\rangle + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} \\langle {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}}\\rangle + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {a}_{\\#_{1}} {{\\sigma}}_{\\#_{2}}^x\\rangle $" ], "text/plain": [ "1//2 ∑₁ ωe(#₁) ⟨σᶻ(#₁)⟩ + ∑₁₂ g(#₁#₂) ⟨a†(#₁) σˣ(#₂)⟩ + ∑₁ ω(#₁) ⟨a†(#₁) a(#₁)⟩ + ∑₁₂ g(#₁#₂) ⟨a(#₁) σˣ(#₂)⟩ " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expval(H)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\frac{1}{2} \\sum_{\\#_{1}} {\\omega}e_{\\#_{1}} \\langle {{\\sigma}}_{\\#_{1}}^z\\rangle_{c} + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {a}_{\\#_{1}}^\\dagger\\rangle_{c} \\langle {{\\sigma}}_{\\#_{2}}^x\\rangle_{c} + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} \\langle {a}_{\\#_{1}}^\\dagger\\rangle_{c} \\langle {a}_{\\#_{1}}\\rangle_{c} + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {{\\sigma}}_{\\#_{2}}^x\\rangle_{c} \\langle {a}_{\\#_{1}}\\rangle_{c} + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {a}_{\\#_{1}}^\\dagger {{\\sigma}}_{\\#_{2}}^x\\rangle_{c} + \\sum_{\\#_{1}} {\\omega}_{\\#_{1}} \\langle {a}_{\\#_{1}}^\\dagger {a}_{\\#_{1}}\\rangle_{c} + \\sum_{\\#_{1}\\#_{2}} g_{\\#_{1}\\#_{2}} \\langle {a}_{\\#_{1}} {{\\sigma}}_{\\#_{2}}^x\\rangle_{c} $" ], "text/plain": [ "1//2 ∑₁ ωe(#₁) ⟨σᶻ(#₁)⟩c + ∑₁₂ g(#₁#₂) ⟨a†(#₁)⟩c ⟨σˣ(#₂)⟩c + ∑₁ ω(#₁) ⟨a†(#₁)⟩c ⟨a(#₁)⟩c + ∑₁₂ g(#₁#₂) ⟨σˣ(#₂)⟩c ⟨a(#₁)⟩c + ∑₁₂ g(#₁#₂) ⟨a†(#₁) σˣ(#₂)⟩c + ∑₁ ω(#₁) ⟨a†(#₁) a(#₁)⟩c + ∑₁₂ g(#₁#₂) ⟨a(#₁) σˣ(#₂)⟩c " ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expval_as_corrs(H)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\langle {a}_{2}\\rangle_{c} $" ], "text/plain": [ "⟨a(2)⟩c " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$3 \\langle {a}_{2}\\rangle_{c} $" ], "text/plain": [ "3 ⟨a(2)⟩c " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(expval_as_corrs(a(2)))\n", "display(expval_as_corrs(3*a(2)))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "using Latexify" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "${\\langle {a}_{2}\\rangle_{c}}^{2} + \\langle {{a}_{2}}^{2}\\rangle_{c} $" ], "text/plain": [ "⟨a(2)⟩c² + ⟨a(2)²⟩c " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$2 \\langle {a}_{1}\\rangle_{c} \\langle {a}_{2}\\rangle_{c} \\langle {a}_{3}\\rangle_{c} + 2 \\langle {a}_{1}\\rangle_{c} \\langle {a}_{2} {a}_{3}\\rangle_{c} + 2 \\langle {a}_{2}\\rangle_{c} \\langle {a}_{1} {a}_{3}\\rangle_{c} + 2 \\langle {a}_{3}\\rangle_{c} \\langle {a}_{1} {a}_{2}\\rangle_{c} + 2 \\langle {a}_{1} {a}_{2} {a}_{3}\\rangle_{c} $" ], "text/plain": [ "2 ⟨a(1)⟩c ⟨a(2)⟩c ⟨a(3)⟩c + 2 ⟨a(1)⟩c ⟨a(2) a(3)⟩c + 2 ⟨a(2)⟩c ⟨a(1) a(3)⟩c + 2 ⟨a(3)⟩c ⟨a(1) a(2)⟩c + 2 ⟨a(1) a(2) a(3)⟩c " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle {a}_{1}\\rangle_{c} \\langle {a}_{2}\\rangle_{c} \\langle {a}_{3}\\rangle_{c} \\langle {a}_{4}\\rangle_{c} + \\langle {a}_{1}\\rangle_{c} \\langle {a}_{2}\\rangle_{c} \\langle {a}_{3} {a}_{4}\\rangle_{c} + \\langle {a}_{1}\\rangle_{c} \\langle {a}_{3}\\rangle_{c} \\langle {a}_{2} {a}_{4}\\rangle_{c} + \\langle {a}_{1}\\rangle_{c} \\langle {a}_{4}\\rangle_{c} \\langle {a}_{2} {a}_{3}\\rangle_{c} + \\langle {a}_{1}\\rangle_{c} \\langle {a}_{2} {a}_{3} {a}_{4}\\rangle_{c} + \\langle {a}_{2}\\rangle_{c} \\langle {a}_{3}\\rangle_{c} \\langle {a}_{1} {a}_{4}\\rangle_{c} + \\langle {a}_{2}\\rangle_{c} \\langle {a}_{4}\\rangle_{c} \\langle {a}_{1} {a}_{3}\\rangle_{c} + \\langle {a}_{2}\\rangle_{c} \\langle {a}_{1} {a}_{3} {a}_{4}\\rangle_{c} + \\langle {a}_{3}\\rangle_{c} \\langle {a}_{4}\\rangle_{c} \\langle {a}_{1} {a}_{2}\\rangle_{c} + \\langle {a}_{3}\\rangle_{c} \\langle {a}_{1} {a}_{2} {a}_{4}\\rangle_{c} + \\langle {a}_{4}\\rangle_{c} \\langle {a}_{1} {a}_{2} {a}_{3}\\rangle_{c} + \\langle {a}_{1} {a}_{2}\\rangle_{c} \\langle {a}_{3} {a}_{4}\\rangle_{c} + \\langle {a}_{1} {a}_{3}\\rangle_{c} \\langle {a}_{2} {a}_{4}\\rangle_{c} + \\langle {a}_{1} {a}_{4}\\rangle_{c} \\langle {a}_{2} {a}_{3}\\rangle_{c} + \\langle {a}_{1} {a}_{2} {a}_{3} {a}_{4}\\rangle_{c} $" ], "text/plain": [ "⟨a(1)⟩c ⟨a(2)⟩c ⟨a(3)⟩c ⟨a(4)⟩c + ⟨a(1)⟩c ⟨a(2)⟩c ⟨a(3) a(4)⟩c + ⟨a(1)⟩c ⟨a(3)⟩c ⟨a(2) a(4)⟩c + ⟨a(1)⟩c ⟨a(4)⟩c ⟨a(2) a(3)⟩c + ⟨a(1)⟩c ⟨a(2) a(3) a(4)⟩c + ⟨a(2)⟩c ⟨a(3)⟩c ⟨a(1) a(4)⟩c + ⟨a(2)⟩c ⟨a(4)⟩c ⟨a(1) a(3)⟩c + ⟨a(2)⟩c ⟨a(1) a(3) a(4)⟩c + ⟨a(3)⟩c ⟨a(4)⟩c ⟨a(1) a(2)⟩c + ⟨a(3)⟩c ⟨a(1) a(2) a(4)⟩c + ⟨a(4)⟩c ⟨a(1) a(2) a(3)⟩c + ⟨a(1) a(2)⟩c ⟨a(3) a(4)⟩c + ⟨a(1) a(3)⟩c ⟨a(2) a(4)⟩c + ⟨a(1) a(4)⟩c ⟨a(2) a(3)⟩c + ⟨a(1) a(2) a(3) a(4)⟩c " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle {a}_{2}^\\dagger\\rangle_{c} \\langle {{\\sigma}}_{1}^z\\rangle_{c} \\langle {a}_{1}\\rangle_{c} + \\langle {a}_{2}^\\dagger\\rangle_{c} \\langle {a}_{1} {{\\sigma}}_{1}^z\\rangle_{c} + \\langle {{\\sigma}}_{1}^z\\rangle_{c} \\langle {a}_{2}^\\dagger {a}_{1}\\rangle_{c} + \\langle {a}_{1}\\rangle_{c} \\langle {a}_{2}^\\dagger {{\\sigma}}_{1}^z\\rangle_{c} + \\langle {a}_{2}^\\dagger {a}_{1} {{\\sigma}}_{1}^z\\rangle_{c} $" ], "text/plain": [ "⟨a†(2)⟩c ⟨σᶻ(1)⟩c ⟨a(1)⟩c + ⟨a†(2)⟩c ⟨a(1) σᶻ(1)⟩c + ⟨σᶻ(1)⟩c ⟨a†(2) a(1)⟩c + ⟨a(1)⟩c ⟨a†(2) σᶻ(1)⟩c + ⟨a†(2) a(1) σᶻ(1)⟩c " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(expval_as_corrs(a(2)*a(2)))\n", "display(expval_as_corrs(2*a(1)*a(2)*a(3)))\n", "display(expval_as_corrs(a(1)*a(2)*a(3)*a(4)))\n", "display(expval_as_corrs(a'(2)*a(1)*σz(1)))" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$g \\langle {a}_{3}^\\dagger\\rangle_{c} {\\langle {a}_{2}\\rangle_{c}}^{2} + g \\langle {a}_{3}^\\dagger\\rangle_{c} \\langle {{a}_{2}}^{2}\\rangle_{c} + 2 g \\langle {a}_{2}\\rangle_{c} \\langle {a}_{3}^\\dagger {a}_{2}\\rangle_{c} + g \\langle {a}_{3}^\\dagger {{a}_{2}}^{2}\\rangle_{c} $" ], "text/plain": [ "g ⟨a†(3)⟩c ⟨a(2)⟩c² + g ⟨a†(3)⟩c ⟨a(2)²⟩c + 2 g ⟨a(2)⟩c ⟨a†(3) a(2)⟩c + g ⟨a†(3) a(2)²⟩c " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$ - g_{1} \\langle {{\\sigma}}_{1}^z\\rangle_{c} $" ], "text/plain": [ "-g(1) ⟨σᶻ(1)⟩c " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(expval_as_corrs( Pr\"g\"*a'(3)*a(2)*a(2)))\n", "display(expval_as_corrs(-Pr\"g_1\"*σz(1)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vacuum expectation values" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$0$" ], "text/plain": [ "0" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$1$" ], "text/plain": [ "1" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(vacA(Avac(σp(1)*σm(1))))\n", "display(vacA(Avac(σm(1)*σp(1))))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$|\\psi\\rangle = \\left(0.7071 {a}_{n}^\\dagger + 0.2887 {{a}_{n}^\\dagger}^{3}\\right)|0\\rangle$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|1|\\psi\\rangle = 1$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|{a}_{n}^\\dagger {a}_{n}|\\psi\\rangle = 2 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|{{a}_{n}^\\dagger}^{2} {{a}_{n}}^{2}|\\psi\\rangle = 3 $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$|\\psi\\rangle = \\left(0.7071 {a}_{m}^\\dagger + 0.2887 {{a}_{n}^\\dagger}^{3}\\right)|0\\rangle$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|1|\\psi\\rangle = 1$" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|{a}_{n}^\\dagger {a}_{n}|\\psi\\rangle = 1.5 + 0.5 \\delta_{mn} $" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\langle\\psi|{{a}_{n}^\\dagger}^{2} {{a}_{n}}^{2}|\\psi\\rangle = 3 $" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nphotstate(n,ind) = a'(ind)^n / sqrt(factorial(n))\n", "for i2 = (:n,:m)\n", " stateop = 1/√2*nphotstate(3,:n) + 1/√2*nphotstate(1,i2)\n", " display(\"text/latex\",string(\"\\$|\\\\psi\\\\rangle = \\\\left(\",latex(stateop),\"\\\\right)|0\\\\rangle\\$\"))\n", " for A in [one(QuExpr),a'(:n)*a(:n),a'(:n)*a'(:n)*a(:n)*a(:n)]\n", " display(\"text/latex\",string(\"\\$\\\\langle\\\\psi|\",latex(A),\"|\\\\psi\\\\rangle = \",latex(vacExpVal(A,stateop)),\"\\$\"))\n", " end\n", " i2 == :n && display(\"text/latex\",\"\")\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convert QuantumAlgebra expressions to julia expressions (code)\n", "\n", "For converting to code, we cannot have bare operators, but only expectation values or correlators/cumulants. An expectation value $\\langle a^\\dagger_i a_j\\rangle$ is represented as a two-dimensional array `aᴴa[i,j]`, etc. Sums are not written explicitly, but indicated by special sum index names `s̄ᵢ`, which are not possible \"normal\" index symbols (since `\"s̄\"` is a two-character unicode string, and we only allow single-character indices). $\\delta$ are converted to `I` (code using this should have `using LinearAlgebra`, which defines `I` as the `UniformScaling` type, with `I[i,j] = δᵢⱼ`)." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$1 + \\delta_{k_{1}k_{2}} + \\sum_{\\#_{1}} \\langle {a}_{j}^\\dagger {a}_{\\#_{1}}\\rangle - \\langle {f}_{k_{2}}^\\dagger {f}_{k_{1}}\\rangle $" ], "text/plain": [ "1 + δ(k₁k₂) + ∑₁ ⟨a†(j) a(#₁)⟩ - ⟨f†(k₂) f(k₁)⟩ " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ ":(1.0 + I[k₁, k₂] + aᴴa[j, s̄₁] + -1.0 * fᴴf[k₂, k₁])" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = ∑(:i, a(:i)*a'(:j)) + f(:k_1)*f'(:k_2)\n", "x = expval(normal_form(x))\n", "display(x)\n", "julia_expression(x)" ] } ], "metadata": { "language_info": { "name": "julia" } }, "nbformat": 4, "nbformat_minor": 4 }