{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "382fe56b", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "%display latex" ] }, { "cell_type": "markdown", "id": "10fbc1ce", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Matrices Polynomiales \n", "\n", "Objet d'étude : matrices $M$ de taille $m \\times n$ à coefficients dans $k[x]$ avec $k$ un corps." ] }, { "cell_type": "code", "execution_count": 2, "id": "f4bd9abb", "metadata": { "scrolled": true, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle M= \\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle M= \\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right)$" ], "text/plain": [ "M= \\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k = GF(7)\n", "n = 2\n", "kx. = PolynomialRing(k)\n", "M = Matrix(kx,n,n,lambda i,j: kx.random_element(degree=(1,3)))\n", "\n", "'M=' + latex(M)" ] }, { "cell_type": "markdown", "id": "5f0ec254-a50d-4899-ac3d-65ee81f3ca2b", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**Mon rapport à ce sujet ?**\n", "* Rapporteur de tickets sur `sage/matrix/matrix_polynomial_dense.pyx`\n", "* Lié à ma recherche:\n", " * Comment calculer rapidement ?\n", " * Application au décodage de codes correcteurs" ] }, { "cell_type": "markdown", "id": "aa40299e", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Fondements mathématiques\n", "\n", "* Matrices de $k^{m \\times n} \\leftrightarrow$ Étude des $k$-espaces vectoriels\n", "* Matrices de $k[x]^{m \\times n} \\leftrightarrow$ Étude des $k[x]$-modules (module sur un anneau principal)\n", "\n", "**Définition:** $k[x]$-module associé $\\langle M \\rangle$: ensemble des vecteurs qui sont des combinaisons $k[x]$-linéaires des lignes de $M$" ] }, { "cell_type": "code", "execution_count": 3, "id": "6a2e9c05", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle (4 x + 2) M_{0,*} + (2 x + 5) M_{1,*} = \\left(4 x^{4} + 2 x^{3} + 3 x^{2},\\,6 x^{2} + 3 x + 4\\right) = v \\in \\langle M \\rangle\\)" ], "text/latex": [ "$\\displaystyle (4 x + 2) M_{0,*} + (2 x + 5) M_{1,*} = \\left(4 x^{4} + 2 x^{3} + 3 x^{2},\\,6 x^{2} + 3 x + 4\\right) = v \\in \\langle M \\rangle$" ], "text/plain": [ "(4 x + 2) M_{0,*} + (2 x + 5) M_{1,*} = \\left(4 x^{4} + 2 x^{3} + 3 x^{2},\\,6 x^{2} + 3 x + 4\\right) = v \\in \\langle M \\rangle" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = [kx.random_element(degree=1) for i in range(n)]\n", "v = c[0] * M.row(0) + c[1] * M.row(1)\n", "\n", "LatexExpr(f'({latex(c[0])}) M_{{0,*}} + ({latex(c[1])}) M_{{1,*}} = {latex(v)} = v \\\\in \\\\langle M \\\\rangle')" ] }, { "cell_type": "markdown", "id": "fb534026", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Théorie classique des modules sur un anneau principal:**\n", "* Forme normale de Hermite\n", "* Forme normale de Smith\n", "\n", "**Remarque:**\n", "* matrice *unimodulaire* $U$: inversible de $k[x]^{n \\times n} \\Leftrightarrow \\det(U) \\in k^\\ast$\n", "* $N$ base de $\\langle M \\rangle$ ssi $N = U M$ avec $U$ unimodulaire" ] }, { "cell_type": "markdown", "id": "4c41e148", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Forme normale de Hermite" ] }, { "cell_type": "code", "execution_count": 4, "id": "c4f84178", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), H = UM = \\left(\\begin{array}{rr}\n", "1 & 6 x^{3} + 4 x^{2} + x + 3 \\\\\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right),\\)" ], "text/latex": [ "$\\displaystyle M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), H = UM = \\left(\\begin{array}{rr}\n", "1 & 6 x^{3} + 4 x^{2} + x + 3 \\\\\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right),$" ], "text/plain": [ "M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), H = UM = \\left(\\begin{array}{rr}\n", "1 & 6 x^{3} + 4 x^{2} + x + 3 \\\\\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right)," ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "x^{3} + 5 x^{2} + 4 & 5 x + 3\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "x^{3} + 5 x^{2} + 4 & 5 x + 3\n", "\\end{array}\\right)$" ], "text/plain": [ "U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "x^{3} + 5 x^{2} + 4 & 5 x + 3\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "H, U = M.hermite_form(transformation=True)\n", "pretty_print(LatexExpr(f'M={latex(M)}, H = UM = {latex(H)},'))\n", "pretty_print(LatexExpr(f'U={latex(U)}'))" ] }, { "cell_type": "markdown", "id": "60f63b7e-fe18-4a00-9d23-34b032c27b0b", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Hermite utile pour:\n", "* Élimination: par exemple" ] }, { "cell_type": "code", "execution_count": 5, "id": "67bc6143-a375-4895-ace4-3b1f80dd5963", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\langle M \\rangle \\cap (0,k[x]) = \\left(\\begin{array}{rr}\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle \\langle M \\rangle \\cap (0,k[x]) = \\left(\\begin{array}{rr}\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right)$" ], "text/plain": [ "\\langle M \\rangle \\cap (0,k[x]) = \\left(\\begin{array}{rr}\n", "0 & x^{4} + 5 x^{3} + 5 x^{2} + 4 x + 1\n", "\\end{array}\\right)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LatexExpr(f'\\\\langle M \\\\rangle \\\\cap (0,k[x]) = {latex(H[1:])}')" ] }, { "cell_type": "markdown", "id": "8e185200-f910-4b94-b3c6-e3e598d5e147", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Hermite utile pour:\n", "* Tester appartenance $v\\in \\langle M \\rangle$ et inclusion $\\langle M \\rangle \\subseteq \\langle M' \\rangle$\n", "* Résoudre des systèmes linéaires sur $k[x]$ (ou diophantiens sur $\\mathbb{Z}$):" ] }, { "cell_type": "code", "execution_count": 6, "id": "f32c61b2-6857-48cc-a61c-e28661ad6d57", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle v = \\left(5 x^{4} + x^{3} + x^{2} + 5 x + 6,\\,3 x^{2} + x + 3\\right)\\)" ], "text/latex": [ "$\\displaystyle v = \\left(5 x^{4} + x^{3} + x^{2} + 5 x + 6,\\,3 x^{2} + x + 3\\right)$" ], "text/plain": [ "v = \\left(5 x^{4} + x^{3} + x^{2} + 5 x + 6,\\,3 x^{2} + x + 3\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle v - (v_0 // H_{0,0}) H_{0,*} = \\left(0,\\,5 x^{7} + 2 x^{6} + 6 x^{5} + 6 x^{4} + 3 x^{3} + 6 x^{2} + x + 6\\right) \\rightarrow v'\\)" ], "text/latex": [ "$\\displaystyle v - (v_0 // H_{0,0}) H_{0,*} = \\left(0,\\,5 x^{7} + 2 x^{6} + 6 x^{5} + 6 x^{4} + 3 x^{3} + 6 x^{2} + x + 6\\right) \\rightarrow v'$" ], "text/plain": [ "v - (v_0 // H_{0,0}) H_{0,*} = \\left(0,\\,5 x^{7} + 2 x^{6} + 6 x^{5} + 6 x^{4} + 3 x^{3} + 6 x^{2} + x + 6\\right) \\rightarrow v'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle v' - (v'_1 // H_{1,1}) H_{1,*} = \\left(0,\\,0\\right)\\)" ], "text/latex": [ "$\\displaystyle v' - (v'_1 // H_{1,1}) H_{1,*} = \\left(0,\\,0\\right)$" ], "text/plain": [ "v' - (v'_1 // H_{1,1}) H_{1,*} = \\left(0,\\,0\\right)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "v = Matrix(1,n,lambda i,j: kx.random_element(degree=1)) * M\n", "v = v.row(0)\n", "pretty_print(LatexExpr(f'v = {latex(v)}'))\n", "\n", "vp = v - (v[0]//H[0,0]) * H.row(0)\n", "pretty_print(LatexExpr(f'v - (v_0 // H_{{0,0}}) H_{{0,*}} = {latex(vp)} \\\\rightarrow v\\''))\n", "\n", "vpp = vp - vp[1]//H[1,1] * H.row(1)\n", "pretty_print(LatexExpr(f'v\\' - (v\\'_1 // H_{{1,1}}) H_{{1,*}} = {latex(vpp)}'))" ] }, { "cell_type": "markdown", "id": "eee1dc96", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Forme normale de Smith" ] }, { "cell_type": "code", "execution_count": 7, "id": "dc0dba36", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), S = UMV = \\left(\\begin{array}{rr}\n", "1 & 0 \\\\\n", "0 & 5 x^{4} + 4 x^{3} + 4 x^{2} + 6 x + 5\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), S = UMV = \\left(\\begin{array}{rr}\n", "1 & 0 \\\\\n", "0 & 5 x^{4} + 4 x^{3} + 4 x^{2} + 6 x + 5\n", "\\end{array}\\right)$" ], "text/plain": [ "M=\\left(\\begin{array}{rr}\n", "4 x + 1 & x \\\\\n", "2 x^{3} + 3 x^{2} + 1 & x + 5\n", "\\end{array}\\right), S = UMV = \\left(\\begin{array}{rr}\n", "1 & 0 \\\\\n", "0 & 5 x^{4} + 4 x^{3} + 4 x^{2} + 6 x + 5\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "5 x^{3} + 4 x^{2} + 6 & 4 x + 1\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "5 x^{3} + 4 x^{2} + 6 & 4 x + 1\n", "\\end{array}\\right)$" ], "text/plain": [ "U=\\left(\\begin{array}{rr}\n", "6 x^{2} + 4 x + 6 & 2 \\\\\n", "5 x^{3} + 4 x^{2} + 6 & 4 x + 1\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle V=\\left(\\begin{array}{rr}\n", "1 & x^{3} + 3 x^{2} + 6 x + 4 \\\\\n", "0 & 1\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle V=\\left(\\begin{array}{rr}\n", "1 & x^{3} + 3 x^{2} + 6 x + 4 \\\\\n", "0 & 1\n", "\\end{array}\\right)$" ], "text/plain": [ "V=\\left(\\begin{array}{rr}\n", "1 & x^{3} + 3 x^{2} + 6 x + 4 \\\\\n", "0 & 1\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "S, U, V = M.smith_form(transformation=True)\n", "pretty_print(LatexExpr(f'M={latex(M)}, S = UMV = {latex(S)}'))\n", "pretty_print(LatexExpr(f'U={latex(U)}'))\n", "pretty_print(LatexExpr(f'V={latex(V)}'))" ] }, { "cell_type": "markdown", "id": "12c0e8cf", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Smith utile pour:\n", "* preuve algorithmique du théorème de la base adaptée: \n", " Dans la base $V$ de $k[x]^n$, on a $\\langle M \\rangle \\simeq S_{1,1} k[x] \\oplus S_{2,2} k[x] \\oplus S_{3,3} k[x]$\n", "* Invariants de similitude d'une matrice de $m \\in k^{n \\times n}$: \n", " Égaux aux invariants de Smith de $(x Id - m) \\in k[x]^{n \\times n}$\n", "* Calcul d'homologie $\\mathbb{Z}^k \\rightarrow_A \\mathbb{Z}^m \\rightarrow_B \\mathbb{Z}^n$ (voir par ex. ce [lien](https://www.matem.unam.mx/~omar/mathX27/smith-form.html))" ] }, { "cell_type": "markdown", "id": "09411b32", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Cet exposé : forme réduite / forme de Popov\n", "\n", "Calculer une *base réduite* $R \\in k[x]^{m \\times n}$ de $\\langle M \\rangle$, \n", "*i.e.* telle que les degrés des lignes de $R$ sont minimales parmi toutes les bases" ] }, { "cell_type": "code", "execution_count": 8, "id": "c5ffe779", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle M=\\left(\\begin{array}{rr}\n", "5 x^{3} + 3 x^{2} + 3 x + 5 & 3 x^{3} + 6 x^{2} + 5 x + 1 \\\\\n", "6 x^{2} + 3 x + 4 & 2 x^{3} + 2 x^{2} + 6 \\\\\n", "x + 6 & 4 x + 3\n", "\\end{array}\\right) \\rightarrow_{réduction} R=UM=\\left(\\begin{array}{rr}\n", "3 x + 2 & 6 \\\\\n", "6 & 3 \\\\\n", "0 & 0\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle M=\\left(\\begin{array}{rr}\n", "5 x^{3} + 3 x^{2} + 3 x + 5 & 3 x^{3} + 6 x^{2} + 5 x + 1 \\\\\n", "6 x^{2} + 3 x + 4 & 2 x^{3} + 2 x^{2} + 6 \\\\\n", "x + 6 & 4 x + 3\n", "\\end{array}\\right) \\rightarrow_{réduction} R=UM=\\left(\\begin{array}{rr}\n", "3 x + 2 & 6 \\\\\n", "6 & 3 \\\\\n", "0 & 0\n", "\\end{array}\\right)$" ], "text/plain": [ "M=\\left(\\begin{array}{rr}\n", "5 x^{3} + 3 x^{2} + 3 x + 5 & 3 x^{3} + 6 x^{2} + 5 x + 1 \\\\\n", "6 x^{2} + 3 x + 4 & 2 x^{3} + 2 x^{2} + 6 \\\\\n", "x + 6 & 4 x + 3\n", "\\end{array}\\right) \\rightarrow_{réduction} R=UM=\\left(\\begin{array}{rr}\n", "3 x + 2 & 6 \\\\\n", "6 & 3 \\\\\n", "0 & 0\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle U=\\left(\\begin{array}{rrr}\n", "4 x + 1 & 6 x + 6 & x^{3} + 4 x^{2} + 5 x + 6 \\\\\n", "x^{2} + 4 x + 5 & 5 x^{2} + x + 1 & 2 x^{4} + 5 x^{3} + 2 x + 2 \\\\\n", "x^{3} + 3 x^{2} + x + 2 & 5 x^{3} + 3 x^{2} + 6 & 2 x^{5} + 3 x^{4} + 2 x^{3} + 2 x^{2} + 6\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle U=\\left(\\begin{array}{rrr}\n", "4 x + 1 & 6 x + 6 & x^{3} + 4 x^{2} + 5 x + 6 \\\\\n", "x^{2} + 4 x + 5 & 5 x^{2} + x + 1 & 2 x^{4} + 5 x^{3} + 2 x + 2 \\\\\n", "x^{3} + 3 x^{2} + x + 2 & 5 x^{3} + 3 x^{2} + 6 & 2 x^{5} + 3 x^{4} + 2 x^{3} + 2 x^{2} + 6\n", "\\end{array}\\right)$" ], "text/plain": [ "U=\\left(\\begin{array}{rrr}\n", "4 x + 1 & 6 x + 6 & x^{3} + 4 x^{2} + 5 x + 6 \\\\\n", "x^{2} + 4 x + 5 & 5 x^{2} + x + 1 & 2 x^{4} + 5 x^{3} + 2 x + 2 \\\\\n", "x^{3} + 3 x^{2} + x + 2 & 5 x^{3} + 3 x^{2} + 6 & 2 x^{5} + 3 x^{4} + 2 x^{3} + 2 x^{2} + 6\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "M = Matrix(kx,3,2,[\n", "[5*x^3 + 3*x^2 + 3*x + 5, 3*x^3 + 6*x^2 + 5*x + 1],\n", "[ 6*x^2 + 3*x + 4, 2*x^3 + 2*x^2 + 6],\n", "[ x + 6, 4*x + 3]])\n", "\n", "R, U = M.weak_popov_form(ordered=True, transformation = True)\n", "pretty_print(LatexExpr(f'M={latex(M)} \\\\rightarrow_{{réduction}} R=UM={latex(R)}'))\n", "pretty_print(LatexExpr(f'U={latex(U)}'))" ] }, { "cell_type": "markdown", "id": "4ca5fa58", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Intérêt de la base réduite\n", "\n", "* Représentation compacte du $k[x]$-module $\\langle M \\rangle$\n", "* Algorithmique rapide\n", "* Réduire les autres opérations à des bases réduites (?)\n", " * formes normales de Hermite / Smith\n", " * forme normale de Popov\n", " * déterminant\n", " * résolution de systèmes linéaires\n", " * calcul d'un vecteur court (petit degré)\n", "* Applications\n", " * Théorie du contrôle, systèmes linéaires dynamiques [Kailath '80]\n", " * Décodage de codes correcteurs d'erreurs " ] }, { "cell_type": "code", "execution_count": 9, "id": "5aabc475", "metadata": { "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "def argmax(L):\n", " l = len(L)\n", " index = -1\n", " currentMax = -1\n", " for i in range(l):\n", " if (L[i] >= currentMax):\n", " currentMax = L[i]\n", " index = i\n", " return index\n", "\n", "def latex_pivots(M):\n", " m,n = M.dimensions()\n", " begin = r'\\left(\\begin{array}{'\n", " for i in range(n):\n", " begin += 'r'\n", " begin += '}\\n'\n", "\n", " corps = ''\n", " for i in range(m):\n", " pivot_index = argmax([M[i,j].degree() for j in range(n)])\n", " for j in range(n-1):\n", " if (j == pivot_index):\n", " corps += r' \\color{{red}}{{[{}]}} &'.format(M[i,j].degree())\n", " else:\n", " corps += r' [{}] &'.format(M[i,j].degree())\n", "\n", " j=n-1\n", " if (j == pivot_index):\n", " corps += r' \\color{{red}}{{[{}]}} \\\\ '.format(M[i,j].degree())\n", " else:\n", " corps += r' [{}] \\\\'.format(M[i,j].degree())\n", " \n", " end = r'\\end{array}\\right)'\n", "\n", " return begin + corps + end" ] }, { "cell_type": "code", "execution_count": 10, "id": "e78c6381", "metadata": { "jupyter": { "source_hidden": true }, "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "def add_multiple_of_row_c(M, i, j, s, start_col):\n", " for c in range(start_col,M.ncols()):\n", " M[i,c] = M[i,c] + s*M[j,c] \n", "\n", "def _weak_popov_form_step(M_in, transformation=False):\n", " M = M_in.__copy__()\n", " m, n = M.dimensions()\n", "\n", " R = M.base_ring()\n", " one = R.one()\n", " \n", " Mlist = [M_in]\n", " transformationList = []\n", "\n", " # initialise to_row and conflicts list\n", " to_row = [[] for i in range(n)]\n", " conflicts = []\n", " for i in range(m):\n", " bestp = -1\n", " best = -1\n", " for c in range(n):\n", " d = M[i,c].degree()\n", "\n", " if d >= best:\n", " bestp = c\n", " best = d\n", "\n", " if best >= 0:\n", " to_row[bestp].append((i,best))\n", " if len(to_row[bestp]) > 1:\n", " conflicts.append(bestp)\n", "\n", " # while there is a conflict, do a simple transformation\n", " while conflicts:\n", " c = conflicts.pop()\n", " row = to_row[c]\n", " i,ideg = row.pop()\n", " j,jdeg = row.pop()\n", "\n", " if jdeg > ideg:\n", " i,j = j,i\n", " ideg,jdeg = jdeg,ideg\n", "\n", " coeff = - M[i,c].lc() / M[j,c].lc()\n", " s = coeff * one.shift(ideg - jdeg)\n", "\n", " add_multiple_of_row_c(M,i, j, s, 0)\n", " \n", " Mlist.append(M.__copy__())\n", " transformationList.append([i,j,s])\n", "\n", " row.append((j,jdeg))\n", "\n", " bestp = -1\n", " best = -1\n", " for c in range(n):\n", " d = M[i,c].degree()\n", "\n", " if d >= best:\n", " bestp = c\n", " best = d\n", "\n", " if best >= 0:\n", " to_row[bestp].append((i,best))\n", " if len(to_row[bestp]) > 1:\n", " conflicts.append(bestp)\n", "\n", " return Mlist, transformationList" ] }, { "cell_type": "markdown", "id": "c70ec081-9460-40e5-ac09-6da7d07d5bd5", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Idée de l'algorithme\n", "* Pivot d'une ligne de $M$: Coefficient de plus haut degré le plus à droite\n", "* Si 2 lignes ont un pivot sur la même colonne, on peut réduire une ligne par rapport à une autre\n", "* Réduire : \n", " * soit déplacer le pivot d'une ligne plus à gauche\n", " * soit baisser le degré maximal de la ligne" ] }, { "cell_type": "code", "execution_count": 11, "id": "00a9ded2-7174-4838-bfd1-2c5d2497faab", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e4211d91c65947cbacb5c472083a5469", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Interactive function with 1 widget\n", " k: Dropdown(description='k', options=(0, 1…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Ms, reductions = _weak_popov_form_step(M)\n", "\n", "@interact\n", "def g(k=range(len(reductions))):\n", " red = reductions[k]\n", " Mfrom = Ms[k]\n", " Mto = Ms[k+1]\n", " l = LatexExpr(latex_pivots(Mfrom))\n", " l += LatexExpr(f'\\\\xrightarrow{{ M_{{{red[0]}}} \\\\leftarrow M_{{{red[0]}}} - ({latex(red[2])}) M_{{{red[1]}}} }}')\n", " l += LatexExpr(latex_pivots(Mto))\n", " pretty_print(l)" ] }, { "cell_type": "markdown", "id": "32db36ef", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Lien avec l'algorithme du pgcd" ] }, { "cell_type": "code", "execution_count": 12, "id": "7bd0e6f6-abcf-4462-93df-184764a1a0fc", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fabf6eb2acb14ae2b77ac98f38a5a631", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Interactive function with 1 widget\n", " k: Dropdown(description='k', options=(0, 1…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = Matrix(kx,2,1,lambda i,j: kx.random_element(degree=5))\n", "Ns, reductions2 = _weak_popov_form_step(N)\n", "\n", "@interact\n", "def g(k=range(len(reductions2))):\n", " red = reductions2[k]\n", " Mfrom = Ns[k]\n", " Mto = Ns[k+1]\n", " l = LatexExpr(latex(Mfrom))\n", " l += LatexExpr(f'\\\\xrightarrow{{ M_{{{red[0]}}} \\\\leftarrow M_{{{red[0]}}} - ({latex(red[2])}) M_{{{red[1]}}} }}')\n", " l += LatexExpr(latex(Mto))\n", " pretty_print(l)" ] }, { "cell_type": "markdown", "id": "5598f930-f7ec-43df-b547-6d1363b7ecfc", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Forme de Popov\n", "\n", "* *Forme de Popov faible* quand il n'y a plus de réductions possibles\n", " * Chaque pivot sur une colonne différente\n", " * Presque une forme normale $\\leadsto$ forme normale de Popov (degré dans une colonne $<$ degré du pivot)\n", "* Lien avec les bases de Gröbner sur $k[x]^n$:\n", " * Forme de Popov $\\simeq$ base de Gröbner réduite (pour un ordre du degré)\n", " * Forme de Popov faible $\\simeq$ base de Gröbner (non réduite)\n", " * Forme de Hermite $\\simeq$ base de Gröbner réduite (pour un ordre d'élimination)" ] }, { "cell_type": "markdown", "id": "c40233c6", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Application: pgcd de matrices dans $k[x]^{n \\times n}$\n", "\n", "Propriétés de $G = \\textrm{left_gcd}(M,N)$:\n", "* Il existe $U,V \\in k[x]^{n \\times n}$ telles que $U M + V N = G$\n", "* $G$ divise (à gauche) $M$ et $N$ :\n", " * Il existe $C_1, C_2 \\in k[x]^{n \\times n}$ telles que $C_1 G = M$ et $C_2 G = N$\n", " " ] }, { "cell_type": "code", "execution_count": 13, "id": "ead58bfb-4dcd-4a89-91e2-9e94763ecb10", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle G = \\left(\\begin{array}{rr}\n", "2 & 0 \\\\\n", "4 & 1\n", "\\end{array}\\right)\\)" ], "text/latex": [ "$\\displaystyle G = \\left(\\begin{array}{rr}\n", "2 & 0 \\\\\n", "4 & 1\n", "\\end{array}\\right)$" ], "text/plain": [ "G = \\left(\\begin{array}{rr}\n", "2 & 0 \\\\\n", "4 & 1\n", "\\end{array}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{rr}\n", "0 & 3 x^{3} + 5 x^{2} + 3 x + 2 \\\\\n", "0 & 5 x^{2} + 3\n", "\\end{array}\\right) M + \\left(\\begin{array}{rr}\n", "4 x^{3} + 4 x^{2} + 2 x + 5 & 2 x^{3} + 4 x + 3 \\\\\n", "2 x^{2} + x + 6 & x^{2} + 3 x + 5\n", "\\end{array}\\right) N = G\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{rr}\n", "0 & 3 x^{3} + 5 x^{2} + 3 x + 2 \\\\\n", "0 & 5 x^{2} + 3\n", "\\end{array}\\right) M + \\left(\\begin{array}{rr}\n", "4 x^{3} + 4 x^{2} + 2 x + 5 & 2 x^{3} + 4 x + 3 \\\\\n", "2 x^{2} + x + 6 & x^{2} + 3 x + 5\n", "\\end{array}\\right) N = G$" ], "text/plain": [ "\\left(\\begin{array}{rr}\n", "0 & 3 x^{3} + 5 x^{2} + 3 x + 2 \\\\\n", "0 & 5 x^{2} + 3\n", "\\end{array}\\right) M + \\left(\\begin{array}{rr}\n", "4 x^{3} + 4 x^{2} + 2 x + 5 & 2 x^{3} + 4 x + 3 \\\\\n", "2 x^{2} + x + 6 & x^{2} + 3 x + 5\n", "\\end{array}\\right) N = G" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n = 2\n", "M = Matrix(kx,n,n,lambda i,j: kx.random_element(degree=2))\n", "N = Matrix(kx,n,n,lambda i,j: kx.random_element(degree=2))\n", "\n", "G, T = M.stack(N).weak_popov_form(transformation=True)\n", "G = G[0:n]\n", "U = T[0:n,0:n]\n", "V = T[0:n,n:2*n] \n", "\n", "pretty_print(LatexExpr(f'G = {latex(G)}'))\n", "pretty_print(LatexExpr(f'{latex(U)} M + {latex(V)} N = G'))" ] }, { "cell_type": "code", "execution_count": 14, "id": "eedf0352-d3c9-4185-b754-5767fe5b83e6", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{rr}\n", "x^{2} + 5 x & 4 x^{2} + 4 \\\\\n", "x^{2} + 2 x + 5 & 4 x^{2} + 6 x + 4\n", "\\end{array}\\right) G = M\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{rr}\n", "x^{2} + 5 x & 4 x^{2} + 4 \\\\\n", "x^{2} + 2 x + 5 & 4 x^{2} + 6 x + 4\n", "\\end{array}\\right) G = M$" ], "text/plain": [ "\\left(\\begin{array}{rr}\n", "x^{2} + 5 x & 4 x^{2} + 4 \\\\\n", "x^{2} + 2 x + 5 & 4 x^{2} + 6 x + 4\n", "\\end{array}\\right) G = M" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle \\left(\\begin{array}{rr}\n", "x^{2} + 2 x + 1 & 5 x^{2} + x + 2 \\\\\n", "6 x & 5 x^{2} + 4 x + 1\n", "\\end{array}\\right) G = N\\)" ], "text/latex": [ "$\\displaystyle \\left(\\begin{array}{rr}\n", "x^{2} + 2 x + 1 & 5 x^{2} + x + 2 \\\\\n", "6 x & 5 x^{2} + 4 x + 1\n", "\\end{array}\\right) G = N$" ], "text/plain": [ "\\left(\\begin{array}{rr}\n", "x^{2} + 2 x + 1 & 5 x^{2} + x + 2 \\\\\n", "6 x & 5 x^{2} + 4 x + 1\n", "\\end{array}\\right) G = N" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "C = T^(-1)\n", "C1 = C[0:n,0:n]\n", "C2 = C[n:2*n,0:n]\n", "C1 * G == M\n", "C2 * G == N\n", "\n", "pretty_print(LatexExpr(f'{latex(C1)} G = M'))\n", "pretty_print(LatexExpr(f'{latex(C2)} G = N'))" ] }, { "cell_type": "markdown", "id": "55afe3c2-2b0a-4318-98bb-12a44ee16d14", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Application au décodage de codes correcteurs\n", "\n", "*Codes de Reed-Solomon:*\n", "\n", "Si \n", "* $\\alpha_1,\\dots,\\alpha_n$ sont les points d'évaluation\n", "* $(C(\\alpha_1),\\dots,C(\\alpha_n))$ est le mot de code transmis pour $C\\in k[x]_{ gros du travail avec un appel à weak_popov_form\n", " - reduced_form -> weak_popov_form\n", " - hermite_form -> hermite_form_euclidean ?\n", " - left_quo_rem \n", " (Réduction par un k[x]-module)\n", " (généralisation de la division euclidienne par reverse, cf _right_quo_rem_reduced)\n", " - minimal_approximant_basis -> _approximant_basis_iterative\n", " - minimal_kernel_basis\n", " \n", "Fonctions de vérification:\n", " - is_reduced\n", " - is_weak_popov\n", " - is_popov\n", " - is_hermite\n", " - is_minimal_approximant_basis\n", " - is_minimal_kernel_basis" ] } ], "metadata": { "celltoolbar": "Aucun(e)", "kernelspec": { "display_name": "SageMath 9.6", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "01a9372a88fa4b6cbbdf58f7dc1e5ce3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "0336cacaeb234087ace2d7ecddf04bf2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "06ec111c07b04acb8673dfceb08a4353": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "08468bdaca084e75ab87a599aa69f428": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_b8b8464f8d9d4ea59a3dcf54fa6c4e95", "IPY_MODEL_3299fee524b14f099cd1cd8e4a3eba89" ], "layout": "IPY_MODEL_946a596ecb054e5ea4c9bbc3aae41fb5" } }, "08a6329e26ab4969bcda1af3f2f60b05": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_b68e9944dec0444f86c03ba200cdb2bd", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "0d4aa7f98341483e9ca7404ac950a8d2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "0e61e807bee544789407bba20aec965c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "0e997d4f740c4a20bf4a7c6d5469cc34": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "10332b88b9cc490bae0a53f32c5c2910": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "197379ec4ccd4ea2b7ba9def761a1c0e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8" ], "description": "k", "index": 0, "layout": "IPY_MODEL_4c6c18cfb80d498fbcf22c4164dc7ad5", "style": "IPY_MODEL_47a56faf84ab4db49ea97d88ba48d2d9" } }, "1cfb05906dcf4130a7d2e34f0d554fb7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "1e03ec59ef9942b48fab13cbc804eca5": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_2293ffd8dd114ef68bcff0591c4ae4f7", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n3 x^{5} + 3 x^{4} + 6 x^{2} + 3 x + 4\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n5 x^{4} + 5 x^{3} + 2 x + 4\n\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n3 x^{5} + 3 x^{4} + 6 x^{2} + 3 x + 4\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n5 x^{4} + 5 x^{3} + 2 x + 4\n\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n3 x^{5} + 3 x^{4} + 6 x^{2} + 3 x + 4\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 5 x^{4} + 2 x^{3} + 6 x^{2} + x \\\\\n5 x^{4} + 5 x^{3} + 2 x + 4\n\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "1f8b05639093423282199a97b8a06195": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "2293ffd8dd114ef68bcff0591c4ae4f7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "23d0f66d3aed4ad1a04ed230b94fbbc8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "26613b518ed84bb18da2f9a8730bc29c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "296718552e3144ce96796419d2030d7f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "2dd58d2d65e14fbf8e9b0b931c681d5e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_597997f23611481487e927085159de17", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\nx^{5} + 3 x^{3} + 6 x^{2} + 3 x + 1\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\n6 x^{4} + 2 x^{3} + x^{2} + 3 x + 3\n\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\nx^{5} + 3 x^{3} + 6 x^{2} + 3 x + 1\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\n6 x^{4} + 2 x^{3} + x^{2} + 3 x + 3\n\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\nx^{5} + 3 x^{3} + 6 x^{2} + 3 x + 1\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\n6 x^{5} + 6 x^{4} + 6 x^{3} + 2 x^{2} + 2 \\\\\n6 x^{4} + 2 x^{3} + x^{2} + 3 x + 3\n\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "3299fee524b14f099cd1cd8e4a3eba89": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_0e997d4f740c4a20bf4a7c6d5469cc34", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "3589c9e4d60b43b489a8ab56d1b9b20a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_e54ed13aa9d04d2cb4897a721607391e", "IPY_MODEL_9f01c1c3e4794c8d9c558885f78391a7" ], "layout": "IPY_MODEL_de6b752702f94c1eae55a7ece2a9d9d9" } }, "3eb3be02a2ef43d2bbd8c097dd42fcac": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ], "description": "k", "index": 0, "layout": "IPY_MODEL_01a9372a88fa4b6cbbdf58f7dc1e5ce3", "style": "IPY_MODEL_83a91488495a439188b61989e4fb501a" } }, "3eb888bae6af4eeeb2a0307263ab2e5f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_197379ec4ccd4ea2b7ba9def761a1c0e", "IPY_MODEL_1e03ec59ef9942b48fab13cbc804eca5" ], "layout": "IPY_MODEL_ada8d2e21ceb405abc956162d0e2e07d" } }, "420ca10158fb4d39a4f86cc826da5a27": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4667b2c75fc7413d9d775a3967fdd1ca": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_7a254a089917459e948b6e8867f83ffb", "IPY_MODEL_08a6329e26ab4969bcda1af3f2f60b05" ], "layout": "IPY_MODEL_1cfb05906dcf4130a7d2e34f0d554fb7" } }, "47a56faf84ab4db49ea97d88ba48d2d9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "4c6c18cfb80d498fbcf22c4164dc7ad5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4db404192a0744e089d79489917adfc6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "568b2a4f8f3f44dbb1c073a14fbdb5b2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "597997f23611481487e927085159de17": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "5a308e1ebe7c4a88880ee3c192f90d1d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ], "description": "k", "index": 0, "layout": "IPY_MODEL_ac9a84e9e0134d74b6a0f124adffef7b", "style": "IPY_MODEL_9f285df2bcb74935aa35690c67be6c64" } }, "6291c63a7d2449aea1c8733b601261e7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "6c03d77192aa4df0ba23d16286888174": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "6d879140ae8349ef84b4bad4f8871e98": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "71d8e837f0844c1c9367073ae3805365": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "76332a57de714e70a45279f04d581936": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], "description": "k", "index": 0, "layout": "IPY_MODEL_06ec111c07b04acb8673dfceb08a4353", "style": "IPY_MODEL_10332b88b9cc490bae0a53f32c5c2910" } }, "7a254a089917459e948b6e8867f83ffb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ], "description": "k", "index": 0, "layout": "IPY_MODEL_0e61e807bee544789407bba20aec965c", "style": "IPY_MODEL_b1ad3749d6414f199fc8b9e8f97d5351" } }, "81d551392cff4e0cb54ee1e059914e73": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_8b023f35ce874aaa9251026875c610a6", "IPY_MODEL_eb27f545d4d34c27949abdd656911d43" ], "layout": "IPY_MODEL_71d8e837f0844c1c9367073ae3805365" } }, "83a91488495a439188b61989e4fb501a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "8b023f35ce874aaa9251026875c610a6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ], "description": "k", "index": 0, "layout": "IPY_MODEL_4db404192a0744e089d79489917adfc6", "style": "IPY_MODEL_568b2a4f8f3f44dbb1c073a14fbdb5b2" } }, "8b6f8b3b5e134360ba90ae4cce58ca61": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "946a596ecb054e5ea4c9bbc3aae41fb5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "9a2323976d7b4af7a55ec552bb07afb0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "9f01c1c3e4794c8d9c558885f78391a7": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_1f8b05639093423282199a97b8a06195", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ [2] & \\color{red}{[3]} \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n \\color{red}{[3]} & [3] \\\\ \\color{red}{[3]} & [2] \\\\ \\color{red}{[1]} & [1] \\\\\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "9f0855c9e6c041579c2e5aacf66fe7ed": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_a590b040c4e245a4a3cc7f6f839d9fad", "IPY_MODEL_b371564e37c44a47a8855a775e88f2e6" ], "layout": "IPY_MODEL_8b6f8b3b5e134360ba90ae4cce58ca61" } }, "9f285df2bcb74935aa35690c67be6c64": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "a31d04ea7dd744d39152e4bb12a9ce89": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_5a308e1ebe7c4a88880ee3c192f90d1d", "IPY_MODEL_ca5fe9caddc54e2cad088d33220ac248" ], "layout": "IPY_MODEL_dda6b33b9d7f49a8b82eb6c2bcfc66a4" } }, "a4309e57fa444c41b05f96bc0f0ff9e0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "a590b040c4e245a4a3cc7f6f839d9fad": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6" ], "description": "k", "index": 0, "layout": "IPY_MODEL_9a2323976d7b4af7a55ec552bb07afb0", "style": "IPY_MODEL_0336cacaeb234087ace2d7ecddf04bf2" } }, "a8c8cb684cf146e6b7db7ff490ac59e8": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_0d4aa7f98341483e9ca7404ac950a8d2", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "aa41620e48124f4d81810dfcc6edb749": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ac9a84e9e0134d74b6a0f124adffef7b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ada8d2e21ceb405abc956162d0e2e07d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "b1ad3749d6414f199fc8b9e8f97d5351": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "b371564e37c44a47a8855a775e88f2e6": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_f74fda888a40404088922952523c1a19", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\n6 x^{5} + x^{4} + 5 x^{3} + 3 x^{2} + 3 x + 3\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\nx^{4} + 5 x^{3} + 4 x^{2} + 1\n\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\n6 x^{5} + x^{4} + 5 x^{3} + 3 x^{2} + 3 x + 3\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\nx^{4} + 5 x^{3} + 4 x^{2} + 1\n\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\n6 x^{5} + x^{4} + 5 x^{3} + 3 x^{2} + 3 x + 3\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (1) M_{0} } \\left(\\begin{array}{r}\nx^{5} + x^{2} + 4 x + 5 \\\\\nx^{4} + 5 x^{3} + 4 x^{2} + 1\n\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "b68e9944dec0444f86c03ba200cdb2bd": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "b8b8464f8d9d4ea59a3dcf54fa6c4e95": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ], "description": "k", "index": 0, "layout": "IPY_MODEL_f405bf799b144ad3970e071eeb37adf0", "style": "IPY_MODEL_6d879140ae8349ef84b4bad4f8871e98" } }, "ca5fe9caddc54e2cad088d33220ac248": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_aa41620e48124f4d81810dfcc6edb749", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n3 x^{5} + 3 x^{4} + 4 x^{3} + 2 x^{2} + 6 x + 2\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n6 x^{4} + 2 x^{3} + 4 x + 3\n\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n3 x^{5} + 3 x^{4} + 4 x^{3} + 2 x^{2} + 6 x + 2\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n6 x^{4} + 2 x^{3} + 4 x + 3\n\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n3 x^{5} + 3 x^{4} + 4 x^{3} + 2 x^{2} + 6 x + 2\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (6) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 4 x^{4} + 2 x^{3} + 2 x^{2} + 2 x + 6 \\\\\n6 x^{4} + 2 x^{3} + 4 x + 3\n\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "d953e9d0cd7b4541b787f69cf3f67386": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "dda6b33b9d7f49a8b82eb6c2bcfc66a4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "de6b752702f94c1eae55a7ece2a9d9d9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "e4211d91c65947cbacb5c472083a5469": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_3eb3be02a2ef43d2bbd8c097dd42fcac", "IPY_MODEL_ff6b498d9eb841d3a98294416d7b15d9" ], "layout": "IPY_MODEL_a4309e57fa444c41b05f96bc0f0ff9e0" } }, "e54ed13aa9d04d2cb4897a721607391e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ], "description": "k", "index": 0, "layout": "IPY_MODEL_420ca10158fb4d39a4f86cc826da5a27", "style": "IPY_MODEL_d953e9d0cd7b4541b787f69cf3f67386" } }, "eb27f545d4d34c27949abdd656911d43": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_296718552e3144ce96796419d2030d7f", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n6 x^{5} + 4 x^{4} + 2 x^{3} + 6 x^{2} + 6 x\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (5) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n4 x^{4} + 5 x^{3} + 4 x^{2} + 4\n\\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n6 x^{5} + 4 x^{4} + 2 x^{3} + 6 x^{2} + 6 x\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (5) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n4 x^{4} + 5 x^{3} + 4 x^{2} + 4\n\\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n6 x^{5} + 4 x^{4} + 2 x^{3} + 6 x^{2} + 6 x\n\\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (5) M_{0} } \\left(\\begin{array}{r}\n3 x^{5} + 2 x^{3} + x^{2} + 3 x + 5 \\\\\n4 x^{4} + 5 x^{3} + 4 x^{2} + 4\n\\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } }, "ec830c5dca224f37884791883f10bd1b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_f27372e446864cf5b78ab028b1017f48", "IPY_MODEL_a8c8cb684cf146e6b7db7ff490ac59e8" ], "layout": "IPY_MODEL_23d0f66d3aed4ad1a04ed230b94fbbc8" } }, "edeb765361ed41ee80ae9ac23d800b7a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "f27372e446864cf5b78ab028b1017f48": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" ], "description": "k", "index": 0, "layout": "IPY_MODEL_26613b518ed84bb18da2f9a8730bc29c", "style": "IPY_MODEL_edeb765361ed41ee80ae9ac23d800b7a" } }, "f405bf799b144ad3970e071eeb37adf0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "f74fda888a40404088922952523c1a19": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "fabf6eb2acb14ae2b77ac98f38a5a631": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "_dom_classes": [ "widget-interact" ], "children": [ "IPY_MODEL_76332a57de714e70a45279f04d581936", "IPY_MODEL_2dd58d2d65e14fbf8e9b0b931c681d5e" ], "layout": "IPY_MODEL_6291c63a7d2449aea1c8733b601261e7" } }, "ff6b498d9eb841d3a98294416d7b15d9": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_6c03d77192aa4df0ba23d16286888174", "outputs": [ { "data": { "text/html": "\\(\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)\\)", "text/latex": "$\\displaystyle \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)$", "text/plain": "\\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ [2] & \\color{red}{[3]} \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right) \\xrightarrow{ M_{1} \\leftarrow M_{1} - (3 x^{2}) M_{2} } \\left(\\begin{array}{rr}\n [3] & \\color{red}{[3]} \\\\ \\color{red}{[3]} & [2] \\\\ [1] & \\color{red}{[1]} \\\\ \\end{array}\\right)" }, "metadata": {}, "output_type": "display_data" } ] } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }