{
	"cells" : 
	[
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "\\section*{Bosonic string oscillator algebra}\n\nThe computation below shows how you can do oscillator algebra for the (open) bosonic string.\nWe illustrate this by the classic computation which shows that you can construct a state\nwhich satisfies all the constraints but has negative norm when $d>26$. This is not a terribly difficult\ncomputation with pen-and-paper, but it is tricky to do with many other computer algebra systems (and\nif they handle it, their output will not look as nice as what you see below)."
				}
			],
			"hidden" : true,
			"source" : "\\section*{Bosonic string oscillator algebra}\n\nThe computation below shows how you can do oscillator algebra for the (open) bosonic string.\nWe illustrate this by the classic computation which shows that you can construct a state\nwhich satisfies all the constraints but has negative norm when $d>26$. This is not a terribly difficult\ncomputation with pen-and-paper, but it is tricky to do with many other computer algebra systems (and\nif they handle it, their output will not look as nice as what you see below)."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\text{Attached property SelfNonCommuting to~}\\alpha_{n}\\,^{\\mu}.\\end{dmath*}"
				},
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\text{Attached property LaTeXForm to {\\tt $\\backslash{}$}vac}.\\end{dmath*}"
				}
			],
			"source" : "\\alpha_{n}^{\\mu}::SelfNonCommuting;\n\\vac::LaTeXForm(\"|k\\rangle\");"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"source" : "def post_process(ex):\n   substitute(ex, $\\sqrt{2} \\sqrt{2} -> 2$)\n   collect_terms(ex)"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "We first need to define the various objects, mostly non-commuting operators."
				}
			],
			"hidden" : true,
			"source" : "We first need to define the various objects, mostly non-commuting operators."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\text{Attached property NonCommuting to~}\\left[\\alpha_{n}\\,^{\\mu},~\\discretionary{}{}{} |k\\rangle\\right].\\end{dmath*}"
				}
			],
			"source" : "{\\alpha_{n}^{\\mu}, \\vac}::NonCommuting;\n{\\mu,\\nu,\\rho}::Integer(0..d-1).\n{\\mu,\\nu,\\rho}::Indices.\n{m,n}::Integer.\n{m,n}::Symbol.\n\\delta{#}::KroneckerDelta.\n\\delta{#}::Diagonal."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "The trial state is given by $|\\chi\\rangle = |\\chi_1\\rangle + |\\chi_2\\rangle + |\\chi_3\\rangle$ with the three terms\ngiven by the following expressions:"
				}
			],
			"hidden" : true,
			"source" : "The trial state is given by $|\\chi\\rangle = |\\chi_1\\rangle + |\\chi_2\\rangle + |\\chi_3\\rangle$ with the three terms\ngiven by the following expressions:"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\alpha_{-1}\\,^{\\mu} \\alpha_{-1}\\,^{\\mu} |k\\rangle\\end{dmath*}"
				},
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\alpha_{0}\\,^{\\mu} \\alpha_{-2}\\,^{\\mu} |k\\rangle\\end{dmath*}"
				},
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\alpha_{0}\\,^{\\mu} \\alpha_{-1}\\,^{\\mu} \\alpha_{0}\\,^{\\nu} \\alpha_{-1}\\,^{\\nu} |k\\rangle\\end{dmath*}"
				}
			],
			"source" : "chi1:= \\alpha_{-1}^{\\mu} \\alpha_{-1}^{\\mu} \\vac;\nchi2:= \\alpha_{0}^\\mu \\alpha_{-2}^\\mu \\vac;\nchi3:= \\alpha_{0}^{\\mu} \\alpha_{-1}^{\\mu} \\alpha_{0}^{\\nu} \\alpha_{-1}^{\\nu})\\vac;"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "The main ingredient to verify that the $L_1$ and $L_2$ Virasoro constraints hold is, of course, the commutation relations\nbetween the $\\alpha_{m}^\\mu$ operators. What we want to do is commute all annihilation operators to the right until they hit\nthe momentum eigenstate $|k\\rangle$. Note that in the rule below, you need to write the indices on $\\delta_{m, -n}$ using two separate subscripts, otherwise\nyou get $m-n$ as index."
				}
			],
			"hidden" : true,
			"source" : "The main ingredient to verify that the $L_1$ and $L_2$ Virasoro constraints hold is, of course, the commutation relations\nbetween the $\\alpha_{m}^\\mu$ operators. What we want to do is commute all annihilation operators to the right until they hit\nthe momentum eigenstate $|k\\rangle$. Note that in the rule below, you need to write the indices on $\\delta_{m, -n}$ using two separate subscripts, otherwise\nyou get $m-n$ as index."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\left[\\alpha_{m}\\,^{\\mu} \\alpha_{n}\\,^{\\nu}\\quad\\text{with}\\quad{}m > n \\rightarrow \\alpha_{n}\\,^{\\nu} \\alpha_{m}\\,^{\\mu}+m \\delta_{m -n} \\delta^{\\mu \\nu},~\\discretionary{}{}{} \\alpha_{m}\\,^{\\mu} |k\\rangle\\quad\\text{with}\\quad{}m > 0 \\rightarrow 0,~\\discretionary{}{}{} \\alpha_{0}\\,^{\\mu} |k\\rangle \\rightarrow \\sqrt{2} k^{\\mu} |k\\rangle,~\\discretionary{}{}{} k^{\\mu} k^{\\mu} \\rightarrow -1\\right]\\end{dmath*}"
				}
			],
			"source" : "rl:= { \\alpha_{m}^{\\mu} \\alpha_{n}^{\\nu} | m > n -> \\alpha_{n}^{\\nu} \\alpha_{m}^{\\mu} +  m\\delta_{m}_{-n} \\delta^{\\mu\\nu},\n       \\alpha_{m}^{\\mu} \\vac | m > 0 -> 0, \n       \\alpha_{0}^{\\mu} \\vac -> \\sqrt{2} k^{\\mu} \\vac, k^{\\mu} k^{\\mu} -> -1 };"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "Obviously we need to do this substitution a number of times, and distribute any factors over sums. We will see\nshortly how to automate this with \\verb|converge|."
				}
			],
			"hidden" : true,
			"source" : "Obviously we need to do this substitution a number of times, and distribute any factors over sums. We will see\nshortly how to automate this with \\verb|converge|."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "\\subsection*{Imposing the constraints}\n\nThe $L_m$ Virasoro generators are given by infinite sums. The function below constructs part of that sum explicitly. Of course, you would be a bit\nmore clever when doing things with pen and paper:"
				}
			],
			"hidden" : true,
			"source" : "\\subsection*{Imposing the constraints}\n\nThe $L_m$ Virasoro generators are given by infinite sums. The function below constructs part of that sum explicitly. Of course, you would be a bit\nmore clever when doing things with pen and paper:"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"source" : "def L(m):\n\tins=''\n\tfor n in range(-10,10):\n\t\tif n!=-10:\n\t\t\tins+='+ '\n\t\tins += r'1/2 \\alpha_{'+str(m-n)+r'}^{\\mu} \\alpha_{'+str(n)+r'}^{\\mu}'\n\tex=Ex(ins)\n\treturn ex"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "Here is what $L_0$ looks like; the other operators are similar:"
				}
			],
			"hidden" : true,
			"source" : "Here is what $L_0$ looks like; the other operators are similar:"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\frac{1}{2}\\alpha_{10}\\,^{\\mu} \\alpha_{-10}\\,^{\\mu}+\\frac{1}{2}\\alpha_{9}\\,^{\\mu} \\alpha_{-9}\\,^{\\mu}+\\frac{1}{2}\\alpha_{8}\\,^{\\mu} \\alpha_{-8}\\,^{\\mu}+\\frac{1}{2}\\alpha_{7}\\,^{\\mu} \\alpha_{-7}\\,^{\\mu}+\\frac{1}{2}\\alpha_{6}\\,^{\\mu} \\alpha_{-6}\\,^{\\mu}+\\frac{1}{2}\\alpha_{5}\\,^{\\mu} \\alpha_{-5}\\,^{\\mu}+\\frac{1}{2}\\alpha_{4}\\,^{\\mu} \\alpha_{-4}\\,^{\\mu}+\\frac{1}{2}\\alpha_{3}\\,^{\\mu} \\alpha_{-3}\\,^{\\mu}+\\frac{1}{2}\\alpha_{2}\\,^{\\mu} \\alpha_{-2}\\,^{\\mu}+\\frac{1}{2}\\alpha_{1}\\,^{\\mu} \\alpha_{-1}\\,^{\\mu}+\\frac{1}{2}\\alpha_{0}\\,^{\\mu} \\alpha_{0}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-1}\\,^{\\mu} \\alpha_{1}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-2}\\,^{\\mu} \\alpha_{2}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-3}\\,^{\\mu} \\alpha_{3}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-4}\\,^{\\mu} \\alpha_{4}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-5}\\,^{\\mu} \\alpha_{5}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-6}\\,^{\\mu} \\alpha_{6}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-7}\\,^{\\mu} \\alpha_{7}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-8}\\,^{\\mu} \\alpha_{8}\\,^{\\mu}%\n+\\frac{1}{2}\\alpha_{-9}\\,^{\\mu} \\alpha_{9}\\,^{\\mu}\\end{dmath*}"
				}
			],
			"source" : "L0=L(0);\nL1=L(1)\nL2=L(2)"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "The $L_1$ operator acting on the three terms in the trial state gives the following three terms, which we will need to reduce\nusing the commutation relations (2nd and 3rd term suppressed; you get the idea)."
				}
			],
			"hidden" : true,
			"source" : "The $L_1$ operator acting on the three terms in the trial state gives the following three terms, which we will need to reduce\nusing the commutation relations (2nd and 3rd term suppressed; you get the idea)."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}\\left(\\frac{1}{2}\\alpha_{11}\\,^{\\mu} \\alpha_{-10}\\,^{\\mu}+\\frac{1}{2}\\alpha_{10}\\,^{\\mu} \\alpha_{-9}\\,^{\\mu}+\\frac{1}{2}\\alpha_{9}\\,^{\\mu} \\alpha_{-8}\\,^{\\mu}+\\frac{1}{2}\\alpha_{8}\\,^{\\mu} \\alpha_{-7}\\,^{\\mu}+\\frac{1}{2}\\alpha_{7}\\,^{\\mu} \\alpha_{-6}\\,^{\\mu}+\\frac{1}{2}\\alpha_{6}\\,^{\\mu} \\alpha_{-5}\\,^{\\mu}+\\frac{1}{2}\\alpha_{5}\\,^{\\mu} \\alpha_{-4}\\,^{\\mu}+\\frac{1}{2}\\alpha_{4}\\,^{\\mu} \\alpha_{-3}\\,^{\\mu}+\\frac{1}{2}\\alpha_{3}\\,^{\\mu} \\alpha_{-2}\\,^{\\mu}+\\frac{1}{2}\\alpha_{2}\\,^{\\mu} \\alpha_{-1}\\,^{\\mu}+\\frac{1}{2}\\alpha_{1}\\,^{\\mu} \\alpha_{0}\\,^{\\mu}+\\frac{1}{2}\\alpha_{0}\\,^{\\mu} \\alpha_{1}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-1}\\,^{\\mu} \\alpha_{2}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-2}\\,^{\\mu} \\alpha_{3}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-3}\\,^{\\mu} \\alpha_{4}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-4}\\,^{\\mu} \\alpha_{5}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-5}\\,^{\\mu} \\alpha_{6}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-6}\\,^{\\mu} \\alpha_{7}\\,^{\\mu}+\\frac{1}{2}\\alpha_{-7}\\,^{\\mu} \\alpha_{8}\\,^{\\mu}%\n+\\frac{1}{2}\\alpha_{-8}\\,^{\\mu} \\alpha_{9}\\,^{\\mu}\\right) \\alpha_{-1}\\,^{\\nu} \\alpha_{-1}\\,^{\\nu} |k\\rangle\\end{dmath*}"
				}
			],
			"source" : "L1c1:= @(L1) @(chi1);\nL1c2:= @(L1) @(chi2).\nL1c3:= @(L1) @(chi3)."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "We can now work out what is the action of a Virasoro operator on a state by repeatedly substituting the \ncommutation relations of the $\\alpha_{m}^{\\mu}$ and simplifying, until the result no longer changes.\nBelow, we stick that logic into a function \\verb|act| which you can apply on an expression."
				}
			],
			"hidden" : true,
			"source" : "We can now work out what is the action of a Virasoro operator on a state by repeatedly substituting the \ncommutation relations of the $\\alpha_{m}^{\\mu}$ and simplifying, until the result no longer changes.\nBelow, we stick that logic into a function \\verb|act| which you can apply on an expression."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"source" : "def act(ex):\n\tconverge(ex):\n\t\tdistribute(ex)\n\t\tsubstitute(ex, rl)\n\t\tdistribute(ex)\n\t\teliminate_kronecker(ex)\n\t\trename_dummies(ex)\n\n\treturn ex"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "Here is what happens when you apply the commutator rules to the three terms in the state $L_1 |\\chi\\rangle$:"
				}
			],
			"hidden" : true,
			"source" : "Here is what happens when you apply the commutator rules to the three terms in the state $L_1 |\\chi\\rangle$:"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}2\\alpha_{-1}\\,^{\\mu} \\sqrt{2} k^{\\mu} |k\\rangle\\end{dmath*}"
				}
			],
			"source" : "act(L1c1);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}2\\alpha_{-1}\\,^{\\mu} \\sqrt{2} k^{\\mu} |k\\rangle\\end{dmath*}"
				}
			],
			"source" : "act(L1c2);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}-4\\alpha_{-1}\\,^{\\mu} \\sqrt{2} |k\\rangle k^{\\mu}\\end{dmath*}"
				}
			],
			"source" : "act(L1c3);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "The procedure works the same for $L_2|\\chi\\rangle$:"
				}
			],
			"hidden" : true,
			"source" : "The procedure works the same for $L_2|\\chi\\rangle$:"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"source" : "L2c1:= @(L2) @(chi1).\nL2c2:= @(L2) @(chi2).\nL2c3:= @(L2) @(chi3)."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}d |k\\rangle\\end{dmath*}"
				}
			],
			"source" : "act(L2c1);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}-4|k\\rangle\\end{dmath*}"
				}
			],
			"source" : "act(L2c2);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}-2|k\\rangle\\end{dmath*}"
				}
			],
			"source" : "act(L2c3);"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "The constraints $L_1 |\\chi\\rangle=0$ and $L_2 |\\chi\\rangle=0$ thus reduce to"
				}
			],
			"hidden" : true,
			"source" : "The constraints $L_1 |\\chi\\rangle=0$ and $L_2 |\\chi\\rangle=0$ thus reduce to"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}2\\alpha_{-1}\\,^{\\mu} \\sqrt{2} k^{\\mu} |k\\rangle+2A \\alpha_{-1}\\,^{\\mu} \\sqrt{2} k^{\\mu} |k\\rangle-4B \\alpha_{-1}\\,^{\\mu} \\sqrt{2} |k\\rangle k^{\\mu} = 0\\end{dmath*}"
				}
			],
			"source" : "tst1:=@(L1c1) + A @(L1c2) + B @(L1c3) = 0;"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"cells" : 
			[
				{
					"cell_origin" : "server",
					"cell_type" : "latex_view",
					"source" : "\\begin{dmath*}{}d |k\\rangle-4A |k\\rangle-2B |k\\rangle = 0\\end{dmath*}"
				}
			],
			"source" : "tst2:=@(L2c1) + A @(L2c2) + B @(L2c3) = 0;"
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "These are solved by $A=\\frac{d-1}{5}$ and $B=\\frac{d+4}{10}$."
				}
			],
			"hidden" : true,
			"source" : "These are solved by $A=\\frac{d-1}{5}$ and $B=\\frac{d+4}{10}$."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "latex",
			"cells" : 
			[
				{
					"cell_origin" : "client",
					"cell_type" : "latex_view",
					"source" : "\\subsection*{Computing the norm}\n\nHaving pinned down the coefficients $A$ and $B$, we now want to compute the norm of the state $|\\chi\\rangle$ (to be added)."
				}
			],
			"hidden" : true,
			"source" : "\\subsection*{Computing the norm}\n\nHaving pinned down the coefficients $A$ and $B$, we now want to compute the norm of the state $|\\chi\\rangle$ (to be added)."
		},
		{
			"cell_origin" : "client",
			"cell_type" : "input",
			"source" : ""
		}
	],
	"description" : "Cadabra JSON notebook format",
	"version" : 1
}
