{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# What is an atom?\n", "## Polyhedral Interlude: Atoms of Space\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We begin with an interesting observation. \n", "\n", "Consider some n x n unitary matrix, and look at its first two columns. They will be orthogonal complex vectors." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import qutip as qt\n", "import numpy as np\n", "\n", "n = 4\n", "U = qt.rand_unitary(n)\n", "col0, col1 = U[:,0], U[:, 1]\n", "print(np.vdot(col0, col1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then form n spinors, by taking the first component of each from the first column, and the second component of each from the second column.\n", "\n", "$ \\begin{pmatrix} a & b & c & d \\\\ e & f & g & h \\\\ i & j & k & l \\\\ m & n & o & p \\end{pmatrix} \\rightarrow \\begin{pmatrix} a & b \\\\ e & f \\\\ i & j \\\\ m & n \\end{pmatrix} \\rightarrow \\Big{\\{} \\begin{pmatrix} a \\\\ b \\end{pmatrix}, \\begin{pmatrix} e \\\\ f \\end{pmatrix}, \\begin{pmatrix} i \\\\ j \\end{pmatrix}, \\begin{pmatrix} m \\\\ n \\end{pmatrix} \\Big{\\}}$\n", "\n", "These spinors in general won't be normalized. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "spinors = [qt.Qobj(np.array([col0[i], col1[i]])) for i in range(n)]\n", "print([s.norm() for s in spinors])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the interesting observation. If you convert all those spinors into $(x, y, z)$ vectors, and add them up: their sum will always be 0." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def spinor_xyz(spinor):\n", " return np.array([qt.expect(qt.sigmax(), spinor), qt.expect(qt.sigmay(), spinor), qt.expect(qt.sigmaz(), spinor)])\n", "\n", "xyzs = [spinor_xyz(s) for s in spinors]\n", "print(sum(xyzs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is a famous theorem due to Minkowski about polyhedra. He tells us that you can describe a polyhedron in terms of its vertices, sure, but you can also uniquely specify a polyhedron by giving: the unit normals to its faces, $\\vec{u_{i}}$, and the areas of those faces $a_{i}$.\n", "\n", "Given $n$ faces, you can package up this information into $n$ vectors: $a_{i}\\vec{u_{i}}$: each such vector points in the direction normal to a face, and has a length equal to the area of the face. The condition that the polyhedron is legit, in other words, that it's *closed* is just:\n", "\n", "$\\sum_{i} a_{i}\\vec{u_{i}} = 0$\n", "\n", "We can therefore see that we can interpret the first two columns of our unitary matrix as specifying a polyhedron: the corresponding spinors the unit normals scaled by the areas. In fact, any two orthogonal complex vectors specify a polyhedron in terms of the components paired off, interpreted as spinors.\n", "\n", "