{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to polytopes in Sage\n",
    "\n",
    "This tutorial aims to showcase some of the possibilities of Sage concerning polytopes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## $V$-representation\n",
    "\n",
    "First, let’s define a polyhedron object as the convex hull of a set of points and some rays."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "P1 = Polyhedron(vertices = [[1, 0], [0, 1]], rays = [[1, 1]])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAucAAAJJCAYAAAAJEZlWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl0U2XCx/FfUpAu0JZCC4gsZZfNorK4IKuALJVVCg6l\noKjjQUQZXFAURBRFRVR2RBGxIIKCC74oIOMoLswoLrggAi6IoECL7NDn/YNJpmnSNmmT5ib5fs7h\nHHpzkzw3ubn59ubm1maMMQIAAAAQdPZgDwAAAADAWcQ5AAAAYBHEOQAAAGARxDkAAABgEcQ5AAAA\nYBHEOQAAAGARxDkAAABgEcQ5AAAAYBHEOQAAAGARYRPnzz//vOx2u3766SfntI4dO6pTp05BHJV/\neFq2YLLb7XrggQfK/H4nTZoku933VXb37t2y2+164oknAjAqV1Z7rhyC9ZyFuk2bNslut+uf//xn\nia6/ZcsWXXbZZapYsaKioqL0xRdflHg99ofSLk9ZqFu3rtLT04M9jIgQiMe6Y8eO6ty5s/Nnx/b3\nhRde8Nt97Nu3TwMHDlRycrKioqL01FNP+e22rSgrK0upqanBHkbQBGIdsroSv0PMnj1bdrtdl1xy\nidfXMcbo+eef19VXX63atWurYsWKatGihaZOnaoTJ06UdCiSJJvNJpvN5jYtWG+C/uRp2SJRKDwO\nVh2jP8flCLzi/jkCMDU1tdh5R44c6fG+Tp06pc6dO8tut6tv374yxnic78CBA5o+fbo6dOiglJQU\nVa5cWZdccolefvnlUi9vSR+306dPa+DAgTp48KCefPJJLVmyRHXq1An6dskK6+c333yjyZMne/wl\n1grjixSBeKzL4vkbO3as3nnnHU2YMEFLlixRjx49PM4XyO2Cv/3222+aPHmyvvjiC7fLgr3NCCVT\np07V1VdfrerVq4f0TqlyJb3iSy+9pNTUVH3yySf68ccfVa9evWKvc/ToUY0cOVKXXHKJ/v73vysl\nJUWbN2/W/fffrw0bNmj9+vUlHY5H77zzjl9vL1gyMzM1ZMgQnXPOOcEeCkLUsWPHVK5ciV/uLs4/\n/3y9+OKLHi/766+/dOuttyouLk6NGjWSJM2cOVN//fWXx/mffvppffLJJ4X+kp+VlaVNmzapd+/e\nev3113XLLbfomWeecZtv8+bNmjhxonr27KmJEyeqXLlyWrlypTIyMvTtt9/qvvvuK+HSltyOHTv0\n008/6dlnn9WIESOc0ydOnKi77767zMdjJdu2bdPkyZPVqVMn1a5dO9jDQYjZuHGj+vbtq9tuu63I\n+ay4XSjMnj17NHnyZKWmpqply5Yuly1cuFB5eXlBGllomThxomrUqKELL7xQ//d//xfs4ZRYid6t\nd+7cqQ8//FCvvvqqbrjhBi1dulQTJ04s9nrnnHOOPvzwQ7Vr18457brrrlOdOnU0adIkbdiwweXj\nsNLyV4wEm81mI8zDzPHjxxUdHV1m9+fP9SclJUVDhw71eNnf/vY3nTx5UsuWLVP16tUlqdCPzdet\nW6dPPvlEV199tUaNGuV2+V133aXly5dr9uzZuvHGG/XQQw9p4sSJql27tu644w6XeZs3b67t27er\nVq1azml///vf1bVrV02bNk3jx49XTExMSRe5RH7//XdJUkJCgst0u90e8a9nYwx7yFFi+/btc3td\neWLF7UJBZ86cUV5eXqGfCkpSVFSUoqKiynBUoWvXrl2qXbu2/vzzTyUnJ5f69o4eParY2Fg/jMw3\nJfqcZOnSpapcubJ69eqlgQMHaunSpV5dr3z58i5h7tCvXz8ZY/TNN994dTvbtm1T586dFRsbq1q1\namnq1Kkef6sseOyb4+P4FStWaPLkyTrvvPMUHx+vQYMG6fDhwzp58qTGjh2ratWqqVKlSho5cqRO\nnTrldrsvvviiLr74YsXGxqpKlSoaMmSIfvnlF7f7btmypb755ht16tRJcXFxOu+88zR9+nS323v6\n6afVvHlzxcXFKSkpSa1bt9ayZcuclxd2HPPs2bPVvHlzRUdHq2bNmho9erRycnJKNI5Tp07pvvvu\n08UXX6zExERVrFhRV1xxhd57773Cn4giOB7rl19+WRMmTFCNGjVUsWJFXX311W6PlSStWLHC+Zgm\nJydr2LBh2rNnT5H30aFDB6WlpXm8rHHjxrrqqqvcpi9YsEANGjRQdHS02rRpoy1btrjN891332ng\nwIGqUqWKYmJi1Lp1a73++utu83m7HjqO61y3bp1at26t6OhozZ8/X9LZDfOUKVOcY0pNTdW9996r\nkydPeryNDz74QG3btlVMTIzq16+vJUuWFPkYORT8eM9x3POOHTuUlZWlypUrKzExUSNHjtTx48e9\nus2CFi1apJdeekk333yzrr766iLn3bt3r4YNG6ZatWpp0aJFbpfPmTNHjz32mObMmaMbb7xRkjRh\nwgQ9+OCDmjBhgrKzs13mr1OnjssbsEPfvn114sQJ/fjjj8WO/9dff1Xfvn1VsWJFVatWTbfffrtO\nnDjh8U3z448/Vo8ePZSYmKi4uDh17NhRH374ofPyESNGqGPHjrLZbBo4cKDsdrtzW+TpmHO73a4x\nY8Zo9erVatGihaKjo9W8eXOPe3727NmjkSNHqnr16s75PD2GvixPQT/99JNuvvlmNWnSRLGxsapa\ntaquueYa7d6922W+06dPa/LkyWrUqJFiYmJUtWpVtW/fvshPQRcvXqxrrrlG0tntk91uV1RUlNtx\n8N6s6zk5ORo7dqxq166t6OhoNWzYUI8++qhXyyhJa9euVYcOHRQfH6+EhAS1adPGbd3yZtuUlZWl\nSpUqac+ePerbt68qVaqklJQUjR8/3jmWU6dOqUqVKrr++uvdxnH48GHFxMTozjvvdE47efKk7r//\nfjVs2FDR0dGqXbu27rzzTpdtw3PPPSe73a7Fixe73N7UqVNlt9u93nNY3GNd2Pck/P0dm507d2rQ\noEGqUqWK4uLidMkll+itt95yXr548WLnOJ555hnnulOY0mwX9u3bp/Lly+vBBx90u+z777+X3W7X\nnDlznNO8WRfzf/9p5syZzu3+7Nmz1aZNG9lsNmVlZTmXy3GMtadjzo0xmjlzplq2bKmYmBilpKTo\nqquu0n/+8x+X+bzplR9++EEDBgxQjRo1FBMTo1q1amnIkCE6fPhwoY+PJP3rX//S4MGDVadOHec6\nevvtt7u9h3jz+sj/OGZlZSkxMVGVK1fWiBEjdOjQoSLHkV9pPolzrOfffPONhg4dqqSkJLVv316S\n9OWXX2rEiBGqX7++YmJiVKNGDV133XU6cOCA8/obN26U3W7X6tWr3W77pZdekt1u18cff+zdYEwJ\nnH/++eaGG24wxhjz/vvvG7vdbrZs2VKSmzLGGLNu3Tpjs9nMsmXLip137969Jjk52VSpUsVMmTLF\nPP7446Zx48bmggsuMHa73ezevds5b8eOHU2nTp2cP7/33nvGZrOZVq1amcsuu8w888wzZuzYsSYq\nKsoMGTLEXHvttaZXr15mzpw5Zvjw4cZut5spU6a43P+DDz5o7Ha7GTp0qJk7d66ZMmWKSU5ONvXq\n1TM5OTku912zZk1Tp04dc9ttt5m5c+earl27Grvdbt5++23nfPPnzzc2m80MHjzYLFiwwDz99NNm\n1KhRZuzYsc55nn/+ebdlu//++43NZjPdu3c3s2bNMmPGjDHlypUzbdu2NadPn/Z5HH/88YepWbOm\n+cc//mHmzZtnHnvsMXP++eebChUqmK1bt7o8BjabzUyePLnI58nxWLds2dKkpaWZJ5980kyYMMHE\nxMSYJk2amOPHjzvnfe6554zNZjPt2rUzM2fONBMmTDCxsbFuj+mkSZOM3W53/rxw4UJjt9vN119/\n7XLfn3zyibHZbGbp0qXGGGN27dplbDabufDCC02jRo3M9OnTzWOPPWaSk5NN7dq1XR6vr776yiQm\nJprmzZub6dOnm9mzZ5uOHTsau91uXnvtNed8vqyHdevWNQ0bNjRVqlQxEyZMMPPnzzebNm0yxhgz\nfPhw5/M/Z84ck5WVZWw2m+nfv7/LMtWtW9c0adLE1KhRw9x7771m9uzZ5uKLLzZRUVFm27ZtRT4X\nnp6zSZMmOR+TgQMHmrlz55obbrjB2O12c9dddxV7ewVt27bNxMXFmVatWpkTJ04UOW9eXp7p0qWL\nKV++vPnggw/cLl+zZo0555xzzMKFCz1e/+GHHzbR0dHmvffeK3ZcEyZMMHa73ezdu7fI+Y4dO2Ya\nNWpkYmNjzd13322eeuop07p1a+fz6Xi+jDFm/fr1pkKFCuayyy4zM2bMMDNnzjRpaWmmQoUK5tNP\nPzXGGPPRRx+Ze++919hsNjN27FizdOlS8+677xpj3NdjY84+P2lpaaZmzZpm6tSp5qmnnjINGjQw\nFStWNH/++adzvt9//92cd955pk6dOmbq1Klm3rx5pm/fvsZms5mZM2eWaHk8eeWVV0yrVq3MpEmT\nzMKFC829995rkpKSTGpqqjl27Jjb43vTTTeZZ5991syYMcNce+215tFHHy30tnfu3GluvfVWY7fb\nzcSJE83SpUvN0qVLzb59+4wx3q/rR48eNS1btjRVq1Y1EydONPPnzzdZWVnGbreb2267rcjlM+bs\ndsdut5uWLVuahx9+2MyZM8fccMMNZvjw4S7zeLNtysrKMrGxsaZ58+bm+uuvN/PmzTODBg0ydrvd\nzJ071znfddddZ5KSksypU6dcxrJ48WJjt9vNf/7zH2PM2ddIt27dTMWKFc24cePMggULzJgxY0z5\n8uVNv379XK7bp08fk5iYaH755RdjjDFffPGFqVChgvM9uijePtae1lljPL83FXzfdWx/Fy9eXORY\nfv/9d1OtWjWTkJBg7rvvPvPkk0+aVq1auWx7d+7caZYuXep873OsO77ydrvQpUsX07x5c7fpkydP\nNuXKlXOus96ui47HolmzZqZBgwbm0UcfNTNnzjQ//fSTmTJlirHZbOamm25yLtfOnTuNMWfXr9TU\nVJcxON4revfubZ566inzxBNPmH79+plZs2Y55/GmV06ePGlSU1PNeeedZx566CGzaNEiM2XKFNO2\nbVvz008/Ffn4jBkzxvTu3dtMmzbNLFiwwIwaNcqUK1fOXHPNNW5j9eb1YYwxV1xxhSlXrpy55ZZb\nzKxZs0zXrl2d263i1qH8/vjjD69aJT/H+2KzZs1Mv379zNy5c82cOXOMMcY8/vjjpkOHDubBBx80\nCxcuNLfddpuJjY017dq1c7mNOnXqmEGDBrndds+ePU3Dhg29HovPcb5lyxZjs9nMhg0bnNNq1arl\n1cawMF27djWJiYkuG7vCjB071u2XgT/++MMkJiZ6HectW7Z0CbKhQ4cau91uevXq5XJfl156qcsL\nYvfu3aZcuXJm2rRpLvN9/fXXpnz58ubhhx92uW+73e6y4Th58qSpXr26yxPXt29f06JFiyKXueAG\ncP/+/aZChQrmqquucplv1qxZxm63m+eff97nceTl5bm9YeTk5Jjq1aub66+/3mW6L3Feq1Ytc+TI\nEef0FStWGJvNZp5++mljjDGnTp0y1apVMxdccIFL1L355pvGZrOZSZMmOacVfIPIzc11xkd+Y8aM\nMZUqVXLer2ODmJyc7LKOrVmzxtjtdvPmm286p3Xp0sWkpaW5PRaXXXaZady4sfNnX9bDunXrGrvd\nbt555x2X29y6daux2WzmxhtvdJk+fvx4Y7fbXeLTcRv5Y3b//v0mOjrajB8/3hSnsDgfNWqUy3z9\n+/c3ycnJxd5efseOHTPNmzc3FStWNN99912x8z/wwAPGZrOZBx980Kf78dWBAwdMtWrVTMeOHYud\n98knnzR2u92sXLnSOe3YsWOmYcOGbjHbqFEj07NnT5frHz9+3NSrV890797dOc3xGsh/m8YUHufR\n0dHON2NjzkaWzWZzebO97rrrTM2aNc3Bgwddrj9kyBBTuXJl5y+9viyPJ/l/eXb4+OOPjc1mMy++\n+KJzWlpamunTp0+Rt+XJK6+8Uug4vF3Xp0yZYipVqmR27Njhcv27777blC9f3hmrnuTk5Jj4+Hhz\n6aWXFvrLpC/bJkeITZ061eU2LrzwQtO6dWvnz44dUfm3OcacfeNu0KCB8+clS5aYcuXKmQ8//NBl\nvnnz5hm73W42b97snLZ3715TpUoV0717d3Py5EnTqlUrk5qaag4fPlzo8jt4+1iXRZw7tqn5l/mv\nv/4y9erVM/Xq1XOZ12azmVtuuaXY5fPEl+3C/PnzPe4AatasmenatavzZ2/XRcdjkZiY6PJLtzH/\naytPj1PBON+wYYOx2WxFdpe3vfL5558bm81mVq1aVdRD4ZGn7cS0adNMVFSU+fnnn13G783r47XX\nXjM2m808/vjjzml5eXnmiiuuKNM4v/baa90u87Ssy5YtM3a73fzrX/9yTnPshMzNzXVO279/vylf\nvrx54IEHvB6Lz4e1LF26VNWrV1fHjh2d0wYPHqxly5Z5/VFifg899JA2bNigRx55RPHx8cXOv3bt\nWrVr104XXXSRc1qVKlV07bXXen2fw4cPd/korG3btpLkdsaItm3b6ueff3YeqrBy5UoZYzRo0CD9\n+eefzn8pKSlq2LChNm7c6HL9uLg4l2Nzy5cvr7Zt27p8lJaYmKhffvnF4+EVhXn33Xd16tQpjR07\n1mX6qFGjVKlSJb355ps+j8NmszmP0TfG6ODBgzp58qQuvvhit4/JfDF8+HCX47UGDhyoGjVqOD+q\n/PTTT7Vv3z7dfPPNLsfh9uzZU02aNHFblvwqVaqk9PR0l4+h8/Ly9PLLL6tfv35ux4llZGS4rGPt\n27eXMcb5OBw8eFAbN27UoEGDlJOT4/Icd+vWTdu3b9dvv/0myff1MDU1VV27dnWZ9tZbb8lms7l9\nqWncuHEyxrgte9OmTXXppZc6f65ataoaN27s1SEbnthsNuchIw7t27fXn3/+WegXOD0ZM2aMtm3b\npmeeecb5JdDCvP/++3rggQfUuXNn3XPPPSUatzeMMRo6dKhycnL09NNPFzv/2rVrVaNGDfXv3985\nLTo6WjfccIPLfJ9//rm2b9+uIUOGuKwfhw8fVpcuXUp1isIrr7xSdevWdf7cokULxcfHuzy/q1at\nUp8+fXTmzBm39fPQoUPO16q3y1OYChUqOP9/+vRpHThwQPXq1VPlypVdtgeJiYn6+uuv9cMPP5R0\nsT3yZl1/5ZVX1L59eyUkJLg8Fl26dNHp06eLfC7eeecd/fXXX7rrrrsKPf5/y5YtPm+bPL2e8o+5\nc+fOqlq1qpYvX+6cdujQIb377rvKyMhwWbbzzz9fjRo1clm2Tp06yRjj8l5TrVo1zZo1S+vWrVP7\n9u31xRdf6Nlnn1XFihULXf78/L1dKam1a9eqTZs2Ll8Oj4uL0w033KBdu3Zp27Ztpb4PX7cLAwYM\nUFRUlMvz9fXXX2vbtm1uz5cv6+LAgQOVlJRU4uVYuXKl7HZ7kV9o9bZXHMfuv/322zp27JhP48i/\nnTh69Kj+/PNPXXLJJcrLy9Nnn33mNn9xr4+1a9eqfPnyuummm5zTbDabbrnllhL1ZUnYbDaX+3fI\nv6wnTpzQn3/+qbZt28oY47JNzMzM1PHjx/XKK684py1btkxnzpzxqVN9ivO8vDwtX75cnTp10o8/\n/qgdO3Zox44datOmjfbu3evz2VaWL1+uiRMn6vrrr3d70/j9999d/jmOYdq9e7caNmzodluNGzf2\n+n4LHoPmWDk9Tc/Ly3Mex/3DDz8oLy9PDRo0UHJysvNfSkqKvv32W+3bt6/I+5GkypUr6+DBg86f\n77zzTlWsWFFt2rRRo0aNNHr0aJdjVz1xHPdZMITKly+vevXquR0X6s04pLPH811wwQWKjo5WlSpV\nlJKSojfffNPtOHZfNGjQwOM0xxh/+ukn2Ww2j1HXpEkTt2UpKDMzUz/99JP+9a9/STr7prtv3z4N\nGzbMbd6Cj0NiYqIkOR+HH374QcYYTZw40eX5TU5O1qRJkyTJ+Rz7uh56Oket4/jDgo9RtWrVlJiY\n6Lbsno6l8/Q8+qLgbVauXFmSvL7N5cuXa+HChRo6dKiGDx9e5LwHDhzQ0KFDVaVKlULP9uIvo0eP\n1rp16/Tss8+qefPmxc6/e/duj+tqwedz+/btks6udwW3AQsXLtTJkydL/Hop7nW6f/9+HTp0SPPn\nz3dbP0eOHCmbzeayfnqzPIU5fvy47rvvPtWuXVsVKlRQ1apVlZKSokOHDrks3wMPPKBDhw6pUaNG\natmype688059+eWXJVl8F96s69u3b9fbb7/t9lhceeWVLo+FJzt27JAkNWvWrNB5du/e7dO2ybHd\nLGrMUVFRGjBggFavXu08dnzlypU6ffq08zh8x7J9/fXXbsvWuHFjj8s2ePBg9e7dW5988olGjRrl\n09/3CMR2pSR2797tcf08//zznZeXlq/bhaSkJHXp0sUlzpctW6by5curX79+zmm+rov5fwkviR9/\n/FHnnnuu8z3ME297pW7duho3bpwWLlyoqlWrqkePHpo9e7Zyc3OLHcfPP/+srKwsValSRRUrVlRy\ncrLzuzYFt4PevD52796tGjVquO1Y86Xv/MHT+/XBgwd16623qnr16oqJiVFycrLq1avntqyNGzdW\n69atXb6L+dJLL6ldu3ZendXQwafTmWzYsEG//fabli1b5valGZvNpqVLl7rtHSzMO++8o+HDh6tP\nnz4uX6pwqFGjhmw2m/Nb/c8995wyMzOd91WQL79VFfYFksKmO247Ly9Pdrtdb7/9tscvxxTcU1Hc\n7UlnN/Lfffed3njjDb399ttatWqVZs+erfvvv1/3339/sdf3hjfjePHFFzVixAj1799fd9xxh1JS\nUhQVFaWHHnrI73tQ8t9vaX8b7t69u1JSUvTiiy/q8ssv14svvqjq1aurS5cubvN68/xK0j/+8Q91\n797d47z5g8eX9dDTGQEc83p71gpvnkdfleY2d+zYoRtvvFENGzbU3Llzi50/MzNTv/32m9544w3n\nmVwCYfLkyZo7d64eeeSRQs8qU5BjO+Npen6OdeTxxx/XBRdc4PG2vN1jWZC36+ff/va3Qn8RcpyC\nzdvlKczo0aO1ePFi3XbbbWrXrp0SEhJks9k0ePBgly89t2/fXjt27NDq1au1bt06LVy4UE888YTm\nzZtX6LnrveHNepmXl6crr7xSd955p8flKupTHG8eB39tZwsaPHiw5s2bp7ffflvp6el6+eWX1aRJ\nE7Vo0cI5T15enlq0aKEZM2Z4HEfBX+QOHDigLVu2yGaz+byH2ZvHurBt1JkzZ3y6r2AqyXZBOvt8\nXXfddfriiy/UsmVLrVixQl27dnXZ8+3ruljaM8R4s2760ivTp09XVlaW83U8ZswYTZs2TR999JHO\nPffcQm+/a9euOnTokO6++241btxYcXFx+vXXXzV8+HC3kyN48/oo7XbLXzw9P4MGDdJHH32kO+64\nQxdccIEqVqyovLw8de/e3W1ZMzMzNXbsWO3Zs0fHjh3TRx99pNmzZ/s0Bp/i/MUXX1S1atU0e/Zs\ntwdr5cqVevXVVzV37lyX3f+efPLJJ+rfv7/atGmj5cuXe1xx3n33XZefHXs46tSpo++//95t/u++\n+86XRSmR+vXryxijunXretwrVVIxMTEaNGiQBg0apNOnT6tfv36aOnWq7r77bo8fuTp+6/7uu+9c\nfgM/deqUdu7cqSuvvNLnMaxcuVL169d3+ShGUqnPA+vY05jfjh07nGFTt25dGWP03XffuRwqJZ1d\nvjp16hR5+3a7XUOHDtXixYs1bdo0rV69WjfeeGOJTtPm+K22fPnyxZ7S0x/rYd26dZWXl6ft27e7\n7BnYt2+fDh06VOyyB9OpU6c0ePBgHT9+XMuWLVNcXFyR8z/++ON66623NG7cuEL/YIg/zJo1S5Mn\nT9btt9+uf/zjH15fr27duvrqq6/cphd8PuvXry/p7CFV/jztqzeSk5NVqVIlnTlzptj79nZ5CrNy\n5UplZWXp0UcfdU47ceKEx7MmJCYmavjw4Ro+fLiOHj2q9u3ba9KkSUXGuT9Oo1i/fn399ddfJfor\n0A0aNJAxRl999VWhe7NKu20qTIcOHVSjRg0tX75cl112mTZu3Oh2KuL69evriy++8HrZbr75Zh0+\nfFjTpk3TnXfeqSeffNLtsMfScHyilpub63Jo4K5du/x2H3Xq1PG4fjrO4laa7WFJtwvS2bPJ3XTT\nTVq+fLmMMfr+++/dDskrzbro4MtrokGDBnrnnXd06NChQvee+9orzZo1U7NmzTRhwgR99NFHuvTS\nSzV37txC/4jPl19+qe3bt2vJkiUuh2sUbDdf1K1bVxs3bnQ7fWFZ9F1RDh06pA0bNmjKlCkuz31h\nh/MNGTJEt99+u7Kzs3X06FGdc845Lp+MecPrw1qOHz+uV199VX369FG/fv3Uv39/l3+jR49Wbm6u\n1qxZU+TtfPPNN+rVq5fq1aun119/vdCQ79y5s8u/atWqSTp7vN9HH33kcoz2/v373fbkB0L//v1l\nt9s1efJkj5fnP6WOtwpep1y5cjr//POVl5fn8TSOktS1a1eVL1/e7U8WL1y4ULm5uerdu7fP44iK\ninLbOHz88cfavHmzz7eV3wsvvOBy/PKKFSv022+/qWfPnpKkiy++WCkpKZo7d67L8q5du1bffPON\nV8sybNgwHThwQDfeeKOOHDni03Fd+Tk+kps3b5727t3rdvkff/zh/L8/1sOePXvKGKMnn3zSZfrj\njz8um82mXr16lWApysb48eP12Wef6ZFHHlGrVq2KnPfTTz/VhAkT1Lp1az388MMBG9Py5ct16623\natiwYXrsscd8um7Pnj3122+/aeXKlc5pR48e1YIFC1zmu+iii1S/fn099thjOnLkiNvt5F9H/M1u\nt2vAgAFauXKlvv766yLv29vlKUxUVJTb3qCnnnrKbU9pwe1XbGysGjRoUOxffI6Li5MxxqdTpBV0\nzTXXaPN74QF2AAAgAElEQVTmzVq3bp3bZTk5OUXu1e3WrZsqVaqkhx9+uNCx+mPb5Inj9Jqvv/66\nlixZojNnzri9cV9zzTX65ZdfPD5fx48f19GjR50/v/LKK3r55Zf1yCOPaPz48crIyNC9997r1+8B\nOEIv/7HTR44c8eufU+/Zs6c++eQTl1PNHTlyRPPnz1dqaqqaNm1aotstzXZBOnt4a/fu3fXyyy9r\n2bJlqlChgtupYkuzLjo4dnB485oYMGCA8vLyCm0RyfteOXz4sNv4mjVrJrvdXuTr2LEnvOB24skn\nnyzxL989e/bUqVOnXI6myMvL09NPPx3Uv4tQ2LLOmDHD47iSkpJ01VVXacmSJVq6dKl69Ojh83cM\nvN5zvnr1ah0+fLjQPyjSrl07JScna+nSpRo0aJDHef766y91795dhw4d0h133KE33njD5fL69et7\nPA96fnfccYeWLFmi7t2769Zbb1VsbKwWLFigOnXqePyzt97y5mOTevXqOc+zvHPnTuf5On/88Ue9\n9tpruvHGG3X77bf7dL/dunVT9erVddlll6latWratm2bZs2apT59+hS6N7Jq1aq6++679cADD6hH\njx5KT0/Xt99+qzlz5qhNmzYlitPevXtr1apV6tu3r3r16qUff/xR8+bNU7NmzXz6cmBBSUlJuvzy\nyzVixAjt3btXM2fOVKNGjZzn+i1XrpweeeQRjRw5UldccYWGDBmivXv36qmnnlK9evW82vuTlpam\nFi1aaMWKFWratGmh5z73xqxZs9S+fXu1aNFCo0aNUr169fT7779r8+bN+vXXX51fcvHHetiyZUsN\nHz5c8+fP18GDB9WhQwd9/PHHeuGFF9S/f3916NChxMsRSGvXrtVTTz2lmjVrqkqVKoX+nQPHOj14\n8GCdPn1avXr1cjl2M79q1ap5fUicJ59++qkyMzNVtWpVderUyW1Ml156qcfjCB1GjRqlZ555RsOG\nDdOWLVtUo0YNLVmyxO01aLPZtHDhQvXs2VPNmjXTiBEjVLNmTf3666/auHGjEhISPJ7j1l+mTZum\n9957T23bttWoUaPUtGlTHThwQP/+97+1YcMGZ6B7uzyF6d27t5YsWaL4+Hg1bdpUmzdv1vr161W1\nalWX+Zo2baqOHTvqoosuUlJSkj799FO98sorGjNmTJG3n5aWpqioKD3yyCM6dOiQKlSooC5durjd\nflHGjx+vNWvWqHfv3srKytJFF12kI0eO6IsvvtCqVau0a9euQt8QK1WqpBkzZmjUqFFq3bq1hg4d\nqsqVK2vr1q06duyYnnvuOb9smwozePBgPf3007r//vvVokULt2Nqhw0bppdffll///vftXHjRl12\n2WU6c+aMvvnmG61YsULr1q3ThRde6PzCapcuXXTzzTdLOrsNe++99zR8+HB98MEHJR5jft26dVPt\n2rU1cuRIjR8/Xna7Xc8995xSUlL0888/++U+7rrrLmVnZ6tHjx4aM2aMkpKS9Pzzz2v37t1atWpV\niW6ztNsFh8GDB+tvf/ubZs+ere7du7udvKI066JD/fr1lZiYqLlz56pixYqKi4tTu3btPH5i0LFj\nRw0bNkxPPfWUvv/+e/Xo0UN5eXl6//331blzZ918881e98qGDRs0evRoDRo0SI0aNdLp06f1wgsv\nqFy5chowYECh423SpInq16+vcePG6ZdfflF8fLxWrlxZql+4+/Tpo8svv1x33XWXdu7cqaZNm2rV\nqlXFnm89vxdffFG7d+927jzZtGmTpk6dKuns4SaevttTnEqVKumKK67Qo48+qpMnT6pmzZpat26d\ndu7cWWg7ZmZmauDAgbLZbB7PlV8sb0/rkp6ebuLi4lzOcVvQiBEjTIUKFcyBAwc8Xr5r1y5jt9sL\n/TdixAivxvLVV1+ZTp06mdjYWFOrVi3nuTk9ndKpc+fOzp/fe+89t9OLGfO/00H9+9//dpnuOH1U\nwVMevfrqq+aKK64wlSpVMpUqVTJNmzY1Y8aMMdu3b3e575YtW7qNPSsry+W0UAsWLDAdO3Y0ycnJ\nJiYmxjRs2NDcddddLqfB8nS6KmOMmT17tmnatKmpUKGCqVGjhhk9erTb6Si9HYcxZ0+BlJqaamJi\nYsxFF11k3nrrLY/z2e32Yk8J5Hisly9fbu655x5TvXp1ExcXZ9LT011OseSwYsUKc9FFF5mYmBhT\ntWpVk5mZafbs2eMyz6RJk0xUVJTH+5s+fbqx2WzmkUcecbvMsd498cQTbpd5WpadO3earKwsc+65\n55oKFSqYWrVqmfT0dPPqq6+6zOftepiammrS09M9jvvMmTNmypQppn79+qZChQqmTp065t577zUn\nT550ma+w2yi4jhem4HIWtm4Xtq7l57hucf8WL15c7Gve8S//qddKwjHuosZSnJ9//tn07dvXVKxY\n0aSkpJjbb7/drFu3zuMp/7Zu3WoGDhxokpOTTXR0tElNTTUZGRlm48aNznkK2954Wo/tdrsZM2aM\n25hSU1PNyJEjXabt37/f3HLLLaZOnTqmQoUK5txzzzVXXnmlefbZZ0u8PAXl5OSY6667zqSkpJj4\n+HjTs2dP8/3337uN56GHHjLt2rUzSUlJJi4uzjRt2tRMmzbN5VS1hXn22WdNgwYNTPny5V3GVLdu\nXa/X9SNHjph77rnHNGrUyERHR5uUlBRz+eWXmxkzZng1hjfeeMNcfvnlJi4uziQmJpp27dqZ5cuX\nu8zjzbYpKyvLxMfHu91+Udus2rVrG7vd7nIK3vxOnz5tpk+fblq0aGFiYmJMlSpVTOvWrc2DDz7o\nfH8YMGCASUxMdNumOk4TO3369CKX35ftymeffWYuueQSEx0dberWrWtmzpxZ6KkU81/XsQ3w5jW4\nc+dOc80115ikpCTnOaTXrl3rNl9hr5eC/LFdMMaYw4cPm9jYWBMVFWWys7M9zuPNuljUe5Exxrz+\n+uumefPm5pxzznEZn6f34by8PPP444+bpk2bmujoaFOtWjXTq1cv89lnn7nMV1yv7Ny501x//fWm\nYcOGJjY21lStWtV06dLFZVtWmG+//dZ069bNxMfHm5SUFHPTTTeZL7/80u2x9eX1cfDgQTN8+HCT\nmJhoKleubLKysszWrVu9fr4cp4/29K+47V5h74vGGLNnzx4zYMAAk5SUZCpXrmwyMjLM3r17C+2h\nkydPmipVqpjExMRi//aHJzZjyvhIe0SETZs2qVOnTnrllVdcTucWKDNnztS4ceO0a9cunXfeeQG/\nPwAAAE/OnDmjc889V1dffbXzL4L7wufznANWtGjRInXs2JEwBwAAQfXqq6/qjz/+cJ5l0Fc+na0F\nsJKjR49q9erV2rhxo7766qtiv4wMAAAQKJ988om2bt2qBx98UBdeeKEuv/zyEt0OcY6ACfS3q/fv\n369rr71WlStX1j333GPps5sAAIDwNmfOHC1dulStWrXSc889V+Lb4ZhzAAAAwCI45jwMGGOUm5tb\n5n9FCwAAAP5FnIeBw4cPKyEhwadzgQIAAMB6iHMAAADAIohzAAAAwCKIcwAAAMAiiHMAAADAIohz\n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\n",
      "text/plain": [
       "A 2-dimensional polyhedron in ZZ^2 defined as the convex hull of 2 vertices and 1 ray"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The string representation already gives a lot of information:\n",
    "\n",
    "* the dimension of the polyhedron (the smallest affine space containing it)\n",
    "* the dimension of the space in which it is defined\n",
    "* the base ring ($\\mathbb{Z}^2$) over which the polyhedron lives (this specifies the parent class)\n",
    "* the number of vertices\n",
    "* the number of rays\n",
    "\n",
    "Of course, you want to know what this object looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "Graphics object consisting of 5 graphics primitives"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P1.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also add a lineality space."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see all the methods available by pressing <tab> after the dot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-4-e38a54d2cd64>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"<ipython-input-4-e38a54d2cd64>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m    P1.\u001b[0m\n\u001b[0m       ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "P1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "P2 = Polyhedron(vertices = [[1/2, 0, 0], [0, 1/2, 0]],rays = [[1, 1, 0]],lines = [[0, 0, 1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A 3-dimensional polyhedron in QQ^3 defined as the convex hull of 2 vertices, 1 ray, 1 line (use the .plot() method to plot)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Polyhedra in ZZ^2"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P1.parent()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Polyhedra in QQ^3"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2.parent()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## $H$-representation\n",
    "\n",
    "If a polyhedron object was constructed via a $V$-representation, Sage can provide the $H$-representation of the object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An inequality (1, 1) x - 1 >= 0\n",
      "An inequality (1, -1) x + 1 >= 0\n",
      "An inequality (-1, 1) x + 1 >= 0\n"
     ]
    }
   ],
   "source": [
    "for h in P1.Hrepresentation():\n",
    "    print(h)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each line gives a row of the matrix $A$ and an entry of the vector $b$. The variable $x$ is a vector in the ambient space where $P1$ is defined. The $H$-representation may contain equations:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The construction of a polyhedron object via its $H$-representation, requires a precise format. Each inequality $(a_{i1},\\ldots,a_{id})⋅x+bi\\geq 0$ must be written as $[b_i,a_{i1}, \\ldots, a_{id}]$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is worth using the parameter eqns to shorten the construction of the object. In the following example, the first four rows are the negative of the second group of four rows."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we learned from lectures, examples are very important. Sage has implemented several examples: <http://doc.sagemath.org/html/en/reference/discrete_geometry/sage/geometry/polyhedron/library.html\">\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Representation of objects\n",
    "\n",
    "Many objects are related to the  $H$- and $V$-representations. Sage has classes implemented for them."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $H$-representation\n",
    "\n",
    "You can store the $H$-representation in a variable and use the inequalities and equalities as objects."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "P3_QQ = Polyhedron(vertices = [[0.5, 0], [0, 0.5]], base_ring=QQ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "HRep = P3_QQ.Hrepresentation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "An equation (2, 2) x - 1 == 0"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1 = HRep[0]; H1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "An inequality (0, -2) x + 1 >= 0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H2 = HRep[1]; H2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 2)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " H1.A()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1.b()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1.is_equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1.is_inequality()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1.contains(vector([0,0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H2.contains(vector([0,0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H1.is_incident(H2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is possible to obtain the different objects of the H-representation as follows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(An equation (2, 2) x - 1 == 0,)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P3_QQ.equations()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(An inequality (0, -2) x + 1 >= 0, An inequality (0, 1) x + 0 >= 0)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P3_QQ.inequalities()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### $V$-representation\n",
    "\n",
    "Similarly, you can access vertices, rays and lines of the polyhedron."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(A line in the direction (0, 0, 1),\n",
       " A vertex at (0, 1/2, 0),\n",
       " A vertex at (1/2, 0, 0),\n",
       " A ray in the direction (1, 1, 0))"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "VRep = P2.Vrepresentation(); VRep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A line in the direction (0, 0, 1)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = VRep[0]; L"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A vertex at (0, 1/2, 0)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V = VRep[1]; V"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A ray in the direction (1, 1, 0)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "R = VRep[3]; R"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L.is_line()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L.is_incident(V)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "R.is_incident(L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0, 1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L.vector()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 1/2, 0)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V.vector()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is possible to obtain the different objects of the V-representation as follows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(A vertex at (0, 1/2, 0), A vertex at (1/2, 0, 0))"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2.vertices()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(A ray in the direction (1, 1, 0),)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2.rays()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(A line in the direction (0, 0, 1),)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2.lines()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[  0 1/2]\n",
       "[1/2   0]\n",
       "[  0   0]"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " P2.vertices_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Exercise A **\n",
    "\n",
    "In this exercise, you will construct the cuboctahedron in several different ways and verify that you get the same combinatorial type.\n",
    "\n",
    "1) The first options is to check if it is in the library: <http://doc.sagemath.org/html/en/reference/discrete_geometry/sage/geometry/polyhedron/library.html>. It is! So we can just use the provided construction."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    " CO = polytopes.cuboctahedron()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's see if it looks like what we expect:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<iframe srcdoc=\"\n",
       "<html>\n",
       "<head>\n",
       "  <style>\n",
       "    * {\n",
       "      margin: 0;\n",
       "      padding: 0;\n",
       "      overflow: hidden;\n",
       "    }\n",
       "    body, html {      \n",
       "      height: 100%;\n",
       "      width: 100%;\n",
       "    }\n",
       "  </style>\n",
       "  <script type=&quot;text/javascript&quot; src=&quot;/nbextensions/jsmol/JSmol.min.js&quot;></script>\n",
       "</head>\n",
       "<body>\n",
       "  <script type=&quot;text/javascript&quot;>\n",
       "    var script = [\n",
       "  'data &quot;model list&quot;',\n",
       "  '10',\n",
       "  'empty',\n",
       "  'Xx -3.0 -4.0 -3.0',\n",
       "  'Xx 0.0 -4.0 -3.0',\n",
       "  'Xx 3.0 -4.0 -3.0',\n",
       "  'Xx 4.0 -3.0 -3.0',\n",
       "  'Xx 4.0 0.0 -3.0',\n",
       "  'Xx 4.0 3.0 -3.0',\n",
       "  'Xx -4.0 -3.0 -3.0',\n",
       "  'Xx -4.0 -3.0 0.0',\n",
       "  'Xx -4.0 -3.0 3.0',\n",
       "  'Xx 5.5 5.5 5.5',\n",
       "  'end &quot;model list&quot;; show data',\n",
       "  'select *',\n",
       "  'wireframe off; spacefill off',\n",
       "  'set labelOffset 0 0',\n",
       "  'background [255,255,255]',\n",
       "  'spin OFF',\n",
       "  'moveto 0 -764 -346 -545 76.39',\n",
       "  'centerAt absolute {0 0 0}',\n",
       "  'zoom 100',\n",
       "  'frank OFF',\n",
       "  'set perspectivedepth ON',\n",
       "  'draw point_1 DIAMETER 5 {-3.0 -3.0 0.0}',\n",
       "  'color $point_1  [0,0,255]',\n",
       "  'draw point_2 DIAMETER 5 {-3.0 0.0 -3.0}',\n",
       "  'color $point_2  [0,0,255]',\n",
       "  'draw point_3 DIAMETER 5 {-3.0 0.0 3.0}',\n",
       "  'color $point_3  [0,0,255]',\n",
       "  'draw point_4 DIAMETER 5 {-3.0 3.0 0.0}',\n",
       "  'color $point_4  [0,0,255]',\n",
       "  'draw point_5 DIAMETER 5 {0.0 -3.0 -3.0}',\n",
       "  'color $point_5  [0,0,255]',\n",
       "  'draw point_6 DIAMETER 5 {0.0 -3.0 3.0}',\n",
       "  'color $point_6  [0,0,255]',\n",
       "  'draw point_7 DIAMETER 5 {0.0 3.0 -3.0}',\n",
       "  'color $point_7  [0,0,255]',\n",
       "  'draw point_8 DIAMETER 5 {0.0 3.0 3.0}',\n",
       "  'color $point_8  [0,0,255]',\n",
       "  'draw point_9 DIAMETER 5 {3.0 -3.0 0.0}',\n",
       "  'color $point_9  [0,0,255]',\n",
       "  'draw point_10 DIAMETER 5 {3.0 0.0 -3.0}',\n",
       "  'color $point_10  [0,0,255]',\n",
       "  'draw point_11 DIAMETER 5 {3.0 0.0 3.0}',\n",
       "  'color $point_11  [0,0,255]',\n",
       "  'draw point_12 DIAMETER 5 {3.0 3.0 0.0}',\n",
       "  'color $point_12  [0,0,255]',\n",
       "  'draw line_13 diameter 1 curve {-3.0 -3.0 0.0}  {-3.0 0.0 -3.0} ',\n",
       "  'color $line_13  [0,0,255]',\n",
       "  'draw line_14 diameter 1 curve {-3.0 -3.0 0.0}  {-3.0 0.0 3.0} ',\n",
       "  'color $line_14  [0,0,255]',\n",
       "  'draw line_15 diameter 1 curve {-3.0 -3.0 0.0}  {0.0 -3.0 -3.0} ',\n",
       "  'color $line_15  [0,0,255]',\n",
       "  'draw line_16 diameter 1 curve {-3.0 -3.0 0.0}  {0.0 -3.0 3.0} ',\n",
       "  'color $line_16  [0,0,255]',\n",
       "  'draw line_17 diameter 1 curve {-3.0 0.0 -3.0}  {-3.0 3.0 0.0} ',\n",
       "  'color $line_17  [0,0,255]',\n",
       "  'draw line_18 diameter 1 curve {-3.0 0.0 -3.0}  {0.0 -3.0 -3.0} ',\n",
       "  'color $line_18  [0,0,255]',\n",
       "  'draw line_19 diameter 1 curve {-3.0 0.0 -3.0}  {0.0 3.0 -3.0} ',\n",
       "  'color $line_19  [0,0,255]',\n",
       "  'draw line_20 diameter 1 curve {-3.0 0.0 3.0}  {-3.0 3.0 0.0} ',\n",
       "  'color $line_20  [0,0,255]',\n",
       "  'draw line_21 diameter 1 curve {-3.0 0.0 3.0}  {0.0 -3.0 3.0} ',\n",
       "  'color $line_21  [0,0,255]',\n",
       "  'draw line_22 diameter 1 curve {-3.0 0.0 3.0}  {0.0 3.0 3.0} ',\n",
       "  'color $line_22  [0,0,255]',\n",
       "  'draw line_23 diameter 1 curve {-3.0 3.0 0.0}  {0.0 3.0 -3.0} ',\n",
       "  'color $line_23  [0,0,255]',\n",
       "  'draw line_24 diameter 1 curve {-3.0 3.0 0.0}  {0.0 3.0 3.0} ',\n",
       "  'color $line_24  [0,0,255]',\n",
       "  'draw line_25 diameter 1 curve {0.0 -3.0 -3.0}  {3.0 -3.0 0.0} ',\n",
       "  'color $line_25  [0,0,255]',\n",
       "  'draw line_26 diameter 1 curve {0.0 -3.0 -3.0}  {3.0 0.0 -3.0} ',\n",
       "  'color $line_26  [0,0,255]',\n",
       "  'draw line_27 diameter 1 curve {0.0 -3.0 3.0}  {3.0 -3.0 0.0} ',\n",
       "  'color $line_27  [0,0,255]',\n",
       "  'draw line_28 diameter 1 curve {0.0 -3.0 3.0}  {3.0 0.0 3.0} ',\n",
       "  'color $line_28  [0,0,255]',\n",
       "  'draw line_29 diameter 1 curve {0.0 3.0 -3.0}  {3.0 0.0 -3.0} ',\n",
       "  'color $line_29  [0,0,255]',\n",
       "  'draw line_30 diameter 1 curve {0.0 3.0 -3.0}  {3.0 3.0 0.0} ',\n",
       "  'color $line_30  [0,0,255]',\n",
       "  'draw line_31 diameter 1 curve {0.0 3.0 3.0}  {3.0 0.0 3.0} ',\n",
       "  'color $line_31  [0,0,255]',\n",
       "  'draw line_32 diameter 1 curve {0.0 3.0 3.0}  {3.0 3.0 0.0} ',\n",
       "  'color $line_32  [0,0,255]',\n",
       "  'draw line_33 diameter 1 curve {3.0 -3.0 0.0}  {3.0 0.0 -3.0} ',\n",
       "  'color $line_33  [0,0,255]',\n",
       "  'draw line_34 diameter 1 curve {3.0 -3.0 0.0}  {3.0 0.0 3.0} ',\n",
       "  'color $line_34  [0,0,255]',\n",
       "  'draw line_35 diameter 1 curve {3.0 0.0 -3.0}  {3.0 3.0 0.0} ',\n",
       "  'color $line_35  [0,0,255]',\n",
       "  'draw line_36 diameter 1 curve {3.0 0.0 3.0}  {3.0 3.0 0.0} ',\n",
       "  'color $line_36  [0,0,255]',\n",
       "  'pmesh obj_37 inline &quot;48',\n",
       "  '-3 -3 0',\n",
       "  '-3 0 -3',\n",
       "  '-3 0 3',\n",
       "  '-3 3 0',\n",
       "  '0 -3 -3',\n",
       "  '0 -3 3',\n",
       "  '0 3 -3',\n",
       "  '0 3 3',\n",
       "  '3 -3 0',\n",
       "  '3 0 -3',\n",
       "  '3 0 3',\n",
       "  '3 3 0',\n",
       "  '-3 -3 0',\n",
       "  '-3 0 -3',\n",
       "  '-3 0 3',\n",
       "  '-3 3 0',\n",
       "  '0 -3 -3',\n",
       "  '0 -3 3',\n",
       "  '0 3 -3',\n",
       "  '0 3 3',\n",
       "  '3 -3 0',\n",
       "  '3 0 -3',\n",
       "  '3 0 3',\n",
       "  '3 3 0',\n",
       "  '-3 -3 0',\n",
       "  '-3 0 -3',\n",
       "  '-3 0 3',\n",
       "  '-3 3 0',\n",
       "  '0 -3 -3',\n",
       "  '0 -3 3',\n",
       "  '0 3 -3',\n",
       "  '0 3 3',\n",
       "  '3 -3 0',\n",
       "  '3 0 -3',\n",
       "  '3 0 3',\n",
       "  '3 3 0',\n",
       "  '-3 -3 0',\n",
       "  '-3 0 -3',\n",
       "  '-3 0 3',\n",
       "  '-3 3 0',\n",
       "  '0 -3 -3',\n",
       "  '0 -3 3',\n",
       "  '0 3 -3',\n",
       "  '0 3 3',\n",
       "  '3 -3 0',\n",
       "  '3 0 -3',\n",
       "  '3 0 3',\n",
       "  '3 3 0',\n",
       "  '14',\n",
       "  '5',\n",
       "  '11',\n",
       "  '6',\n",
       "  '3',\n",
       "  '7',\n",
       "  '11',\n",
       "  '5',\n",
       "  '10',\n",
       "  '8',\n",
       "  '9',\n",
       "  '23',\n",
       "  '10',\n",
       "  '4',\n",
       "  '2',\n",
       "  '0',\n",
       "  '5',\n",
       "  '2',\n",
       "  '5',\n",
       "  '15',\n",
       "  '1',\n",
       "  '12',\n",
       "  '14',\n",
       "  '15',\n",
       "  '4',\n",
       "  '27',\n",
       "  '26',\n",
       "  '19',\n",
       "  '27',\n",
       "  '5',\n",
       "  '17',\n",
       "  '24',\n",
       "  '4',\n",
       "  '20',\n",
       "  '17',\n",
       "  '4',\n",
       "  '18',\n",
       "  '13',\n",
       "  '39',\n",
       "  '18',\n",
       "  '5',\n",
       "  '31',\n",
       "  '38',\n",
       "  '29',\n",
       "  '22',\n",
       "  '31',\n",
       "  '5',\n",
       "  '21',\n",
       "  '16',\n",
       "  '25',\n",
       "  '30',\n",
       "  '21',\n",
       "  '4',\n",
       "  '32',\n",
       "  '28',\n",
       "  '33',\n",
       "  '32',\n",
       "  '4',\n",
       "  '40',\n",
       "  '36',\n",
       "  '37',\n",
       "  '40',\n",
       "  '4',\n",
       "  '34',\n",
       "  '41',\n",
       "  '44',\n",
       "  '34',\n",
       "  '4',\n",
       "  '45',\n",
       "  '42',\n",
       "  '35',\n",
       "  '45',\n",
       "  '4',\n",
       "  '47',\n",
       "  '43',\n",
       "  '46',\n",
       "  '47&quot;',\n",
       "  'color pmesh  [0,128,0]',\n",
       "  'draw line_38 diameter 1 curve {-3.0 -3.0 -3.0}  {-3.0 3.0 -3.0} ',\n",
       "  'color $line_38 translucent 0.5 [0,0,0]',\n",
       "  'draw line_39 diameter 1 curve {-3.0 3.0 -3.0}  {3.0 3.0 -3.0} ',\n",
       "  'color $line_39 translucent 0.5 [0,0,0]',\n",
       "  'draw line_40 diameter 1 curve {3.0 3.0 -3.0}  {3.0 -3.0 -3.0} ',\n",
       "  'color $line_40 translucent 0.5 [0,0,0]',\n",
       "  'draw line_41 diameter 1 curve {3.0 -3.0 -3.0}  {-3.0 -3.0 -3.0} ',\n",
       "  'color $line_41 translucent 0.5 [0,0,0]',\n",
       "  'draw line_42 diameter 1 curve {-3.0 -3.0 -3.0}  {-3.0 -3.0 3.0} ',\n",
       "  'color $line_42 translucent 0.5 [0,0,0]',\n",
       "  'draw line_43 diameter 1 curve {-3.0 -3.0 3.0}  {-3.0 3.0 3.0} ',\n",
       "  'color $line_43 translucent 0.5 [0,0,0]',\n",
       "  'draw line_44 diameter 1 curve {-3.0 3.0 3.0}  {3.0 3.0 3.0} ',\n",
       "  'color $line_44 translucent 0.5 [0,0,0]',\n",
       "  'draw line_45 diameter 1 curve {3.0 3.0 3.0}  {3.0 -3.0 3.0} ',\n",
       "  'color $line_45 translucent 0.5 [0,0,0]',\n",
       "  'draw line_46 diameter 1 curve {3.0 -3.0 3.0}  {-3.0 -3.0 3.0} ',\n",
       "  'color $line_46 translucent 0.5 [0,0,0]',\n",
       "  'draw line_47 diameter 1 curve {-3.0 -3.0 3.0} ',\n",
       "  'color $line_47 translucent 0.5 [0,0,0]',\n",
       "  'draw line_48 diameter 1 curve {-3.0 3.0 -3.0}  {-3.0 3.0 3.0} ',\n",
       "  'color $line_48 translucent 0.5 [0,0,0]',\n",
       "  'draw line_49 diameter 1 curve {3.0 -3.0 -3.0}  {3.0 -3.0 3.0} ',\n",
       "  'color $line_49 translucent 0.5 [0,0,0]',\n",
       "  'draw line_50 diameter 1 curve {3.0 3.0 -3.0}  {3.0 3.0 3.0} ',\n",
       "  'color $line_50 translucent 0.5 [0,0,0]',\n",
       "  'select atomno = 1',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 2',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 3',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'select atomno = 4',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 5',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 6',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'select atomno = 7',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 8',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 9',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'isosurface fullylit; pmesh o* fullylit; set antialiasdisplay on;',\n",
       "].join('\\n');;\n",
       "    var Info = {\n",
       "      width: '100%',\n",
       "      height: '500',\n",
       "      debug: false,\n",
       "      disableInitialConsole: true,   // very slow when used with inline mesh\n",
       "      color: '#3131ff',\n",
       "      addSelectionOptions: false,\n",
       "      use: 'HTML5',\n",
       "      j2sPath: '/nbextensions/jsmol/j2s',\n",
       "      script: script,\n",
       "    };\n",
       "    var jmolApplet0 = Jmol.getApplet('jmolApplet0', Info);\n",
       "  </script>\n",
       "</body>\n",
       "</html>\n",
       "\" \n",
       "        width=\"100%\"\n",
       "        height=\"500\"\n",
       "        style=\"border: 0;\">\n",
       "</iframe>\n"
      ],
      "text/plain": [
       "Graphics3d Object"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CO.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can ask the $f$-vector of the cuboctahedron:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "Img = CO.projection().tikz([-470,-1,790],36,opacity=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "proj = CO.projection()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "proj.tikz?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "latex.add_to_preamble(\"\\\\usepackage{tikz}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\\begin{tikzpicture}%\n",
       "\t[x={(0.858944cm, 0.505253cm)},\n",
       "\ty={(-0.505040cm, 0.809017cm)},\n",
       "\tz={(-0.084559cm, 0.300352cm)},\n",
       "\tscale=2.000000,\n",
       "\tback/.style={loosely dotted, thin},\n",
       "\tedge/.style={color=blue!95!black, thick},\n",
       "\tfacet/.style={fill=blue!95!black,fill opacity=0.100000},\n",
       "\tvertex/.style={inner sep=1pt,circle,draw=green!25!black,fill=green!75!black,thick,anchor=base}]\n",
       "%\n",
       "%\n",
       "%% Coordinate of the vertices:\n",
       "%%\n",
       "\\coordinate (-1.00000, -1.00000, 0.00000) at (-1.00000, -1.00000, 0.00000);\n",
       "\\coordinate (-1.00000, 0.00000, -1.00000) at (-1.00000, 0.00000, -1.00000);\n",
       "\\coordinate (-1.00000, 0.00000, 1.00000) at (-1.00000, 0.00000, 1.00000);\n",
       "\\coordinate (-1.00000, 1.00000, 0.00000) at (-1.00000, 1.00000, 0.00000);\n",
       "\\coordinate (0.00000, -1.00000, -1.00000) at (0.00000, -1.00000, -1.00000);\n",
       "\\coordinate (0.00000, -1.00000, 1.00000) at (0.00000, -1.00000, 1.00000);\n",
       "\\coordinate (0.00000, 1.00000, -1.00000) at (0.00000, 1.00000, -1.00000);\n",
       "\\coordinate (0.00000, 1.00000, 1.00000) at (0.00000, 1.00000, 1.00000);\n",
       "\\coordinate (1.00000, -1.00000, 0.00000) at (1.00000, -1.00000, 0.00000);\n",
       "\\coordinate (1.00000, 0.00000, -1.00000) at (1.00000, 0.00000, -1.00000);\n",
       "\\coordinate (1.00000, 0.00000, 1.00000) at (1.00000, 0.00000, 1.00000);\n",
       "\\coordinate (1.00000, 1.00000, 0.00000) at (1.00000, 1.00000, 0.00000);\n",
       "%%\n",
       "%%\n",
       "%% Drawing edges in the back\n",
       "%%\n",
       "\\draw[edge,back] (-1.00000, 0.00000, -1.00000) -- (0.00000, -1.00000, -1.00000);\n",
       "\\draw[edge,back] (-1.00000, 0.00000, -1.00000) -- (0.00000, 1.00000, -1.00000);\n",
       "\\draw[edge,back] (-1.00000, 1.00000, 0.00000) -- (0.00000, 1.00000, -1.00000);\n",
       "\\draw[edge,back] (0.00000, -1.00000, -1.00000) -- (1.00000, 0.00000, -1.00000);\n",
       "\\draw[edge,back] (0.00000, 1.00000, -1.00000) -- (1.00000, 0.00000, -1.00000);\n",
       "\\draw[edge,back] (0.00000, 1.00000, -1.00000) -- (1.00000, 1.00000, 0.00000);\n",
       "\\draw[edge,back] (1.00000, -1.00000, 0.00000) -- (1.00000, 0.00000, -1.00000);\n",
       "\\draw[edge,back] (1.00000, 0.00000, -1.00000) -- (1.00000, 1.00000, 0.00000);\n",
       "%%\n",
       "%%\n",
       "%% Drawing vertices in the back\n",
       "%%\n",
       "\\node[vertex] at (0.00000, 1.00000, -1.00000)     {};\n",
       "\\node[vertex] at (1.00000, 0.00000, -1.00000)     {};\n",
       "%%\n",
       "%%\n",
       "%% Drawing the facets\n",
       "%%\n",
       "\\fill[facet] (0.00000, -1.00000, 1.00000) -- (-1.00000, -1.00000, 0.00000) -- (-1.00000, 0.00000, 1.00000) -- cycle {};\n",
       "\\fill[facet] (-1.00000, 1.00000, 0.00000) -- (-1.00000, 0.00000, -1.00000) -- (-1.00000, -1.00000, 0.00000) -- (-1.00000, 0.00000, 1.00000) -- cycle {};\n",
       "\\fill[facet] (0.00000, 1.00000, 1.00000) -- (-1.00000, 0.00000, 1.00000) -- (-1.00000, 1.00000, 0.00000) -- cycle {};\n",
       "\\fill[facet] (1.00000, -1.00000, 0.00000) -- (0.00000, -1.00000, -1.00000) -- (-1.00000, -1.00000, 0.00000) -- (0.00000, -1.00000, 1.00000) -- cycle {};\n",
       "\\fill[facet] (1.00000, 0.00000, 1.00000) -- (0.00000, -1.00000, 1.00000) -- (-1.00000, 0.00000, 1.00000) -- (0.00000, 1.00000, 1.00000) -- cycle {};\n",
       "\\fill[facet] (1.00000, 0.00000, 1.00000) -- (0.00000, -1.00000, 1.00000) -- (1.00000, -1.00000, 0.00000) -- cycle {};\n",
       "\\fill[facet] (1.00000, 1.00000, 0.00000) -- (0.00000, 1.00000, 1.00000) -- (1.00000, 0.00000, 1.00000) -- cycle {};\n",
       "%%\n",
       "%%\n",
       "%% Drawing edges in the front\n",
       "%%\n",
       "\\draw[edge] (-1.00000, -1.00000, 0.00000) -- (-1.00000, 0.00000, -1.00000);\n",
       "\\draw[edge] (-1.00000, -1.00000, 0.00000) -- (-1.00000, 0.00000, 1.00000);\n",
       "\\draw[edge] (-1.00000, -1.00000, 0.00000) -- (0.00000, -1.00000, -1.00000);\n",
       "\\draw[edge] (-1.00000, -1.00000, 0.00000) -- (0.00000, -1.00000, 1.00000);\n",
       "\\draw[edge] (-1.00000, 0.00000, -1.00000) -- (-1.00000, 1.00000, 0.00000);\n",
       "\\draw[edge] (-1.00000, 0.00000, 1.00000) -- (-1.00000, 1.00000, 0.00000);\n",
       "\\draw[edge] (-1.00000, 0.00000, 1.00000) -- (0.00000, -1.00000, 1.00000);\n",
       "\\draw[edge] (-1.00000, 0.00000, 1.00000) -- (0.00000, 1.00000, 1.00000);\n",
       "\\draw[edge] (-1.00000, 1.00000, 0.00000) -- (0.00000, 1.00000, 1.00000);\n",
       "\\draw[edge] (0.00000, -1.00000, -1.00000) -- (1.00000, -1.00000, 0.00000);\n",
       "\\draw[edge] (0.00000, -1.00000, 1.00000) -- (1.00000, -1.00000, 0.00000);\n",
       "\\draw[edge] (0.00000, -1.00000, 1.00000) -- (1.00000, 0.00000, 1.00000);\n",
       "\\draw[edge] (0.00000, 1.00000, 1.00000) -- (1.00000, 0.00000, 1.00000);\n",
       "\\draw[edge] (0.00000, 1.00000, 1.00000) -- (1.00000, 1.00000, 0.00000);\n",
       "\\draw[edge] (1.00000, -1.00000, 0.00000) -- (1.00000, 0.00000, 1.00000);\n",
       "\\draw[edge] (1.00000, 0.00000, 1.00000) -- (1.00000, 1.00000, 0.00000);\n",
       "%%\n",
       "%%\n",
       "%% Drawing the vertices in the front\n",
       "%%\n",
       "\\node[vertex] at (-1.00000, -1.00000, 0.00000)     {};\n",
       "\\node[vertex] at (-1.00000, 0.00000, -1.00000)     {};\n",
       "\\node[vertex] at (-1.00000, 0.00000, 1.00000)     {};\n",
       "\\node[vertex] at (-1.00000, 1.00000, 0.00000)     {};\n",
       "\\node[vertex] at (0.00000, -1.00000, -1.00000)     {};\n",
       "\\node[vertex] at (0.00000, -1.00000, 1.00000)     {};\n",
       "\\node[vertex] at (0.00000, 1.00000, 1.00000)     {};\n",
       "\\node[vertex] at (1.00000, -1.00000, 0.00000)     {};\n",
       "\\node[vertex] at (1.00000, 0.00000, 1.00000)     {};\n",
       "\\node[vertex] at (1.00000, 1.00000, 0.00000)     {};\n",
       "%%\n",
       "%%\n",
       "\\end{tikzpicture}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Img"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 12, 24, 14, 1)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CO.f_vector()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2) The second construction uses the fact that we can truncate the vertices by new hyperplanes that cross the edges exactly at the mid-point.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "Cube = polytopes.cube()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Applications/SageMath/local/lib/python2.7/site-packages/sage/repl/ipython_kernel/__main__.py:1: DeprecationWarning: edge_truncation is deprecated. Please use truncation instead.\n",
      "See http://trac.sagemath.org/18128 for details.\n",
      "  from ipykernel.kernelapp import IPKernelApp\n"
     ]
    }
   ],
   "source": [
    "EC = Cube.edge_truncation(1/2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just to make a sanity check we can compute the f-vector:\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 12, 24, 14, 1)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "EC.f_vector()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "But as we know, two different polytopes can have the same f-vector, so we should check if they are combinatorially isomorphic:\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "EC.is_combinatorially_isomorphic(CO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is great!\n",
    "\n",
    "Just to understand the truncation construction better, visualize the usual truncation:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "TC = Cube.truncation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<iframe srcdoc=\"\n",
       "<html>\n",
       "<head>\n",
       "  <style>\n",
       "    * {\n",
       "      margin: 0;\n",
       "      padding: 0;\n",
       "      overflow: hidden;\n",
       "    }\n",
       "    body, html {      \n",
       "      height: 100%;\n",
       "      width: 100%;\n",
       "    }\n",
       "  </style>\n",
       "  <script type=&quot;text/javascript&quot; src=&quot;/nbextensions/jsmol/JSmol.min.js&quot;></script>\n",
       "</head>\n",
       "<body>\n",
       "  <script type=&quot;text/javascript&quot;>\n",
       "    var script = [\n",
       "  'data &quot;model list&quot;',\n",
       "  '10',\n",
       "  'empty',\n",
       "  'Xx -3.0 -4.0 -3.0',\n",
       "  'Xx 0.0 -4.0 -3.0',\n",
       "  'Xx 3.0 -4.0 -3.0',\n",
       "  'Xx 4.0 -3.0 -3.0',\n",
       "  'Xx 4.0 0.0 -3.0',\n",
       "  'Xx 4.0 3.0 -3.0',\n",
       "  'Xx -4.0 -3.0 -3.0',\n",
       "  'Xx -4.0 -3.0 0.0',\n",
       "  'Xx -4.0 -3.0 3.0',\n",
       "  'Xx 5.5 5.5 5.5',\n",
       "  'end &quot;model list&quot;; show data',\n",
       "  'select *',\n",
       "  'wireframe off; spacefill off',\n",
       "  'set labelOffset 0 0',\n",
       "  'background [255,255,255]',\n",
       "  'spin OFF',\n",
       "  'moveto 0 -764 -346 -545 76.39',\n",
       "  'centerAt absolute {0 0 0}',\n",
       "  'zoom 100',\n",
       "  'frank OFF',\n",
       "  'set perspectivedepth ON',\n",
       "  'draw point_1 DIAMETER 5 {-3.0 -3.0 -1.0}',\n",
       "  'color $point_1  [0,0,255]',\n",
       "  'draw point_2 DIAMETER 5 {-3.0 -3.0 1.0}',\n",
       "  'color $point_2  [0,0,255]',\n",
       "  'draw point_3 DIAMETER 5 {-3.0 -1.0 -3.0}',\n",
       "  'color $point_3  [0,0,255]',\n",
       "  'draw point_4 DIAMETER 5 {-3.0 -1.0 3.0}',\n",
       "  'color $point_4  [0,0,255]',\n",
       "  'draw point_5 DIAMETER 5 {-3.0 1.0 -3.0}',\n",
       "  'color $point_5  [0,0,255]',\n",
       "  'draw point_6 DIAMETER 5 {-3.0 1.0 3.0}',\n",
       "  'color $point_6  [0,0,255]',\n",
       "  'draw point_7 DIAMETER 5 {-3.0 3.0 -1.0}',\n",
       "  'color $point_7  [0,0,255]',\n",
       "  'draw point_8 DIAMETER 5 {-3.0 3.0 1.0}',\n",
       "  'color $point_8  [0,0,255]',\n",
       "  'draw point_9 DIAMETER 5 {-1.0 -3.0 -3.0}',\n",
       "  'color $point_9  [0,0,255]',\n",
       "  'draw point_10 DIAMETER 5 {-1.0 -3.0 3.0}',\n",
       "  'color $point_10  [0,0,255]',\n",
       "  'draw point_11 DIAMETER 5 {-1.0 3.0 -3.0}',\n",
       "  'color $point_11  [0,0,255]',\n",
       "  'draw point_12 DIAMETER 5 {-1.0 3.0 3.0}',\n",
       "  'color $point_12  [0,0,255]',\n",
       "  'draw point_13 DIAMETER 5 {1.0 -3.0 -3.0}',\n",
       "  'color $point_13  [0,0,255]',\n",
       "  'draw point_14 DIAMETER 5 {1.0 -3.0 3.0}',\n",
       "  'color $point_14  [0,0,255]',\n",
       "  'draw point_15 DIAMETER 5 {1.0 3.0 -3.0}',\n",
       "  'color $point_15  [0,0,255]',\n",
       "  'draw point_16 DIAMETER 5 {1.0 3.0 3.0}',\n",
       "  'color $point_16  [0,0,255]',\n",
       "  'draw point_17 DIAMETER 5 {3.0 -3.0 -1.0}',\n",
       "  'color $point_17  [0,0,255]',\n",
       "  'draw point_18 DIAMETER 5 {3.0 -3.0 1.0}',\n",
       "  'color $point_18  [0,0,255]',\n",
       "  'draw point_19 DIAMETER 5 {3.0 -1.0 -3.0}',\n",
       "  'color $point_19  [0,0,255]',\n",
       "  'draw point_20 DIAMETER 5 {3.0 -1.0 3.0}',\n",
       "  'color $point_20  [0,0,255]',\n",
       "  'draw point_21 DIAMETER 5 {3.0 1.0 -3.0}',\n",
       "  'color $point_21  [0,0,255]',\n",
       "  'draw point_22 DIAMETER 5 {3.0 1.0 3.0}',\n",
       "  'color $point_22  [0,0,255]',\n",
       "  'draw point_23 DIAMETER 5 {3.0 3.0 -1.0}',\n",
       "  'color $point_23  [0,0,255]',\n",
       "  'draw point_24 DIAMETER 5 {3.0 3.0 1.0}',\n",
       "  'color $point_24  [0,0,255]',\n",
       "  'draw line_25 diameter 1 curve {-3.0 -3.0 -1.0}  {-3.0 -3.0 1.0} ',\n",
       "  'color $line_25  [0,0,255]',\n",
       "  'draw line_26 diameter 1 curve {-3.0 -3.0 -1.0}  {-3.0 -1.0 -3.0} ',\n",
       "  'color $line_26  [0,0,255]',\n",
       "  'draw line_27 diameter 1 curve {-3.0 -3.0 -1.0}  {-1.0 -3.0 -3.0} ',\n",
       "  'color $line_27  [0,0,255]',\n",
       "  'draw line_28 diameter 1 curve {-3.0 -3.0 1.0}  {-3.0 -1.0 3.0} ',\n",
       "  'color $line_28  [0,0,255]',\n",
       "  'draw line_29 diameter 1 curve {-3.0 -3.0 1.0}  {-1.0 -3.0 3.0} ',\n",
       "  'color $line_29  [0,0,255]',\n",
       "  'draw line_30 diameter 1 curve {-3.0 -1.0 -3.0}  {-3.0 1.0 -3.0} ',\n",
       "  'color $line_30  [0,0,255]',\n",
       "  'draw line_31 diameter 1 curve {-3.0 -1.0 -3.0}  {-1.0 -3.0 -3.0} ',\n",
       "  'color $line_31  [0,0,255]',\n",
       "  'draw line_32 diameter 1 curve {-3.0 -1.0 3.0}  {-3.0 1.0 3.0} ',\n",
       "  'color $line_32  [0,0,255]',\n",
       "  'draw line_33 diameter 1 curve {-3.0 -1.0 3.0}  {-1.0 -3.0 3.0} ',\n",
       "  'color $line_33  [0,0,255]',\n",
       "  'draw line_34 diameter 1 curve {-3.0 1.0 -3.0}  {-3.0 3.0 -1.0} ',\n",
       "  'color $line_34  [0,0,255]',\n",
       "  'draw line_35 diameter 1 curve {-3.0 1.0 -3.0}  {-1.0 3.0 -3.0} ',\n",
       "  'color $line_35  [0,0,255]',\n",
       "  'draw line_36 diameter 1 curve {-3.0 1.0 3.0}  {-3.0 3.0 1.0} ',\n",
       "  'color $line_36  [0,0,255]',\n",
       "  'draw line_37 diameter 1 curve {-3.0 1.0 3.0}  {-1.0 3.0 3.0} ',\n",
       "  'color $line_37  [0,0,255]',\n",
       "  'draw line_38 diameter 1 curve {-3.0 3.0 -1.0}  {-3.0 3.0 1.0} ',\n",
       "  'color $line_38  [0,0,255]',\n",
       "  'draw line_39 diameter 1 curve {-3.0 3.0 -1.0}  {-1.0 3.0 -3.0} ',\n",
       "  'color $line_39  [0,0,255]',\n",
       "  'draw line_40 diameter 1 curve {-3.0 3.0 1.0}  {-1.0 3.0 3.0} ',\n",
       "  'color $line_40  [0,0,255]',\n",
       "  'draw line_41 diameter 1 curve {-1.0 -3.0 -3.0}  {1.0 -3.0 -3.0} ',\n",
       "  'color $line_41  [0,0,255]',\n",
       "  'draw line_42 diameter 1 curve {-1.0 -3.0 3.0}  {1.0 -3.0 3.0} ',\n",
       "  'color $line_42  [0,0,255]',\n",
       "  'draw line_43 diameter 1 curve {-1.0 3.0 -3.0}  {1.0 3.0 -3.0} ',\n",
       "  'color $line_43  [0,0,255]',\n",
       "  'draw line_44 diameter 1 curve {-1.0 3.0 3.0}  {1.0 3.0 3.0} ',\n",
       "  'color $line_44  [0,0,255]',\n",
       "  'draw line_45 diameter 1 curve {1.0 -3.0 -3.0}  {3.0 -3.0 -1.0} ',\n",
       "  'color $line_45  [0,0,255]',\n",
       "  'draw line_46 diameter 1 curve {1.0 -3.0 -3.0}  {3.0 -1.0 -3.0} ',\n",
       "  'color $line_46  [0,0,255]',\n",
       "  'draw line_47 diameter 1 curve {1.0 -3.0 3.0}  {3.0 -3.0 1.0} ',\n",
       "  'color $line_47  [0,0,255]',\n",
       "  'draw line_48 diameter 1 curve {1.0 -3.0 3.0}  {3.0 -1.0 3.0} ',\n",
       "  'color $line_48  [0,0,255]',\n",
       "  'draw line_49 diameter 1 curve {1.0 3.0 -3.0}  {3.0 1.0 -3.0} ',\n",
       "  'color $line_49  [0,0,255]',\n",
       "  'draw line_50 diameter 1 curve {1.0 3.0 -3.0}  {3.0 3.0 -1.0} ',\n",
       "  'color $line_50  [0,0,255]',\n",
       "  'draw line_51 diameter 1 curve {1.0 3.0 3.0}  {3.0 1.0 3.0} ',\n",
       "  'color $line_51  [0,0,255]',\n",
       "  'draw line_52 diameter 1 curve {1.0 3.0 3.0}  {3.0 3.0 1.0} ',\n",
       "  'color $line_52  [0,0,255]',\n",
       "  'draw line_53 diameter 1 curve {3.0 -3.0 -1.0}  {3.0 -3.0 1.0} ',\n",
       "  'color $line_53  [0,0,255]',\n",
       "  'draw line_54 diameter 1 curve {3.0 -3.0 -1.0}  {3.0 -1.0 -3.0} ',\n",
       "  'color $line_54  [0,0,255]',\n",
       "  'draw line_55 diameter 1 curve {3.0 -3.0 1.0}  {3.0 -1.0 3.0} ',\n",
       "  'color $line_55  [0,0,255]',\n",
       "  'draw line_56 diameter 1 curve {3.0 -1.0 -3.0}  {3.0 1.0 -3.0} ',\n",
       "  'color $line_56  [0,0,255]',\n",
       "  'draw line_57 diameter 1 curve {3.0 -1.0 3.0}  {3.0 1.0 3.0} ',\n",
       "  'color $line_57  [0,0,255]',\n",
       "  'draw line_58 diameter 1 curve {3.0 1.0 -3.0}  {3.0 3.0 -1.0} ',\n",
       "  'color $line_58  [0,0,255]',\n",
       "  'draw line_59 diameter 1 curve {3.0 1.0 3.0}  {3.0 3.0 1.0} ',\n",
       "  'color $line_59  [0,0,255]',\n",
       "  'draw line_60 diameter 1 curve {3.0 3.0 -1.0}  {3.0 3.0 1.0} ',\n",
       "  'color $line_60  [0,0,255]',\n",
       "  'pmesh obj_61 inline &quot;72',\n",
       "  '-3 -3 -1',\n",
       "  '-3 -3 1',\n",
       "  '-3 -1 -3',\n",
       "  '-3 -1 3',\n",
       "  '-3 1 -3',\n",
       "  '-3 1 3',\n",
       "  '-3 3 -1',\n",
       "  '-3 3 1',\n",
       "  '-1 -3 -3',\n",
       "  '-1 -3 3',\n",
       "  '-1 3 -3',\n",
       "  '-1 3 3',\n",
       "  '1 -3 -3',\n",
       "  '1 -3 3',\n",
       "  '1 3 -3',\n",
       "  '1 3 3',\n",
       "  '3 -3 -1',\n",
       "  '3 -3 1',\n",
       "  '3 -1 -3',\n",
       "  '3 -1 3',\n",
       "  '3 1 -3',\n",
       "  '3 1 3',\n",
       "  '3 3 -1',\n",
       "  '3 3 1',\n",
       "  '-3 -3 -1',\n",
       "  '-3 -3 1',\n",
       "  '-3 -1 -3',\n",
       "  '-3 -1 3',\n",
       "  '-3 1 -3',\n",
       "  '-3 1 3',\n",
       "  '-3 3 -1',\n",
       "  '-3 3 1',\n",
       "  '-1 -3 -3',\n",
       "  '-1 -3 3',\n",
       "  '-1 3 -3',\n",
       "  '-1 3 3',\n",
       "  '1 -3 -3',\n",
       "  '1 -3 3',\n",
       "  '1 3 -3',\n",
       "  '1 3 3',\n",
       "  '3 -3 -1',\n",
       "  '3 -3 1',\n",
       "  '3 -1 -3',\n",
       "  '3 -1 3',\n",
       "  '3 1 -3',\n",
       "  '3 1 3',\n",
       "  '3 3 -1',\n",
       "  '3 3 1',\n",
       "  '-3 -3 -1',\n",
       "  '-3 -3 1',\n",
       "  '-3 -1 -3',\n",
       "  '-3 -1 3',\n",
       "  '-3 1 -3',\n",
       "  '-3 1 3',\n",
       "  '-3 3 -1',\n",
       "  '-3 3 1',\n",
       "  '-1 -3 -3',\n",
       "  '-1 -3 3',\n",
       "  '-1 3 -3',\n",
       "  '-1 3 3',\n",
       "  '1 -3 -3',\n",
       "  '1 -3 3',\n",
       "  '1 3 -3',\n",
       "  '1 3 3',\n",
       "  '3 -3 -1',\n",
       "  '3 -3 1',\n",
       "  '3 -1 -3',\n",
       "  '3 -1 3',\n",
       "  '3 1 -3',\n",
       "  '3 1 3',\n",
       "  '3 3 -1',\n",
       "  '3 3 1',\n",
       "  '44',\n",
       "  '4',\n",
       "  '23',\n",
       "  '21',\n",
       "  '19',\n",
       "  '23',\n",
       "  '4',\n",
       "  '23',\n",
       "  '19',\n",
       "  '17',\n",
       "  '23',\n",
       "  '4',\n",
       "  '23',\n",
       "  '17',\n",
       "  '16',\n",
       "  '23',\n",
       "  '4',\n",
       "  '23',\n",
       "  '16',\n",
       "  '18',\n",
       "  '23',\n",
       "  '4',\n",
       "  '23',\n",
       "  '18',\n",
       "  '20',\n",
       "  '23',\n",
       "  '4',\n",
       "  '23',\n",
       "  '20',\n",
       "  '22',\n",
       "  '23',\n",
       "  '4',\n",
       "  '46',\n",
       "  '14',\n",
       "  '10',\n",
       "  '46',\n",
       "  '4',\n",
       "  '46',\n",
       "  '10',\n",
       "  '6',\n",
       "  '46',\n",
       "  '4',\n",
       "  '46',\n",
       "  '6',\n",
       "  '7',\n",
       "  '46',\n",
       "  '4',\n",
       "  '46',\n",
       "  '7',\n",
       "  '11',\n",
       "  '46',\n",
       "  '4',\n",
       "  '46',\n",
       "  '11',\n",
       "  '15',\n",
       "  '46',\n",
       "  '4',\n",
       "  '46',\n",
       "  '15',\n",
       "  '47',\n",
       "  '46',\n",
       "  '4',\n",
       "  '43',\n",
       "  '13',\n",
       "  '41',\n",
       "  '43',\n",
       "  '4',\n",
       "  '30',\n",
       "  '4',\n",
       "  '2',\n",
       "  '30',\n",
       "  '4',\n",
       "  '30',\n",
       "  '2',\n",
       "  '0',\n",
       "  '30',\n",
       "  '4',\n",
       "  '30',\n",
       "  '0',\n",
       "  '1',\n",
       "  '30',\n",
       "  '4',\n",
       "  '30',\n",
       "  '1',\n",
       "  '3',\n",
       "  '30',\n",
       "  '4',\n",
       "  '30',\n",
       "  '3',\n",
       "  '5',\n",
       "  '30',\n",
       "  '4',\n",
       "  '30',\n",
       "  '5',\n",
       "  '31',\n",
       "  '30',\n",
       "  '4',\n",
       "  '65',\n",
       "  '37',\n",
       "  '9',\n",
       "  '65',\n",
       "  '4',\n",
       "  '65',\n",
       "  '9',\n",
       "  '25',\n",
       "  '65',\n",
       "  '4',\n",
       "  '65',\n",
       "  '25',\n",
       "  '24',\n",
       "  '65',\n",
       "  '4',\n",
       "  '65',\n",
       "  '24',\n",
       "  '8',\n",
       "  '65',\n",
       "  '4',\n",
       "  '65',\n",
       "  '8',\n",
       "  '12',\n",
       "  '65',\n",
       "  '4',\n",
       "  '65',\n",
       "  '12',\n",
       "  '40',\n",
       "  '65',\n",
       "  '4',\n",
       "  '55',\n",
       "  '29',\n",
       "  '35',\n",
       "  '55',\n",
       "  '4',\n",
       "  '27',\n",
       "  '49',\n",
       "  '33',\n",
       "  '27',\n",
       "  '4',\n",
       "  '34',\n",
       "  '28',\n",
       "  '54',\n",
       "  '34',\n",
       "  '4',\n",
       "  '32',\n",
       "  '48',\n",
       "  '26',\n",
       "  '32',\n",
       "  '4',\n",
       "  '42',\n",
       "  '36',\n",
       "  '56',\n",
       "  '42',\n",
       "  '4',\n",
       "  '42',\n",
       "  '56',\n",
       "  '50',\n",
       "  '42',\n",
       "  '4',\n",
       "  '42',\n",
       "  '50',\n",
       "  '52',\n",
       "  '42',\n",
       "  '4',\n",
       "  '42',\n",
       "  '52',\n",
       "  '58',\n",
       "  '42',\n",
       "  '4',\n",
       "  '42',\n",
       "  '58',\n",
       "  '38',\n",
       "  '42',\n",
       "  '4',\n",
       "  '42',\n",
       "  '38',\n",
       "  '44',\n",
       "  '42',\n",
       "  '4',\n",
       "  '45',\n",
       "  '39',\n",
       "  '59',\n",
       "  '45',\n",
       "  '4',\n",
       "  '45',\n",
       "  '59',\n",
       "  '53',\n",
       "  '45',\n",
       "  '4',\n",
       "  '45',\n",
       "  '53',\n",
       "  '51',\n",
       "  '45',\n",
       "  '4',\n",
       "  '45',\n",
       "  '51',\n",
       "  '57',\n",
       "  '45',\n",
       "  '4',\n",
       "  '45',\n",
       "  '57',\n",
       "  '61',\n",
       "  '45',\n",
       "  '4',\n",
       "  '45',\n",
       "  '61',\n",
       "  '67',\n",
       "  '45',\n",
       "  '4',\n",
       "  '64',\n",
       "  '60',\n",
       "  '66',\n",
       "  '64',\n",
       "  '4',\n",
       "  '68',\n",
       "  '62',\n",
       "  '70',\n",
       "  '68',\n",
       "  '4',\n",
       "  '71',\n",
       "  '63',\n",
       "  '69',\n",
       "  '71&quot;',\n",
       "  'color pmesh  [0,128,0]',\n",
       "  'draw line_62 diameter 1 curve {-3.0 -3.0 -3.0}  {-3.0 3.0 -3.0} ',\n",
       "  'color $line_62 translucent 0.5 [0,0,0]',\n",
       "  'draw line_63 diameter 1 curve {-3.0 3.0 -3.0}  {3.0 3.0 -3.0} ',\n",
       "  'color $line_63 translucent 0.5 [0,0,0]',\n",
       "  'draw line_64 diameter 1 curve {3.0 3.0 -3.0}  {3.0 -3.0 -3.0} ',\n",
       "  'color $line_64 translucent 0.5 [0,0,0]',\n",
       "  'draw line_65 diameter 1 curve {3.0 -3.0 -3.0}  {-3.0 -3.0 -3.0} ',\n",
       "  'color $line_65 translucent 0.5 [0,0,0]',\n",
       "  'draw line_66 diameter 1 curve {-3.0 -3.0 -3.0}  {-3.0 -3.0 3.0} ',\n",
       "  'color $line_66 translucent 0.5 [0,0,0]',\n",
       "  'draw line_67 diameter 1 curve {-3.0 -3.0 3.0}  {-3.0 3.0 3.0} ',\n",
       "  'color $line_67 translucent 0.5 [0,0,0]',\n",
       "  'draw line_68 diameter 1 curve {-3.0 3.0 3.0}  {3.0 3.0 3.0} ',\n",
       "  'color $line_68 translucent 0.5 [0,0,0]',\n",
       "  'draw line_69 diameter 1 curve {3.0 3.0 3.0}  {3.0 -3.0 3.0} ',\n",
       "  'color $line_69 translucent 0.5 [0,0,0]',\n",
       "  'draw line_70 diameter 1 curve {3.0 -3.0 3.0}  {-3.0 -3.0 3.0} ',\n",
       "  'color $line_70 translucent 0.5 [0,0,0]',\n",
       "  'draw line_71 diameter 1 curve {-3.0 -3.0 3.0} ',\n",
       "  'color $line_71 translucent 0.5 [0,0,0]',\n",
       "  'draw line_72 diameter 1 curve {-3.0 3.0 -3.0}  {-3.0 3.0 3.0} ',\n",
       "  'color $line_72 translucent 0.5 [0,0,0]',\n",
       "  'draw line_73 diameter 1 curve {3.0 -3.0 -3.0}  {3.0 -3.0 3.0} ',\n",
       "  'color $line_73 translucent 0.5 [0,0,0]',\n",
       "  'draw line_74 diameter 1 curve {3.0 3.0 -3.0}  {3.0 3.0 3.0} ',\n",
       "  'color $line_74 translucent 0.5 [0,0,0]',\n",
       "  'select atomno = 1',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 2',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 3',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'select atomno = 4',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 5',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 6',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'select atomno = 7',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;-1.0&quot;',\n",
       "  'select atomno = 8',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;0.0&quot;',\n",
       "  'select atomno = 9',\n",
       "  'color atom  [76,76,76]',\n",
       "  'label &quot;1.0&quot;',\n",
       "  'isosurface fullylit; pmesh o* fullylit; set antialiasdisplay on;',\n",
       "].join('\\n');;\n",
       "    var Info = {\n",
       "      width: '100%',\n",
       "      height: '500',\n",
       "      debug: false,\n",
       "      disableInitialConsole: true,   // very slow when used with inline mesh\n",
       "      color: '#3131ff',\n",
       "      addSelectionOptions: false,\n",
       "      use: 'HTML5',\n",
       "      j2sPath: '/nbextensions/jsmol/j2s',\n",
       "      script: script,\n",
       "    };\n",
       "    var jmolApplet0 = Jmol.getApplet('jmolApplet0', Info);\n",
       "  </script>\n",
       "</body>\n",
       "</html>\n",
       "\" \n",
       "        width=\"100%\"\n",
       "        height=\"500\"\n",
       "        style=\"border: 0;\">\n",
       "</iframe>\n"
      ],
      "text/plain": [
       "Graphics3d Object"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "TC.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3) The third construction will use some nice trick that we can do in sage.\n",
    "\n",
    "We can take the polar dual of the cube, the octahedron, and scale it by a factor 2:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "OC = 2*Cube.polar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, we can take the intersection with the cube again :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "ECCO = Cube & OC"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What is ECCO?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ECCO.is_combinatorially_isomorphic(EC)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That's it! You found 3 ways to construct the cuboctahedron.\n",
    "\n",
    "* Question: do they all have the same vertices?\n",
    "* Question: which polytope do we get if we dilate the octahedron by only 3/2 instead of 2?\n",
    "* Can you find this polytope in the library and check if it is isomorphic?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "** Exercise B **\n",
    "\n",
    "Choose five examples discussed in lecture from the list:\n",
    "<http://doc.sagemath.org/html/en/reference/discrete_geometry/sage/geometry/polyhedron/library.html\">\n",
    "And find their $V$-representation, $H$-representation, and $f$-vector\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "SageMath 8.3.beta1",
   "language": "",
   "name": "sagemath"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
