commit b36db2de4ea5fac39b58fe7ea1f2a44f83eb77e6 Author: Hearot Date: Fri Jul 14 17:15:55 2023 +0200 feat: aggiunge gli articoli dal vecchio sito di Poisson diff --git a/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.pdf b/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.pdf new file mode 100644 index 0000000..f83a6b2 Binary files /dev/null and b/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.pdf differ diff --git a/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.tex b/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.tex new file mode 100644 index 0000000..5191cf2 --- /dev/null +++ b/Algebra/Articoli/1. Anelli, ideali e quozienti/anelli_ideali_quozienti.tex @@ -0,0 +1,418 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[italian]{babel} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsopn} +\usepackage{mathtools} +\usepackage{marvosym} +\usepackage{xpatch} + +\usepackage[colorlinks=false,bookmarksopen=true]{hyperref} + +\usepackage{bookmark} + +\newcommand{\dual}[1]{#1^{*}} + +\title{Anelli, ideali e quozienti} +\author{Gabriel Antonio Videtta} +\date{\today} + +\DeclareMathOperator{\tr}{tr} +\DeclareMathOperator{\Ker}{Ker} +\DeclareMathOperator{\Imm}{Imm} + +\setlength\parindent{0pt} + +\let\oldforall\forall +\let\forall\undefined +\DeclareMathOperator{\forall}{\oldforall} + +\let\oldexists\exists +\let\exists\undefined +\DeclareMathOperator{\exists}{\oldexists} + +\let\oldnexists\nexists +\let\nexists\undefined +\DeclareMathOperator{\nexists}{\oldnexists} + +\let\oldland\land +\let\land\undefined +\DeclareMathOperator{\land}{\oldland} + +\let\oldlor\lor +\let\lor\undefined +\DeclareMathOperator{\lor}{\oldlor} + +\let\oldlnot\lnot +\let\lnot\undefined +\DeclareMathOperator{\lnot}{\oldlnot} + +\let\oldcirc\circ +\let\circ\undefined +\DeclareMathOperator{\circ}{\oldcirc} + +\DeclareMathOperator{\existsone}{\exists !} + +\let\oldemptyset\emptyset +\let\emptyset\varnothing + +\begin{document} + +\maketitle + +\newcommand{\nsg}{\mathrel{\unlhd}} + +\newcommand{\BB}{\mathcal{B}} +\newcommand{\CC}{\mathbb{C}} +\newcommand{\FF}{\mathbb{F}_2} +\newcommand{\HH}{\mathbb{H}} +\newcommand{\NN}{\mathbb{N}} +\newcommand{\ZZ}{\mathbb{Z}} +\newcommand{\QQ}{\mathbb{Q}} +\newcommand{\RR}{\mathbb{R}} +\newcommand{\KK}{\mathbb{K}} +\newcommand{\LL}[2]{\mathcal{L} \left(#1, \, #2\right)} + +\newcommand{\ii}{\mathbf{i}} +\newcommand{\jj}{\mathbf{j}} +\newcommand{\kk}{\mathbf{k}} + +\newcommand{\MM}[2]{\mathcal{M}_{#1 \times #2}\left(\KK\right)} +\newcommand{\M}[1]{\mathcal{M}_{#1}\left(\KK\right)} +\newcommand{\Mbb}[3]{\mathcal{M}^{#1}_{#2} \left( #3 \right)} +\newcommand{\Mb}[2]{\mathcal{M}^{#1}_{#2}} + +\theoremstyle{definition} +\newtheorem{definition}{Definizione}[section] + +\renewcommand{\vec}[1]{\underline{#1}} + +\newtheorem{example}{Esempio}[section] +\newtheorem{exercise}{Esercizio}[section] +\newtheorem{theorem}{Teorema}[section] +\newtheorem{proposition}{Proposizione}[section] +\newtheorem{corollary}{Corollario}[section] +\newtheorem*{note}{Osservazione} + +\tableofcontents + +\section{Anelli e prime proprietà} + +\begin{definition} + Si definisce \textbf{anello}\footnote{In realtà, si parla in questo caso di anello \textit{con unità}, in cui vale l'assioma di esistenza di un'identità + moltiplicativa. In questo documento si identificherà con "anello" solamente un anello con unità.} una struttura algebrica + costruita su un insieme $A$ e due operazioni binarie $+$ + e $\cdot$\footnote{D'ora in avanti il punto verrà omesso.} avente le seguenti proprietà: + + \begin{itemize} + \item $\left(A,\, +\right)$ è un \textit{gruppo abeliano}, alla cui + identità, detta \textit{identità additiva}, ci si riferisce con il simbolo $0$, + \item $\forall a, b, c \in A$, $(ab)c = a(bc)$, + \item $\forall a, b, c \in A$, $(a+b)c=ac+bc$, + \item $\forall a, b, c \in A$, $a(b+c)=ab+ac$, + \item $\exists 1 \in A \mid \forall a \in A$, $1a=a=a1$, e tale $1$ viene + detto \textit{identità moltiplicativa}. + \end{itemize} +\end{definition} + +Come accade per i gruppi, gli anelli soddisfano alcune proprietà algebriche +particolari, tra le quali si citano le più importanti: + +\begin{proposition} + $\forall a \in A$, $0a=0=a0$. +\end{proposition} + +\begin{proof} + $0a=(0+0)a=0a+0a \implies 0a=0$. Analogamente $a0=a(0+0)=a0+a0 \implies a0=0$. +\end{proof} + +\begin{proposition} + $\forall a \in A$, $-(-a)=a$. +\end{proposition} + +\begin{proof} + $-(-a)-a=0 \,\land\, a-a=0 \implies -(-a)=a$, per la proprietà di unicità + dell'inverso in un gruppo\footnote{In questo caso, il gruppo additivo dell'anello.}. +\end{proof} + +\begin{proposition} + \label{prop:inverso_inverso} + $a(-b)=(-a)b=-(ab)$. +\end{proposition} + +\begin{proof} + $a(-b)+ab=a(b-b)=a0=0 \implies a(-b)=-(ab)$, per la proprietà di unicità dell'inverso in un gruppo. Analogamente $(-a)b+ab=(a-a)b=0b=0 \implies + (-a)b=-(ab)$. +\end{proof} + +\begin{corollary} + $(-1)a=a(-1)=-a$. +\end{corollary} + +\begin{proposition} + $(-a)(-b)=ab$. +\end{proposition} + +\begin{proof} + $(-a)(-b)=-(a(-b))=-(-(ab))=ab$, per la \textit{Proposizione \ref{prop:inverso_inverso}}. +\end{proof} + +Si enuncia invece adesso la nozione di \textbf{sottoanello}, in tutto e per +tutto analoga a quella di \textit{sottogruppo}. + +\begin{definition} + Si definisce sottoanello rispetto all'anello $A$ un anello $B$ avente le + seguenti proprietà: + + \begin{itemize} + \item $B \subseteq A$, + \item $0, 1 \in B$, + \item $\forall a, b \in B,$ $a + b \in B \,\land\, ab \in B$. + \end{itemize} +\end{definition} + +\begin{definition} + Un sottoanello $B$ rispetto ad $A$ si dice \textbf{proprio} se + $B \neq A$. +\end{definition} + +\begin{definition} + Un anello si dice \textbf{commutativo} se $\forall a$, $b \in A$, $ab=ba$. +\end{definition} + +\begin{example} + Un facile esempio di anello commutativo è $\ZZ/n\ZZ$. +\end{example} + +\begin{definition} + Un elemento $a$ di un anello $A$ si dice \textbf{invertibile} se + $\exists b \in A \mid ab = ba = 1$. +\end{definition} + +\begin{definition} + Dato un anello $A$, si definisce $A^*$ come l'insieme degli elementi + invertibili di $A$, che a sua volta forma un \textit{gruppo moltiplicativo}. +\end{definition} + +\begin{definition} + Un anello $A$ si dice \textbf{corpo} se $\forall a \neq 0 \in A$, $\exists b \in A \mid ab=ba=1$, + ossia se $A \setminus \{0\} = A^*$. +\end{definition} + +\begin{example} + L'esempio più rilevante di corpo è quello dei \textit{quaternioni} $\HH$, definiti + nel seguente modo: + + \[\HH = \{a+b\ii+c\jj+d\kk \mid a,\, b,\, c,\, d \in \RR\},\] + + dove: + + \[\ii^2 = \jj^2 = \kk^2 = -1, \quad \ii\jj = \kk,\, \jj\kk = \ii,\, \kk\ii = \jj. \] + + Infatti ogni elemento non nullo di $\HH$ possiede un inverso moltiplicativo: + + \[\left(a+b\ii+c\jj+d\kk\right)^{-1} = \frac{a-b\ii-c\jj-d\kk}{a^2+b^2+c^2+d^2},\] + + mentre la moltiplicazione non è commutativa. + +\end{example} + +\begin{definition} + Un anello commutativo che è anche un corpo si dice \textbf{campo}. +\end{definition} + +\begin{example} + Alcuni campi, tra i più importanti, sono $\QQ$, $\RR$, $\CC$ e $\ZZ/p\ZZ$ con + $p$ primo. +\end{example} + +\begin{definition} + Un elemento $a \neq 0$ appartenente a un anello $A$ si dice \textbf{divisore di zero} se + $\exists b \neq 0 \in A \mid ab = 0$ o $ba = 0$. +\end{definition} + +\begin{example} + $2$ è un divisore di zero in $\ZZ/6\ZZ$, infatti $2 \cdot 3 \equiv 0 \pmod 6.$ +\end{example} + +\begin{definition} + Un anello commutativo in cui non sono presenti divisori di zero si dice \textbf{dominio d'integrità}, + o più semplicemente \textit{dominio}. +\end{definition} + +\begin{proposition}[\textit{Legge di annullamento del prodotto}] + Sia $D$ un dominio. Allora $ab=0 \implies a=0 \,\lor\, b=0$. +\end{proposition} + +\begin{proof} + Siano $a$, $b \in D \mid ab = 0$. Se $a=0$, la condizione è soddisfatta. + Se invece $a \neq 0$, $b$ deve essere per forza nullo, altrimenti si + sarebbe trovato un divisore di $0$, e $D$ non sarebbe un dominio, \Lightning. +\end{proof} + +\begin{example} + L'anello dei polinomi su un campo, $\KK[x]$, è un dominio. +\end{example} + +\section{Omomorfismi di anelli e ideali} + +\begin{definition} + Un \textbf{omomorfismo di anelli}\footnote{La specificazione "di anelli" è d'ora in avanti omessa.} è una mappa $\phi : A \to B$ -- con + $A$ e $B$ anelli -- soddisfacente alcune particolari proprietà: + + \begin{itemize} + \item $\phi$ è un \textit{omomorfismo di gruppi} rispetto all'addizione + di $A$ e di $B$, ossia $\forall a, b \in A, \, \phi(a+b)=\phi(a)+\phi(b)$, + \item $\phi(ab)=\phi(a)\phi(b)$, + \item $\phi(1_A)=1_B$. + \end{itemize} +\end{definition} + +\begin{definition} + Se $\phi : A \to B$ è un omomorfismo iniettivo, si dice che + $\phi$ è un \textbf{monomorfismo}. +\end{definition} + +\begin{definition} + Se $\phi : A \to B$ è un omomorfismo suriettivo, si dice che + $\phi$ è un \textbf{epimorfismo}. +\end{definition} + +\begin{definition} + Se $\phi : A \to B$ è un omomorfismo bigettivo\footnote{Ovvero se è sia un monomorfismo che un epimorfismo.}, si dice che + $\phi$ è un \textbf{isomorfismo}. +\end{definition} + +Prima di enunciare l'analogo del \textit{Primo teorema d'isomorfismo} dei gruppi +in relazione agli anelli, si rifletta su un esempio di omomorfismo: + +\begin{example} + Sia $\phi : \ZZ \to \ZZ, k \mapsto 2k$ un omomorfismo. Esso è un monomorfismo, + infatti $\phi(x)=\phi(y) \implies 2x=2y \implies x=y$. Pertanto $\Ker \phi = \{0\}$. Sebbene $\Ker \phi < \ZZ$, esso \textbf{non è un sottoanello}\footnote{Infatti $1 \notin \Ker \phi$.}. +\end{example} + +Dunque, con lo scopo di definire meglio le proprietà di un \textit{kernel}, +così come si introdotto il concetto di \textit{sottogruppo normale} per i gruppi, si introduce ora il concetto di \textbf{ideale}. + +\begin{definition} + Si definisce ideale rispetto all'anello $A$ un insieme $I$ avente le seguenti proprietà: + + \begin{itemize} + \item $I \leq A$, + \item $\forall a \in A$, $\forall b \in I$, $ab \in I$ e $ba \in I$. + \end{itemize} +\end{definition} + +\begin{example} + \label{exmpl:polinomi} + Sia $I$ l'insieme dei polinomi di $\RR[x]$ tali che $2$ ne sia radice. Esso + altro non è che un ideale, infatti $0 \in I \,\land\, \forall f(x), g(x) \in I, (f+g)(2)=0$ (i.e. $I<\RR[x]$) e $\forall f(x) \in A, \, g(x) \in I, \, (fg)(2) = 0$. +\end{example} + +\begin{proposition} + Sia $I$ un ideale di $A$. $1 \in I \implies I = A$. +\end{proposition} + +\begin{proof} + Per le proprietà dell'ideale $I$, $\forall a \in A$, $a1 = a \in I \implies + A \subseteq I$. Dal momento che anche $I \subseteq A$, si deduce che $I = A$. +\end{proof} + +\begin{proposition} + Sia $\phi : A \to B$ un omomorfismo. $\Ker \phi$ è allora un ideale di $A$. +\end{proposition} + +\begin{proof} + Poiché $\phi$ è anche un omomorfismo tra gruppi, si deduce che $\Ker \phi \leq A$. + Inoltre $\forall a \in A$, $\forall b \in \Ker \phi$, $\phi(ab)=\phi(a)\phi(b)=\phi(a)0=0 \implies ab \in I$. +\end{proof} + +\begin{proposition} + Sia $\phi : A \to B$ un omomorfismo. $\Imm \phi$ è allora un sottoanello di $B$. +\end{proposition} + +\begin{proof} + Chiaramente $0, 1 \in \Imm \phi$, dal momento che $\phi(0) = 0,\, \phi(1)=1$. Inoltre, dalla teoria dei gruppi, si ricorda anche che $\Imm \phi \leq B$. + Infine, $\forall \phi(a),\, \phi(b) \in \Imm \phi, \, \phi(a)\phi(b) = \phi(ab) \in \Imm \phi$. +\end{proof} + +\begin{definition} + Si definisce con la notazione $(a)$ l'ideale \textit{bilatero} generato da $a$ in $A$, ossia: + + \[(a)=\{ba \mid b \in A\} \cup \{ab \mid b \in A\}.\] +\end{definition} + +\begin{definition} + Si dice che un ideale $I$ è \textit{principale} o \textbf{monogenerato}, quando $\exists a \in I \mid I = (a)$. +\end{definition} + +\begin{example} + In relazione all'\textit{Esempio \ref{exmpl:polinomi}}, l'ideale $I$ è + monogenerato\footnote{Non è un caso: $\RR[x]$, in quanto anello euclideo, si dimostra essere un PID (\textit{principal ideal domain}), ossia un dominio che ammette \textit{solo} ideali monogenerati.}. In particolare, $I=(x-2)$. +\end{example} + +\section{Anelli quoziente e teorema d'isomorfismo} + +Si definisce invece adesso il concetto di \textbf{anello quoziente}, in modo +completamente analogo a quello di \textit{gruppo quoziente}: + +\begin{definition} + Sia $A$ un anello e $I$ un suo ideale, si definisce $A/I$ l'anello ottenuto + quozientando $A$ per $I$. Gli elementi di tale anello sono le classi di equivalenza di $\sim$ (i.e. gli elementi di $A/{\sim}$), dove $\forall a$, $b \in A$, $a\sim b \iff a-b \in I$. Tali classi di equivalenza vengono indicate come + $a + I$, dove $a$ è un rappresentante della classe. L'anello è così dotato di due operazioni: + + \begin{itemize} + \item $\forall a$, $b \in A$, $(a+I)+(b+I)=(a+b)+I$, + \item $\forall a$, $b \in A$, $(a+I)(b+I)=ab+I$. + \end{itemize} +\end{definition} + +\begin{note} + L'addizione di $A/I$ è ben definita, dal momento che $I \nsg A$, in quanto sottogruppo di un gruppo abeliano. +\end{note} + +\begin{note} + Anche la moltiplicazione di $A/I$ è ben definita. Siano $a\sim a'$, $b \sim b'$ quattro elementi di $A$ tali che $a = a' + i_1$ e $b = b' + i_2$ con $i_1$, $i_2 \in I$. Allora $ab=(a'+i_1)(b'+i_2)=a'b' + \underbrace{i_1b' + i_2a' + i_1i_2}_{\in I} \implies ab \sim a'b'$. +\end{note} + +\begin{proposition} + \label{prop:quoziente_pieno} + $A/\{0\} \cong A$. +\end{proposition} + +\begin{proof} + Sia $\pi : A \to A/\{0\}$, $a \mapsto a + \{0\}$ l'omomorfismo di proiezione + al quoziente. Innanzitutto, $a \sim a' \iff a-a'=0 \iff a=a'$, per cui $\pi$ è + un monomorfismo (altrimenti si troverebbero due $a$, $b \mid a \neq b \,\land\, a \sim b$). Infine, $\pi$ è un epimorfismo, dal momento che $\forall a + \{0\} \in A/\{0\}, \, \pi(a) = a + \{0\}$. Pertanto $\pi$ è un isomorfismo. +\end{proof} + +Adesso è possibile enunciare il seguente fondamentale teorema: + +\begin{theorem}[\textit{Primo teorema d'isomorfismo}] + \label{th:primo_isomorfismo} + Sia $\phi : A \to B$ un omomorfismo. $A/\Ker \phi \cong \Imm \phi$. +\end{theorem} + +\begin{proof} + La dimostrazione procede in modo analogo a quanto visto per il teorema correlato + in teoria dei gruppi. \\ + + Sia $\zeta : A/\Ker \phi \to \Imm \phi$, $a + \Ker \phi \mapsto \phi(a)$. + Si verifica che $\zeta$ è un omomorfismo: essendolo già per i + gruppi, è sufficiente verificare che $\zeta((a+I)(b+I))=\zeta(ab+I)=\phi(ab)=\phi(a)\phi(b)=\zeta(a+I)\zeta(b+I)$. \\ + + $\zeta$ è chiaramente anche un epimorfismo, dal momento che $\forall \phi(a) \in \Imm \phi$, $\zeta(a + \Ker \phi) = \phi(a)$. Inoltre, dal momento che $\zeta(a + \Ker \phi) = 0 \iff \phi(a) = 0 \iff a + \Ker \phi = \Ker \phi$, ossia l'identità di $A/\Ker \phi$, si deduce anche che $\zeta$ è un monomorfismo. Pertanto $\zeta$ è un isomorfismo. +\end{proof} + +\begin{corollary} + Sia $\phi : A \to B$ un monomorfismo. $A \cong \Imm \phi$. +\end{corollary} + +\begin{proof} + Poiché $\phi$ è un monomorfismo, $\Ker \phi = \{0\}$. Allora, per il \textit{Primo teorema di isomorfismo}, $A/\{0\} \cong \Imm \phi$. Dalla + \textit{Proposizione \ref{prop:quoziente_pieno}}, si desume che $A \cong A/\{0\}$. Allora, per la proprietà transitiva degli isomorfismi, $A \cong \Imm \phi$. +\end{proof} + +\end{document} diff --git a/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.pdf b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.pdf new file mode 100644 index 0000000..7961b4e Binary files /dev/null and b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.pdf differ diff --git a/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.tex b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.tex new file mode 100644 index 0000000..69e288e --- /dev/null +++ b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/anelli_euclidei_pid_ufd.tex @@ -0,0 +1,830 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[italian]{babel} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsopn} +\usepackage{bm} +\usepackage{mathtools} +\usepackage{marvosym} +\usepackage{tikz} +\usepackage{wrapfig} +\usepackage{xpatch} + +\usepackage{algorithm2e} + +\usepackage{csquotes} +\usepackage{biblatex} + +\addbibresource{bibliography.bib} + +\usepackage[colorlinks=false,bookmarksopen=true]{hyperref} + +\usepackage{bookmark} + +\newcommand{\dual}[1]{#1^{*}} + +\title{Anelli euclidei, PID e UFD} +\author{Gabriel Antonio Videtta} +\date{\today} + +\DeclareMathOperator{\tr}{tr} +\DeclareMathOperator{\Ker}{Ker} +\DeclareMathOperator{\MCD}{MCD} +\DeclareMathOperator{\Imm}{Imm} + +\setlength\parindent{0pt} + +\let\oldforall\forall +\let\forall\undefined +\DeclareMathOperator{\forall}{\oldforall} + +\let\oldexists\exists +\let\exists\undefined +\DeclareMathOperator{\exists}{\oldexists} + +\let\oldnexists\nexists +\let\nexists\undefined +\DeclareMathOperator{\nexists}{\oldnexists} + +\let\oldland\land +\let\land\undefined +\DeclareMathOperator{\land}{\oldland} + +\let\oldlor\lor +\let\lor\undefined +\DeclareMathOperator{\lor}{\oldlor} + +\let\oldlnot\lnot +\let\lnot\undefined +\DeclareMathOperator{\lnot}{\oldlnot} + +\let\oldcirc\circ +\let\circ\undefined +\DeclareMathOperator{\circ}{\oldcirc} + +\DeclareMathOperator{\existsone}{\exists !} + +\let\oldemptyset\emptyset +\let\emptyset\varnothing + +\begin{document} + +\maketitle + +\newcommand{\nsg}{\mathrel{\unlhd}} + +\newcommand{\BB}{\mathcal{B}} +\newcommand{\FF}{\mathbb{F}_2} +\newcommand{\NN}{\mathbb{N}} +\newcommand{\ZZ}{\mathbb{Z}} +\newcommand{\RR}{\mathbb{R}} +\newcommand{\KK}{\mathbb{K}} +\newcommand{\LL}[2]{\mathcal{L} \left(#1, \, #2\right)} + +\newcommand{\MM}[2]{\mathcal{M}_{#1 \times #2}\left(\KK\right)} +\newcommand{\M}[1]{\mathcal{M}_{#1}\left(\KK\right)} +\newcommand{\Mbb}[3]{\mathcal{M}^{#1}_{#2} \left( #3 \right)} +\newcommand{\Mb}[2]{\mathcal{M}^{#1}_{#2}} + +\theoremstyle{definition} +\newtheorem{definition}{Definizione}[section] + +\renewcommand{\vec}[1]{\underline{#1}} + +\newtheorem{example}{Esempio}[section] +\newtheorem{exercise}{Esercizio}[section] +\newtheorem{lemma}{Lemma}[section] +\newtheorem{theorem}{Teorema}[section] +\newtheorem{proposition}{Proposizione}[section] +\newtheorem{corollary}{Corollario}[section] +\newtheorem*{note}{Osservazione} + +\tableofcontents + +\section{Anelli euclidei e prime proprietà} + +Nel corso della storia della matematica, numerosi studiosi hanno tentato +di generalizzare -- o meglio, accomunare a più strutture algebriche -- il +concetto di divisione euclidea che era stato formulato per l'anello +dei numeri interi $\ZZ$ e, successivamente, per l'anello dei polinomi +$\KK[x]$. Lo sforzo di questi studiosi ad oggi è converso in un'unica +definizione, quella di anello euclideo, di seguito presentata. + +\begin{definition} + Un \textbf{anello euclideo} è un dominio d'integrità $D$\footnote{Difatti, nella + letteratura inglese, si parla di \textit{Euclidean domain} piuttosto che di + anello.} sul quale è + definita una funzione $g$ detta \textbf{funzione grado} o \textit{norma} + soddisfacente le seguenti proprietà: + + \begin{itemize} + \item $g : D \setminus \{0\} \to \NN$, + \item $\forall a$, $b \in D \setminus \{0\}$, $g(a) \leq g(ab)$, + \item $\forall a \in D$, $b \in D \setminus \{0\}$, $\exists q$, $r \in D \mid + a=bq+r$ e $r=0 \,\lor\, g(r)0$} + { + $m \gets d$\; + $d \gets e \bmod d$\; + $e \gets m$\; + } +\end{algorithm} + +dove $e$ è l'MCD ricercato e l'operazione $\mathrm{mod}$ restituisce un resto della +divisione euclidea\footnote{Ossia $a \bmod b$ restituisce un $r$ tale che $\exists q + \mid a = bq+r$ con $r=0$ o $g(r)] (0, 0) -- (0.5, 0.5) node[align=center, below=3pt]{$b$}; + \draw[line width=0.7pt, ->] (0, 0) -- (-0.5, 0.5) node[align=center, below=2pt]{$ib$}; + + \draw[line width=0.5pt, ->] (0, 0) -- (0.5, 2.5) node[above=0.5pt]{$bq$}; + + \draw[line width=0.5pt, ->] (0, 0) -- (1, 2.5) node[below, right]{$a$}; + + \draw[densely dotted] (0.5, 2.5) -- (1, 2.5) node[below=4pt, left=2.5pt]{$r$}; + + \draw[line width=0.2pt, ->] (0, -1) -- (0, 3); + \draw[line width=0.2pt, ->] (-3, 0) -- (3, 0); + + \end{scope} + \end{tikzpicture} + \caption{Visualizzazione della divisione euclidea nel piano degli interi di Gauss.} + \label{fig:z_i} +\end{wrapfigure} + +La funzione grado coincide in particolare con il quadrato del modulo di un numero complesso, ossia: +\[g(z) : \ZZ[i] \setminus \{0\} \to \NN, \, a+bi \mapsto \left| a+bi \right|^2.\] + +Il vantaggio di quest'ultima definizione è l'enfasi sul collegamento tra la funzione grado +di $\ZZ$ e quella di $\ZZ[i].$ Infatti, se $a \in \ZZ$, il grado di $a$ in $\ZZ$ e in $\ZZ[i]$ +sono uno il quadrato dell'altro. In particolare, è possibile ridefinire il grado +di $\ZZ$ proprio in modo tale da farlo coincidere con quello di $\ZZ[i]$. \\ + +\newpage + +\begin{theorem} + $\ZZ[i]$ è un anello euclideo. +\end{theorem} + +\begin{proof} + Si verifica la prima proprietà della funzione grado. Siano $a$, $b \in \ZZ[i] \setminus \{0\}$, + allora $\left|a\right| \geq 1 \,\land\, \left|b\right| \geq 1$. Poiché + $\left|ab\right| = \left|a\right|\left|b\right|$\footnote{Questa interessante proprietà del modulo è alla base dell'identità di Brahmagupta-Fibonacci: $(a^2 + b^2)(c^2 + d^2) = (ac-bd)^2 + (ad+bc)^2.$}, si verifica facilmente che + $\left|ab\right| \geq \left|a\right|$, ossia che $g(ab) \geq g(a)$. \\ + + Si verifica infine che esiste una divisione euclidea, ossia che + $\forall a \in \ZZ[i]$, $\forall b \in \ZZ[i] \setminus \{0\}$, $\exists q$, $r \in \ZZ[i] \mid a = bq + r$ e $r=0 \,\lor\, g(r) < g(b)$. + Come si visualizza facilmente nella \textit{Figura \ref{fig:z_i}}, + tutti i multipli di $b$ formano un piano con basi $b$ e $ib$, dove + sicuramente esiste un certo $q$ tale che la distanza $\left|r\right| = \left|a-bq\right|$ sia minima. \\ + + Se $a$ è un multiplo di $b$, vale sicuramente che $a = bq$. Altrimenti dal momento che $r$ è sicuramente inquadrato in uno dei tasselli del piano, vale + sicuramente la seguente disuguaglianza, che lega il modulo di $r$ alla diagonale di + ogni quadrato: + + \[\left|r\right| \leq \frac{\left|b\right|}{\sqrt{2}}.\] + + Pertanto vale la seconda e ultima proprietà della funzione grado: + + \[\left|r\right| \leq \frac{\left|b\right|}{\sqrt{2}} < \left|b\right| \implies \left|r\right|^2 < \left|b\right|^2 \implies g(r) < g(b).\] +\end{proof} + +\subsection{Gli interi di Eisenstein: $\ZZ[\omega]$} + +Sulla scia di $\ZZ[i]$ è possibile definire anche l'anello degli +interi di Eisenstein, aggiungendo a $\ZZ$ la prima radice cubica +primitiva dell'unità in senso antiorario, ossia: + +\[\omega = e^{\frac{2\pi i}{3}} = -\frac{1}{2} + \frac{\sqrt{3}}{2}i.\] + +In particolare, $\omega$ è una delle due radici dell'equazione +$z^2 + z + 1 = 0$, dove invece l'altra radice altro non è che +$\omega^2 = \overline{\omega}$. + +\begin{wrapfigure}{l}{0pt} + \begin{tikzpicture} + \begin{scope} + \clip (-2, -0.5) rectangle (3, 3); + \draw[step=0.25cm, gray!20!white, very thin] (-7, -3) grid (7, 3); + + \foreach \x in {-4,...,4} { + \draw[ultra thin, loosely dashdotted] (-3 + 0.87*\x, -3) -- (3 + 0.87*\x, 3); + } + + \foreach \y in {-4,...,5} { + \draw[ultra thin, loosely dashdotted] (-7, 1.8756443470179 + 0.65*\y) -- (7, -1.8756443470179 + 0.65*\y); + } + + \foreach \x in {-4,...,5} { + \draw[ultra thin, loosely dashed] (-7 + 0.6289*\x, 28.5025773880714) -- (7+ 0.65*\x, -28.5025773880714); + } + + \draw[line width=0.7pt, ->] (0, 0) -- (0.5, 0.5) node[align=center, below=3pt]{$b$}; + \draw[line width=0.7pt, ->] (0, 0) -- (-0.6830127018922, 0.1830127018922) node[align=center, below=2pt]{$\omega b$}; + + \draw[line width=0.5pt, ->] (0, 0) -- (0.71494, 2.41094) node[below=2pt, left=4pt]{$bq$}; + + \draw[line width=0.5pt, ->] (0, 0) -- (1.1, 2.7) node[below, right]{$a$}; + + \draw[densely dotted] (0.71494, 2.41094) -- (1.1, 2.7) node[above=3pt, left=2.5pt]{$r$}; + + \draw[line width=0.2pt, ->] (0, -1) -- (0, 3); + \draw[line width=0.2pt, ->] (-3, 0) -- (3, 0); + + \end{scope} + \end{tikzpicture} + \caption{Visualizzazione della divisione euclidea nel piano degli interi di Eisenstein.} + \label{fig:z_omega} +\end{wrapfigure} + +\vskip 0.1in + +La funzione grado in $\ZZ[\omega]$ deriva da quella di $\ZZ[i]$ e coincide ancora +con il quadrato del modulo del numero complesso. Si definisce quindi: + +\[g : \ZZ[\omega] \setminus \{0\}, \, a+b\omega \mapsto \left|a+b\omega\right|^2.\] + +Sviluppando il modulo è possibile ottenere una formula più concreta: + +\[ \left|a+b\omega\right|^2 = \left|\left(a-\frac{b}{2}\right) + \frac{b\sqrt{3}}{2}i\right|^2 =\] \\ + +\[= \left(a-\frac{b}{2}\right)^2 + \frac{3b^2}{4} = a^2 - ab + b^2.\] \\ + +\begin{theorem} + $\ZZ[\omega]$ è un anello euclideo. +\end{theorem} + +\begin{proof} + Sulla scia della dimostrazione presentata per $\ZZ[i]$, si verifica facilmente + la prima proprietà della funzione grado. Siano $a$, $b \in \ZZ[\omega]$, allora + $\left|a\right| \geq 1$ e $\left|b\right| \geq 1$. Poiché dalle proprietà + dei numeri complessi vale ancora $\left|a\right| \left|b\right| \geq \left|a\right|$, + la proprietà $g(ab) \geq g(a)$ è già verificata. \\ + + Si verifica infine la seconda e ultima proprietà della funzione grado. Come per + $\ZZ[i]$, i multipli di $b \in \ZZ[\omega]$ sono visualizzati su un piano che + ha per basi $b$ e $\omega b$ (come in $\textit{Figura \ref{fig:z_omega}}$), pertanto + esiste sicuramente un $q$ tale che la distanza $\left|a-bq\right|$ sia minima. \\ + + Se $a$ è multiplo di $b$, allora chiaramente $a = bq$. Altrimenti, $a$ è certamente + inquadrato in uno dei triangoli del piano, per cui vale la seguente disuguaglianza: + + \[\left|r\right| \leq \frac{\sqrt{3}}{2} \left|b\right|.\] + + Dunque la tesi è verificata: + + \[\left|r\right| \leq \frac{\sqrt{3}}{2} \left|b\right| < \left|b\right| \implies \left|r\right|^2 < \left|b\right|^2 \implies g(r) < g(b). \] +\end{proof} + +\section{Riferimenti bibliografici} + +\printbibliography[heading=none] + +\end{document} diff --git a/Algebra/Articoli/2. Anelli euclidei, PID e UFD/bibliography.bib b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/bibliography.bib new file mode 100644 index 0000000..1bf709f --- /dev/null +++ b/Algebra/Articoli/2. Anelli euclidei, PID e UFD/bibliography.bib @@ -0,0 +1,20 @@ +@book{di2013algebra, + title={Algebra}, + author={Di Martino, P. and Dvornicich, R.}, + isbn={9788867410958}, + series={Didattica e Ricerca. Manuali}, + year={2013}, + publisher={Pisa University Press} +}, +@article{10.2307/2315810, + ISSN = {00029890, 19300972}, + URL = {http://www.jstor.org/stable/2315810}, + author = {M. A. Jodeit}, + journal = {The American Mathematical Monthly}, + number = {7}, + pages = {835--836}, + publisher = {Mathematical Association of America}, + title = {Uniqueness in the Division Algorithm}, + volume = {74}, + year = {1967} +} diff --git a/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.pdf b/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.pdf new file mode 100644 index 0000000..b8724d4 Binary files /dev/null and b/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.pdf differ diff --git a/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.tex b/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.tex new file mode 100644 index 0000000..8d1de44 --- /dev/null +++ b/Algebra/Articoli/3. Proprietà fondamentali di Z[i], di Z_p[x], di Z[x] e di Q[x]/proprietà_fondamentali_zi_zx_zpx_qx.tex @@ -0,0 +1,709 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[italian]{babel} +\usepackage{algorithm2e} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsopn} +\usepackage{bm} +\usepackage{csquotes} +\usepackage{enumerate} +\usepackage{mathtools} +\usepackage{marvosym} +\usepackage{tikz} +\usepackage{wrapfig} +\usepackage{xpatch} + +\usepackage[colorlinks=false,bookmarksopen=true]{hyperref} +\usepackage{bookmark} + +\newcommand{\norm}[1]{\left|#1\right|} + +\newcommand{\zeroset}{\{0\}} +\newcommand{\setminuszero}{\setminus \{0\}} + +\newcommand{\BB}{\mathcal{B}} +\newcommand{\CC}{\mathbb{C}} +\newcommand{\FF}{\mathbb{F}_2} +\newcommand{\HH}{\mathbb{H}} +\newcommand{\KK}{\mathbb{K}} +\newcommand{\NN}{\mathbb{N}} +\newcommand{\QQ}{\mathbb{Q}} +\newcommand{\RR}{\mathbb{R}} +\newcommand{\ZZ}{\mathbb{Z}} +\newcommand{\ZZp}{\mathbb{Z}_p} + +\newcommand{\CCx}{\mathbb{C}[x]} +\newcommand{\QQx}{\mathbb{Q}[x]} +\newcommand{\RRx}{\mathbb{R}[x]} +\newcommand{\ZZi}{\mathbb{Z}[i]} +\newcommand{\ZZom}{\mathbb{Z}[\omega]} +\newcommand{\ZZpx}{\mathbb{Z}_p[x]} +\newcommand{\ZZx}{\mathbb{Z}[x]} + +\newcommand{\dual}[1]{#1^{*}} +\newcommand{\LL}[2]{\mathcal{L} \left(#1, \, #2\right)} +\newcommand{\M}[1]{\mathcal{M}_{#1}\left(\KK\right)} +\newcommand{\nsg}{\mathrel{\unlhd}} +\renewcommand{\vec}[1]{\underline{#1}} + +\newcommand{\hatpi}{\hat{\pi}} +\newcommand{\hatpip}{\hat{\pi}_p} + +\theoremstyle{definition} + +\newtheorem{corollary}{Corollario}[section] +\newtheorem{definition}{Definizione}[section] +\newtheorem{example}{Esempio}[section] +\newtheorem{exercise}{Esercizio}[section] +\newtheorem{lemma}{Lemma}[section] +\newtheorem*{note}{Osservazione} +\newtheorem{proposition}{Proposizione}[section] +\newtheorem{theorem}{Teorema}[section] + +\DeclareMathOperator{\existsone}{\exists !} +\DeclareMathOperator{\Imm}{Imm} +\DeclareMathOperator{\Ker}{Ker} +\DeclareMathOperator{\MCD}{MCD} +\DeclareMathOperator{\mcm}{mcm} +\DeclareMathOperator{\tr}{tr} + +\let\oldemptyset\emptyset +\let\emptyset\varnothing + +\let\oldcirc\circ +\let\circ\undefined +\DeclareMathOperator{\circ}{\oldcirc} + +\let\oldexists\exists +\let\exists\undefined +\DeclareMathOperator{\exists}{\oldexists} + +\let\oldforall\forall +\let\forall\undefined +\DeclareMathOperator{\forall}{\oldforall} + +\let\oldnexists\nexists +\let\nexists\undefined +\DeclareMathOperator{\nexists}{\oldnexists} + +\let\oldland\land +\let\land\undefined +\DeclareMathOperator{\land}{\oldland} + +\let\oldlnot\lnot +\let\lnot\undefined +\DeclareMathOperator{\lnot}{\oldlnot} + +\let\oldlor\lor +\let\lor\undefined +\DeclareMathOperator{\lor}{\oldlor} + +\setlength\parindent{0pt} + +\title{Proprietà fondamentali di $\ZZi$, \\ $\ZZx$, $\ZZpx$ e $\QQx$} +\author{Gabriel Antonio Videtta} +\date{\today} + +\begin{document} + +\maketitle + +\tableofcontents + +\section{Irriducibili e corollari di aritmetica in $\ZZi$} + +Come già dimostrato, $\ZZi$ è un anello euclideo con la seguente +funzione grado: + +\[ g : \ZZi \setminuszero \to \ZZ,\, a+bi \mapsto \norm{a+bi}^2.\] + +A partire da questo preconcetto è possibile dimostrare un teorema +importante in aritmetica, il \nameref{th:teorema_natale}, +che discende direttamente come corollario di un teorema più +generale riguardante $\ZZi$. + +\subsection{Il teorema di Natale di Fermat e gli irriducibili in $\ZZi$} + +\begin{lemma} + \label{lem:riducibile_due_quadrati} + Sia $p$ un numero primo riducibile in $\ZZi$, allora $p$ + può essere scritto come somma di due quadrati in $\ZZ$. +\end{lemma} + +\begin{proof} + Se $p$ è riducibile in $\ZZi$, allora esistono $a+bi$ e + $c+di$ appartenenti a $\ZZi \setminus \ZZi^*$ tali che $p=(a+bi)(c+di)$. \\ + + Impiegando le proprietà dell'operazione di coniugio si + ottiene la seguente equazione: + + \[ \overline{p}=p=(a-bi)(c-di) \implies p^2=p \overline{p} = (a^2+b^2)(c^2+d^2). \] + + Dal momento che $a+bi$ e $c+di$ non sono invertibili, + i valori della funzione grado calcolati in essi sono strettamente + maggiori del valore assunto nell'unità, ovverosia: + + \[ a^2+b^2>1, \qquad c^2+d^2>1. \] + + Allora devono per forza valere le seguenti equazioni: + + \[ p=a^2+b^2, \qquad p=c^2+d^2, \] + + da cui la tesi. +\end{proof} + +\begin{lemma} + \label{lem:quadrato_mod_4} + Sia $p$ un numero primo tale che $p \equiv 1 \pmod4$. Allora + esiste un $x \in \ZZ$ tale che $p \mid x^2+1$. +\end{lemma} + +\begin{proof} + Per il \textit{Teorema di Wilson}, $(p-1)! \equiv -1 \pmod p$. + Attraverso varie manipolazioni algebriche si ottiene: + + \[-1 \equiv 1 \cdots \frac{p-1}{2} \cdot \frac{p+1}{2} \cdots (p-1) \equiv 1 \cdots \frac{p-1}{2} \left(-\frac{p-1}{2}\right) \cdots (-1) \equiv\] + + \[ \equiv (-1)^{\frac{p-1}{2}} \left(\left( \frac{p-1}{2} \right)!\right)^2 \equiv + \left(\left( \frac{p-1}{2} \right)!\right)^2 \pmod p, + \] + + \vskip 0.1in + + da cui con $x = \left( \frac{p-1}{2} \right)!$ si verifica la + tesi. +\end{proof} + +\begin{theorem} + \label{th:primo_1_mod_4_riducibile} + Sia $p$ un numero primo tale che $p \equiv 1 \pmod4$. Allora + $p$ è riducibile in $\ZZi$. +\end{theorem} + +\begin{proof} + Per il \textit{Lemma \ref{lem:quadrato_mod_4}}, si ha che esiste + un $x \in \ZZ$ tale che $p \mid x^2+1$. Se $p$ fosse irriducibile, + dacché $\ZZi$ è un PID in quanto euclideo, $p$ sarebbe anche un + primo di $\ZZi$. Dal momento che $x^2+1=(x+i)(x-i)$, $p$ dovrebbe + dividere almeno uno di questi due fattori. \\ + + Senza perdità di generalità, si ponga che $p \mid (x+i)$. Allora + $\exists a+bi \in \ZZi \mid x+i=(a+bi)p$. Uguagliando le parti + immaginarie si ottiene $bp=1$, che non ammette soluzioni, \Lightning{}. Pertanto $p$ è riducibile. +\end{proof} + +\begin{corollary}[\textit{Teorema di Natale di Fermat}] + \label{th:teorema_natale} + Sia $p$ un numero primo tale che $p \equiv 1 \pmod4$. Allora + $p$ è somma di due quadrati in $\ZZ$. +\end{corollary} + +\begin{proof} + Per il \textit{Teorema \ref{th:primo_1_mod_4_riducibile}}, + $p$ è riducibile in $\ZZi$. In quanto riducibile in $\ZZi$, per + il \textit{Lemma \ref{lem:riducibile_due_quadrati}}, $p$ è allora + somma di due quadrati. +\end{proof} + +\begin{theorem} + \label{th:primo_-1_mod_4_irriducibile} + Sia $p$ un numero primo tale che $p \equiv -1 \pmod4$. Allora + $p$ è irriducibile in $\ZZi$. +\end{theorem} + +\begin{proof} + Se $p$ fosse riducibile in + $\ZZi$, per il \nameref{th:teorema_natale} esisterebbero $a$ e $b$ + in $\ZZ$ tali che $p=a^2+b^2$. Dal momento che $p$ è dispari, + possiamo supporre, senza perdità di generalità, che + $a$ sia pari e che $b$ sia dispari. Pertanto $a^2 \equiv 0 \pmod 4$ e $b^2 \equiv 1 \pmod 4$, dacché sono uno pari e l'altro dispari\footnote{Infatti, $0^2 \equiv 0 + \pmod4$, $1^2 \equiv 1 \pmod4$, $2^2 \equiv 4 \equiv 0 \pmod 4$, + $3^2 \equiv 9 \equiv 1 \pmod 4$.}. Tuttavia la congruenza + $a^2+b^2 \equiv 1 \equiv -1 \pmod4$ non è mai soddisfatta, + \Lightning{}. Pertanto $p$ può essere solo irriducibile. +\end{proof} + +\begin{note} + Si osserva che $2=(1+i)(1-i)$. Dal momento che $\norm{1+i}^2= + \norm{1-i}^2=2\neq1$, si deduce che nessuno dei due fattori + è invertibile. Pertanto $2$ non è irriducibile. +\end{note} + +\begin{proposition} + \label{prop:irriducibili_zz_zzi} + Gli unici primi $p \in \ZZ$ irriducibili in $\ZZi$ sono i primi $p$ tali + che $p \equiv -1 \pmod4$. +\end{proposition} + +\begin{proof} + Per l'osservazione precedente, $2$ non è irriducibile in $\ZZi$, + così come i primi congrui a $1$ in modulo $4$, + per il \textit{Teorema \ref{th:primo_1_mod_4_riducibile}}. Al + contrario i primi $p$ congrui a $-1$ in modulo $4$ sono + irriducibili, per il \textit{Teorema \ref{th:primo_-1_mod_4_irriducibile}}, da cui la tesi. +\end{proof} + +\begin{theorem} + $z \in \ZZi$ è irriducibile se e solo se $z$ è un associato di un $k \in \ZZ$ tale che $k \equiv -1 \pmod 4$, o se $\norm{z}^2$ è primo. +\end{theorem} + +\begin{proof} Si dimostrano le due implicazioni separatamente. \\ + + ($\implies$)\; Sia $z \in \ZZi$ irriducibile. Chiaramente + $z \mid z \overline{z} = g(z)$. Dacché $\ZZ$ è un UFD, + $g(z)$ può decomporsi in un prodotto di primi $q_1q_2\cdots q_n$. + Dal momento che $\ZZi$ è un PID, in quanto anello euclideo, + $z$ deve dividere uno dei primi della fattorizzazione di + $g(z)$. Si assuma che tale primo sia $q_i$. Allora esiste + un $w \in \ZZi$ tale che $q_i=wz$. \\ + + Se $w \in \ZZi^*$, si + deduce che $z$ è un associato di $q_i$. Dal momento che + $z$ è irriducibile, $q_i$, che è suo associato, è a sua + volta irriducibile. Allora, per la \textit{Proposizione \ref{prop:irriducibili_zz_zzi}}, $q_i \equiv -1 \pmod4$. + \\ + + Altrimenti, se $w$ non è invertibile, si ha che $g(w)>g(1)$, + ossia che $\norm{w}^2>1$. Inoltre in quanto irriducibile, anche + $z$ non è invertibile, e quindi + $g(z)>g(1) \implies \norm{z}^2>1$. Dalla proprietà + moltiplicativa + del modulo si ricava $q_i^2 = \norm{q_i}^2 = \norm{w}^2 \norm{z}^2$, + da cui necessariamente consegue che: + + \[ \norm{w}^2=q_i, \quad \norm{z}^2=q_i, \] + + attraverso cui si verifica l'implicazione. \\ + + ($\,\Longleftarrow\,\,$)\; Se $k \in \ZZ$ e $k \equiv -1 \pmod4$, per + il \textit{Teorema \ref{th:primo_-1_mod_4_irriducibile}}, $k$ è + irriducibile. Allora in quanto suo associato, anche $z$ è irriducibile. \\ + + Altrimenti, se $\norm{z}^2$ è un primo $p$, si ponga + $z=ab$ con $a$ e $b \in \ZZi$. Per la proprietà moltiplicativa + del modulo, $p = \norm{z}^2 = \norm{ab}^2 = \norm{a}^2\norm{b}^2$. + Tuttavia questo implica che uno tra $\norm{a}^2$ e $\norm{b}^2$ + sia pari a $1$, ossia che uno tra $a$ e $b$ sia invertibile, + dacché $g(1)=1$. Pertanto $z$ è in ogni caso irriducibile. +\end{proof} + +Infine si enuncia un'ultima identità inerente all'aritmetica, ma +strettamente collegata a $\ZZi$. + +\subsection{L'identità di Brahmagupta-Fibonacci} + +\begin{proposition}[\textit{Identità di Brahmagupta-Fibonacci}] + \label{prop:fibonacci} + Il prodotto di due somme di quadrati è ancora una + somma di quadrati. In particolare: + + \[ (a^2+b^2)(c^2+d^2)=(ac-bd)^2+(ad+bc)^2. \] +\end{proposition} + +\begin{proof} + La dimostrazione altro non è che una banale verifica + algebrica. Ciononostante è possibile risalire a questa + identità in via alternativa mediante l'uso + del modulo dei numeri complessi. \\ + + Siano $z_1=a+bi$, $z_2=c+di \in \CC$. Allora, per le proprietà + del modulo dei numeri complessi: + + \begin{equation} + \label{eq:modulo_z} + \norm{z_1}\norm{z_2}=\norm{z_1z_2}. + \end{equation} + + + Computando il prodotto tra $z_1$ e $z_2$ si ottiene: + + \[ z_1z_2 = (ac-bd) + (ad+bc)i, \] + + da cui a sua volta si ricava: + + \[ \norm{z_1z_2} = \sqrt{(ac-bd)^2 + (ad+bc)^2}, \] + + assieme a: + + \[ \norm{z_1}=\sqrt{a^2+b^2}, \quad \norm{z_2}=\sqrt{c^2+d^2}. \] + + Infine, da \eqref{eq:modulo_z}, elevando al quadrato, si deduce l'identità + presentata: + + \begin{multline*} + \sqrt{a^2+b^2}\sqrt{c^2+d^2}=\sqrt{(ac-bd)^2 + (ad+bc)^2} \implies (a^2+b^2)(c^2+d^2)= \\ (ac-bd)^2+(ad+bc)^2. + \end{multline*} +\end{proof} + +\begin{example} + Si consideri $65=5 \cdot 13$. Dal momento che sia $5$ + che $13$ sono congrui a $1$ in modulo $4$, sappiamo + già si possono scrivere entrambi come somme di due + quadrati. Allora, dall'\nameref{prop:fibonacci}, + anche $65$ è somma di due quadrati. \\ + + Infatti $5=2^2+1^2$ e $13=3^2+2^2$. Pertanto + $65=5\cdot 13=(2\cdot3-1\cdot2)^2 + (2\cdot2+1\cdot3)^2=4^2+7^2$. +\end{example} + +\section{Irriducibilità in $\ZZx$ e in $\QQx$} + +\subsection{Criterio di Eisenstein e proiezione in $\ZZpx$} + +Prima di studiare le irriducibilità in $\ZZ$, si guarda +alle irriducibilità nei vari campi finiti $\ZZp$, con +$p$ primo. Questo metodo presenta un vantaggio da non +sottovalutare: in $\ZZp$ per ogni grado $n$ esiste un +numero finito di polinomi monici\footnote{Si prendono in + considerazione solo i polinomi monici dal momento che vale + l'equivalenza degli associati: se $a$ divide $b$, allora + tutti gli associati di $a$ dividono $b$. $\ZZp$ è infatti + un campo, e quindi $\ZZpx$ è un anello euclideo.} -- in particolare, $p^n$ -- +e quindi per un polinomio di grado $d$ è sufficiente controllare +che questo non sia prodotto di tali polinomi monici per +$1 \leq n < d$. \\ + +In modo preliminare, si definisce un omomorfismo fondamentale. + +\begin{definition} + Sia il seguente l'\textbf{omomorfismo di proiezione} da + $\ZZ$ in $\ZZp$: + + \[ \hatpip : \ZZx \to \ZZpx,\, a_n x^n + \ldots + a_0 \mapsto [a_n]_p \, x^n + \ldots + [a_0]_p. \] +\end{definition} + +\begin{note} + Si dimostra facilmente che $\hatpi$ è un omomorfismo di anelli. + Innanzitutto, $\hatpi(1) = [1]_p$. Vale chiaramente la linearità: + + \begin{multline*} + \hatpip(a_n x^n + \ldots + a_0) + \hatpip(b_n x^n + \ldots + b_0) = [a_n]_p \, x^n + \ldots + [b_n]_p \, x^n + \ldots = \\ + = [a_n+b_n]_p \, x^n + \ldots = \hatpip(a_n x^n + \ldots + a_0 + b_n x^n + \ldots + b_0). + \end{multline*} + + Infine vale anche la moltiplicatività: + + \begin{multline*} + \hatpip(a_n x^n + \ldots + a_0) \hatpip(b_n x^n + \ldots + b_0) = ([a_n]_p \, x^n + \ldots)([b_n]_p \, x^n + \ldots) = \\ + = \sum_{i=0}^n \sum_{j+k=i} [a_j]_p \, [b_k]_p \, x^i + = \sum_{i=0}^n \sum_{j+k=i} [a_j b_k]_p \, x^i + = \hatpip\left(\sum_{i=0}^n \sum_{j+k=i} a_j b_k x^i\right) = \\ + =\hatpip\left((a_n x^n + \ldots + a_0)(b_n x^n + \ldots + b_0)\right). + \end{multline*} +\end{note} + +Prima di enunciare un teorema che si rivelerà +importante nel determinare l'irriducibilità di un +polinomio in $\ZZx$, si enuncia una definizione che +verrà ripresa anche in seguito + +\begin{definition} + Un polinomio $a_n x^n + \ldots + a_0 \in \ZZx$ si dice + \textbf{primitivo} se $\MCD(a_n, \ldots, a_0)=1$. +\end{definition} + +\begin{theorem} + \label{th:proiezione_irriducibilità} + Sia $p$ un primo. Sia $f(x) = a_n x^n + \ldots \in \ZZx$ + primitivo. Se $p \nmid a_n$ e + $\hatpip(f(x))$ è irriducibile in $\ZZpx$, allora anche $f(x)$ lo + è in $\ZZx$. +\end{theorem} + +\begin{proof} + Si dimostra la tesi contronominalmente. Sia $f(x) = + a_nx^n + \ldots \in \ZZ[x]$ primitivo e riducibile, con + $p \nmid a_n$. Dal momento che $f(x)$ è riducibile, esistono + $g(x)$, $h(x)$ non invertibili tali che $f(x)=g(x)h(x)$. \\ + + Si dimostra che $\deg g(x) \geq 1$. Se infatti fosse nullo, + $g(x)$ dovrebbe o essere uguale a $\pm 1$ -- assurdo, dal + momento che $g(x)$ non è invertibile, \Lightning{} -- o + essere una costante non invertibile. Tuttavia, nell'ultimo + caso, risulterebbe che $f(x)$ non è primitivo, poiché + $g(x)$ dividerebbe ogni coefficiente del polinomio. + Analogamente anche $\deg h(x) \geq 1$. \\ + + Si consideri ora $\hatpip(f(x))=\hatpip(g(x))\hatpip(h(x))$. + Dal momento che $p \nmid a_n$, il grado di $f(x)$ rimane costante + sotto l'operazione di omomorfismo, ossia $\deg \hatpip(f(x)) = + \deg f(x)$. \\ + + Inoltre, poiché nessuno dei fattori di $f(x)$ è nullo, $\deg f(x) = \deg g(x) + + \deg h(x)$. Da questa considerazione si deduce che anche i + gradi di $g(x)$ e $h(x)$ non devono calare, altrimenti si + avrebbe che $\deg \hatpip(f(x)) < \deg f(x)$, \Lightning{}. + Allora $\deg \hatpip(g(x)) = \deg g(x) \geq 1$, + $\deg \hatpip(h(x)) = \deg h(x) \geq 1$. \\ + + Poiché $\deg \hatpip(g(x))$ e $\deg \hatpip(h(x))$ sono + dunque entrambi non nulli, $\hatpip(g(x))$ e $\hatpip(h(x))$ + non sono invertibili\footnote{Si ricorda che $\ZZpx$ + è un anello euclideo. Pertanto, non avere lo stesso grado + dell'unità equivale a non essere invertibili.}. Quindi + $f(x)$ è prodotto di non invertibili, ed è dunque riducibile. + +\end{proof} + +\begin{theorem}[\textit{Criterio di Eisenstein}] + \label{th:eisenstein} + Sia $p$ un primo. + Sia $f(x) = a_n x^n + \ldots + a_0 \in \ZZx$ primitivo tale che: + + \begin{enumerate}[ (1)] + \item $p \nmid a_n$, + \item $p \mid a_i$, $\forall i \neq n$, + \item $p^2 \nmid a_0$. + \end{enumerate} + + Allora $f(x)$ è irriducibile in $\ZZx$. +\end{theorem} + +\begin{proof} + Si ponga $f(x)$ riducibile e sia pertanto $f(x)=g(x)h(x)$ con + $g(x)$ e $h(x)$ non invertibili. Analogamente a come visto + per il \textit{Teorema \ref{th:proiezione_irriducibilità}}, si + desume che $\deg g(x)$, $\deg h(x) \geq 1$. \\ + + Si applica l'omomorfismo di proiezione in $\ZZpx$: + + \[ \hatpip(f(x))=\underbrace{[a_n]_p}_{\neq 0} x_n, \] + + da cui si deduce che $\deg \hatpip(f(x)) = \deg f(x)$. \\ + + Dal momento che $\hatpip(f(x))=\hatpip(g(x))\hatpip(h(x))$ e + che $\ZZpx$, in quanto campo, è un dominio, + necessariamente sia $\hatpip(g(x))$ che $\hatpip(h(x))$ + sono dei monomi. \\ + + Inoltre, sempre in modo analogo a come visto per il \textit{Teorema + \ref{th:proiezione_irriducibilità}}, sia $\deg \hatpip(g(x))$ + che $\deg \hatpip(h(x))$ sono maggiori o uguali ad $1$. \\ + + Combinando questo risultato col fatto che questi due fattori + sono monomi, si desume che + $\hatpip(g(x))$ e $\hatpip(h(x))$ sono monomi di grado positivo. + Quindi $p$ deve dividere entrambi i termini noti di $g(x)$ e + $h(x)$, e in particolare $p^2$ deve dividere il loro prodotto, + ossia $a_0$. Tuttavia questo è un assurdo, \Lightning{}. +\end{proof} + +\begin{note} + Si consideri $x^k-2$, per $k \geq 1$. + Per il \nameref{th:eisenstein}, + considerando come primo $p=2$, si verifica che + $x^k-2$ è sempre irriducibile. Pertanto, per ogni + grado di un polinomio esiste almeno un irriducibile -- + a differenza di come invece avviene in $\RRx$ o in $\CCx$. +\end{note} + +\begin{theorem} + Sia $f(x) \in \ZZx$ primitivo e sia $a \in \ZZ$. Allora $f(x)$ è + irriducibile se e solo se $f(x+a)$ è irriducibile. +\end{theorem} + +\begin{proof} + Si dimostra una sola implicazione, dal momento che l'implicazione + contraria consegue dalle stesse considerazioni poste + studiando prima $f(x+a)$ e poi $f(x)$. \\ + + Sia $f(x)=a(x)b(x)$ riducibile, con $a(x)$, $b(x) \in \ZZx$ non + invertibili. Come già visto per il \textit{Teorema + \ref{th:proiezione_irriducibilità}}, $\deg a(x)$, $\deg b(x) \geq 1$. \\ + + Allora chiaramente $f(x+a)=g(x+a)h(x+a)$, con $\deg g(x+a) = + \deg g(x) \geq 1$, $\deg h(x+a) = \deg h(x) \geq 1$. Pertanto + $f(x+a)$ continua a essere riducibile, da cui la tesi. +\end{proof} + +\begin{example} + Si consideri $f(x) = x^{p-1}+\ldots+x^2+x+1 \in \ZZx$, dove + tutti i coefficienti del polinomio sono $1$. Si verifica che: + + \[ f(x+1)=\frac{(x+1)^p-1}x = p+\binom{p}{2}x+\ldots+x^{p-1}. \] + + Allora, per il \nameref{th:eisenstein} con $p$, $f(x+1)$ è + irriducibile. Pertanto anche $f(x)$ lo è. +\end{example} + +\subsection{Alcuni irriducibili di $\ZZ_2[x]$} + +Tra tutti gli anelli $\ZZpx$, $\ZZ_2[x]$ ricopre sicuramente +un ruolo fondamentale, dal momento che è il meno costoso +computazionalmente da analizzare, dacché $\ZZ_2$ consta +di soli due elementi. Pertanto si computano adesso gli +irriducibili di $\ZZ_2[x]$ fino al quarto grado incluso, a meno +di associati. \\ + +Sicuramente $x$ e $x+1$ sono irriducibili, dal momento che sono di +primo grado. I polinomi di secondo grado devono dunque essere +prodotto di questi polinomi, e pertanto devono avere o $0$ o +$1$ come radice: si verifica quindi che $x^2+x+1$ è l'unico +polinomio di secondo grado irriducibile. \\ + +Per il terzo grado vale ancora lo stesso principio, per cui +$x^3+x^2+1$ e $x^3+x+1$ sono gli unici irriducibili di tale grado. +Infine, per il quarto grado, i polinomi riducibili soddisfano +una qualsiasi delle seguenti proprietà: + +\begin{itemize} + \item $0$ e $1$ sono radici del polinomio, + \item il polinomio è prodotto di due polinomi irriducibili di + secondo grado. +\end{itemize} + +Si escludono pertanto dagli irriducibili i polinomi non omogenei -- +che hanno sicuramente $0$ come radice --, e i polinomi con $1$ come +radice, ossia $x^4+x^3+x+1$,\ \ +$x^4+x^3+x^2+1$, e $x^4+x^2+x+1$. Si esclude anche +$(x^2+x+1)^2 = x^4+x^2+1$. Pertanto gli unici irriducibili di +grado quattro sono $x^4+x^3+x^2+x+1$,\ \ $x^4+x^3+1$,\ \ $x^4+x+1$. \\ + +Tutti questi irriducibili sono raccolti nella seguente tabella: + +\begin{itemize} + \item (grado 1) $x$, $x+1$, + \item (grado 2) $x^2+x+1$, + \item (grado 3) $x^3+x^2+1$, $x^3+x+1$, + \item (grado 4) $x^4+x^3+x^2+x+1$,\ \ $x^4+x^3+1$,\ \ $x^4+x+1$. +\end{itemize} + +\begin{example} + Il polinomio $51x^3+11x^2+1 \in \ZZx$ è primitivo dal momento + che $\MCD(51, 11, 1)=1$. Inoltre, poiché $\hatpi_2(51x^3+11x^2+1)= + x^3+x+1$ è irriducibile, si deduce che anche $51x^3+11x^2+1$ lo + è per il \textit{Teorema \ref{th:proiezione_irriducibilità}}. +\end{example} + +\subsection{Teorema delle radici razionali e lemma di Gauss} + +Si enunciano in questa sezione i teoremi più importanti per +lo studio dell'irriducibilità dei polinomi in $\QQx$ e +in $\ZZx$, a partire dai due teoremi più importanti: il +classico \nameref{th:radici_razionali} e il \nameref{th:lemma_gauss}, +che si pone da ponte tra l'analisi dell'irriducibilità in $\ZZx$ e +quella in $\QQx$. + +\begin{theorem}[\textit{Teorema delle radici razionali}] + \label{th:radici_razionali} + Sia $f(x) = a_n x^n + \ldots + a_0 \in \ZZx$. Abbia $f(x)$ + una radice razionale. Allora, detta tale radice $\frac{p}{q}$, già ridotta ai minimi termini, questa è tale che: + + \begin{enumerate}[ (i.)] + \item $p \mid a_0$, + \item $q \mid a_n$. + \end{enumerate} +\end{theorem} + +\begin{proof} + Poiché $\frac{p}{q}$ è radice, $f\left(\frac{p}{q}\right)=0$, e + quindi si ricava che: + + \[ a_n \left( \frac{p}{q} \right)^n + \ldots + a_0 = 0 \implies + a_n p^n = -q( \ldots + a_0 q^{n-1}). \] + + \vskip 0.1in + + Quindi $q \mid a_n p^n$. Dal momento che $\MCD(p, q)=1$, si + deduce che $q \mid a_n$. \\ + + Analogamente si ricava che: + + \[ a_0 q^n = -p(a_n p^{n-1} + \ldots). \] + + \vskip 0.1in + + Pertanto, per lo stesso motivo espresso in precedenza, + $p \mid a_0$, da cui la tesi. +\end{proof} + +\begin{theorem}[\textit{Lemma di Gauss}] + \label{th:lemma_gauss} + Il prodotto di due polinomi primitivi in $\ZZx$ è anch'esso primitivo. +\end{theorem} + +\begin{proof} + Siano $g(x) = a_m x^m + \ldots + a_0$ e $h(x) = b^n x^n + \ldots + b_0$ due polinomi primitivi in $\ZZx$. Si assuma che $f(x)=g(x)h(x)$ + non sia primitivo. Allora esiste un $p$ primo che divide tutti i + coefficienti di $f(x)$. \\ + + Siano $a_s$ e $b_t$ i più piccoli coefficienti non divisibili + da $p$ dei rispettivi polinomi. Questi sicuramente esistono, + altrimenti $p$ dividerebbe tutti i coefficienti, e quindi + o $g(x)$ o $h(x)$ non sarebbe primitivo, \Lightning{}. \\ + + Si consideri il coefficiente di $x^{s+t}$ di $f(x)$: + + \[c_{s+t} = \sum_{j+k=s+t} a_j b_k = \underbrace{a_0 b_{s+t} + a_1 b_{s+t-1} + \ldots}_{\equiv \, 0 \pmod p} + a_s b_t + \underbrace{a_{s+1}b_{t-1} + \ldots}_{\equiv \, 0 \pmod p},\] + + dal momento che $p \mid c_{s+t}$, si deduce che $p$ deve dividere + anche $a_sb_t$, ossia uno tra $a_s$ e $b_t$, che è assurdo, \Lightning{}. Quindi $f(x)$ è primitivo. + +\end{proof} + +\begin{theorem}[\textit{Secondo lemma di Gauss}] + \label{th:lemma_gauss_2} + Sia $f(x) \in \ZZx$. Allora $f(x)$ è irriducibile in $\ZZx$ + se e solo se $f(x)$ è irriducibile in $\QQx$ ed è primitivo. +\end{theorem} + +\begin{proof} Si dimostrano le due implicazioni separatamente. \\ + + ($\implies$)\; Si dimostra l'implicazione contronominalmente, + ossia mostrando che se $f(x)$ non è primitivo o se è + riducibile in $\QQx$, allora $f(x)$ è riducibile in $\ZZx$. \\ + + Se $f(x)$ non è primitivo, allora + $f(x)$ è riducibile in $\ZZx$. Sia quindi $f(x)$ primitivo + e riducibile in $\QQx$, con $f(x)=g(x)h(x)$, + $g(x)$, $h(x) \in \QQx \setminus \QQx^*$. \\ + + Si descrivano $g(x)$ e $h(x)$ nel seguente modo: + + \[ g(x)=\frac{p_m}{q_m} x^m + \ldots + \frac{p_0}{q_0}, \quad \MCD(p_i, q_i)=1 \; \forall 0 \leq i \leq m, \] + + \[ h(x)=\frac{s_n}{t_n} x^n + \ldots + \frac{s_0}{t_0}, \quad + \MCD(s_i, t_i)=1 \; \forall 0 \leq i \leq n. \] + + \vskip 0.1in + + Si definiscano inoltre le seguenti costanti: + + \[ \alpha = \frac{\mcm(q_m, \ldots, q_0)}{\MCD(p_m, \ldots, p_0)}, \quad \beta = \frac{\mcm(t_n, \ldots, t_0)}{\MCD(s_n, \ldots, s_0)}. \] + + \vskip 0.1in + + Si verifica che sia $\hat{g}(x)=\alpha g(x)$ che + $\hat{h}(x)=\beta h(x)$ appartengono a $\ZZx$ e che entrambi + sono primitivi. Pertanto $\hat{g}(x) \hat{h}(x) \in \ZZx$. \\ + + Si descriva $f(x)$ nel seguente modo: + + \[ f(x)=a_k x^k + \ldots + a_0, \quad \MCD(a_k,\ldots,a_0)=1. \] + + \vskip 0.1in + + Sia $\alpha \beta = \frac{p}{q}$ con $\MCD(p,q)=1$, allora: + + \[\hat{g}(x) \hat{h}(x) = \alpha \beta f(x) = \frac{p}{q} (a_k x^k + \ldots + a_0), \] + + da cui, per far sì che $\hat{g}(x) \hat{h}(x)$ appartenga + a $\ZZx$, $q$ deve necessariamente dividere tutti i + coefficienti di $f(x)$. Tuttavia $f(x)$ è primitivo, e quindi + $q=\pm 1$. Pertanto $\alpha \beta = \pm p \in \ZZ$. \\ + + Infine, per il \nameref{th:lemma_gauss}, $\alpha \beta f(x)$ + è primitivo, da cui $\alpha \beta = \pm 1$. Quindi + $f(x) = \pm \hat{g}(x) \hat{h}(x)$ è riducibile. \\ + + ($\,\Longleftarrow\,\,$)\; Se $f(x)$ è irriducibile in $\QQx$ + ed è primitivo, sicuramente $f(x)$ è irriducibile anche in + $\ZZx$. Infatti, se esiste una fattorizzazione in + irriducibili in $\ZZx$, essa non include alcuna costante + moltiplicativa dal momento che $f(x)$ è primitivo, e quindi + esisterebbe una fattorizzazione in irriducibili anche in $\QQx$. +\end{proof} + +\end{document} diff --git a/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.html b/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.html new file mode 100644 index 0000000..4325b95 --- /dev/null +++ b/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.html @@ -0,0 +1,13884 @@ + + + + +Algoritmo di rappresentazione dei polinomi simmetrici negli e_i + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

Algoritmo di rappresentazione dei polinomi simmetrici negli $e_i$

Lo scopo di questo notebook è implementare l'algoritmo impiegato nella dimostrazione del Teorema fondamentale dei polinomi simmetrici, che, dato un campo $F$, asserisce il seguente isomorfismo:

+$$\operatorname{Sym}[X_n] \cong F[e_1, \ldots, e_n],$$

dove $X_n$ è l'insieme $\{x_1, \ldots, x_n\}$.

+

Innanzitutto, si sceglie un $n \in \mathbb{N}^+$, che rappresenta il numero di variabili di cui è composto il polinomio simmetrico, +e si crea l'anello di polinomi $\mathbb{Q}[x_1, \ldots, x_n]$, nel quale vale il degree lexicographic order (deglex). Vengono +infine create delle variabili simboliche a rappresentare i polinomi simmetrici elementari.

+ +
+
+
+
+
+
In [1]:
+
+
+
%display latex
+n = 5
+
+P = PolynomialRing(QQ, ",".join(f"x_{i}" for i in range(1, n+1)), order='deglex')
+P.inject_variables()
+
+var(",".join(f"e_{i}" for i in range(n+1)))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Defining x_1, x_2, x_3, x_4, x_5
+
+
+
+ +
+ +
Out[1]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Si definisce il valore che deve assumere la funzione $e(d)$, che rappresenta il polinomio simmetrico $e_d$, nel +seguente modo:

+$$e(d) = \begin{cases}1 & \text{se }d=0, \\ \displaystyle \sum_{1\leq i_1 < i_2 < \cdots < i_d \leq n} \underbrace{x_{i_1} \cdots x_{i_d}}_{d\text{ volte}} & \text{altrimenti.} \end{cases}$$ +
+
+
+
+
+
In [2]:
+
+
+
from functools import reduce
+from itertools import combinations
+from operator import mul
+
+def e(d: Integer):
+    if d == 0:
+        return 1
+    
+    return sum(reduce(mul, [P(f"x_{j}") for j in i], 1) for i in combinations(range(1, n+1), d))
+
+ +
+
+
+ +
+
+
+
+

Si definisce una funzione $\beta(\operatorname{exp\_lt})$ che prende in ingresso una tupla ordinata $\operatorname{exp\_lt} \in \mathbb{N}^n$ e restituisce una tupla dello stesso tipo definita nel seguente modo:

+$$\beta(\operatorname{exp\_lt})_i = \begin{cases} \operatorname{exp\_lt}_i - \operatorname{exp\_lt}_{i+1} & \text{se }1 \leq i < n, \\ \operatorname{exp\_lt}_i & \text{altrimenti.} \end{cases}$$ +
+
+
+
+
+
In [3]:
+
+
+
def beta(exp_lt):
+    return [e - exp_lt[i+1] if i != n-1 else e for i, e in enumerate(exp_lt)]
+
+ +
+
+
+ +
+
+
+
+

Si definiscono due funzioni analoghe, dette $\operatorname{e\_prod}$ e $\operatorname{e\_prod\_value}$. La seconda restituisce lo stesso polinomio di $\operatorname{e\_prod}$ sostituendo ai simboli $e_i$ i corrispettivi valori $e(i)$. Pertanto si definisce solo il valore della prima funzione.

+

Tale funzione $\operatorname{e\_prod}$ prende in ingresso una tupla $b \in \mathbb{N}^n$ e restituisce $e^b = {e_1}^{b_1} {e_2}^{b_2} \cdots {e_n}^{b_n}$.

+ +
+
+
+
+
+
In [4]:
+
+
+
def e_prod(b):
+    return reduce(mul, [eval(f"e_{i+1}")^k for i, k in enumerate(b)], 1)
+
+
+def e_prod_value(b):
+    return reduce(mul, [e(i+1)^k for i, k in enumerate(b)], 1)
+
+ +
+
+
+ +
+
+
+
+

Si definisce infine la funzione $\operatorname{combination}(\operatorname{poly}(x))$, che prende in ingresso un polinomio simmetrico $\operatorname{poly}(x)$ e ne restituisce la rappresentazione in $F[e_1, \ldots, e_n]$, secondo il seguente algoritmo.

+
    +
  • se $\operatorname{poly}(x)$ è $0$ o ha grado nullo, la sua rappresentazione in $F[e_1, \ldots, e_n]$ è già $\operatorname{poly}(x)$, e quindi la funzione restituisce il polinomio in ingresso senza modificarlo,
  • +
  • altrimenti, si considera, secondo il deglex, il leading term di $\operatorname{poly}(x)$, detto $\operatorname{lt}$:
      +
    • detta $\alpha$ la tupla ordinata degli esponenti di $\operatorname{lt}$, si calcola $\beta(\alpha)$, detto $b$,
    • +
    • detto $c$ il coefficiente razionale di $\operatorname{lt}$, si restituisce la rappresentazione simbolica $c \cdot \operatorname{e\_prod(b)}$, a cui si aggiunge ricorsivamente la rappresentazione del polinomio $\operatorname{poly(x)} -\, c \cdot \operatorname{e\_prod\_value(b)}$, ottenuta reiterando l'algoritmo su di esso.
    • +
    +
  • +
+ +
+
+
+
+
+
In [5]:
+
+
+
def combination(poly):
+    if isinstance(poly, Integer) or isinstance(poly, Rational) or poly == 0 or poly.degree() == 0:
+        return poly
+    
+    lt = sorted(list(poly), reverse=True)[0]
+    
+    try:
+        b = beta(lt[1].exponents()[0])
+        return lt[0] * e_prod(b) + combination(poly - lt[0] * e_prod_value(b))
+    except (AttributeError, TypeError):
+        raise TypeError("The given polynomial is not of symmetric kind")
+
+ +
+
+
+ +
+
+
+
+

Si sceglie inoltre un polinomio $\operatorname{poly}(x)$ che deve essere simmetrico -- qualora non fosse tale, l'algoritmo non terminerà con successo (se terminasse con successo, il polinomio sarebbe combinazione di polinomi simmetrici, e sarebbe dunque anch'esso simmetrico, ↯).

+ +
+
+
+
+
+
In [6]:
+
+
+
# Il polinomio deve essere simmetrico...
+poly = x_1 + x_2 + x_3 + x_4 + x_5 + (x_1^2 + x_2^2 + x_3^2 + x_4^2 + x_5^2 - x_1*x_2*x_3*x_4*x_5)^2
+poly
+
+ +
+
+
+ +
+
+ + +
+ +
Out[6]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Si calcola adesso la rappresentazione di $\operatorname{poly}(x)$ in funzione dei polinomi simmetrici elementari secondo l'implementazione di $\operatorname{combination}$:

+ +
+
+
+
+
+
In [7]:
+
+
+
combination(poly)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[7]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+

Data una somma di potenze simmetrica, è possibile implementare un algoritmo di rappresentazione negli $e_i$ secondo le identità di Newton-Girard. Si definisce allora la funzione $\operatorname{newton\_girard}(k)$, che prende in ingresso un $k \in \mathbb{N}$ e restituisce la rappresentazione di $\sum_{i=1}^n {x_i}^k$ nel seguente modo:

+$$\operatorname{newton\_girard}(k) = \begin{cases} n & \text{se } k = 0, \\ (-1)^{k+1} \cdot (k e_{k} + \sum_{i=1}^{k-1} (-1)^i \operatorname{newton\_girard}(i) \, e_{k-1}) & \text{altrimenti}, \end{cases}$$

dove si pone $e_i = 0$ per ogni $i > n$.

+

La funzione è implementata con l'ausilio di un sistema di caching, affinché non vengano ricalcolati i valori già calcolati.

+ +
+
+
+
+
+
In [8]:
+
+
+
from functools import lru_cache
+
+@lru_cache(maxsize=None)
+def newton_girard(k):    
+    if k == 0:
+        return n
+    
+    return ((-1)**(k+1) * ((k * eval(f"e_{k}") if k <= n else 0) +
+                           sum((-1)**i * newton_girard(i) * eval(f"e_{k - i}") for i in range(max(1, k-n), k)))).expand()
+
+ +
+
+
+ +
+
+
+
+

Si definisce infine la funzione $\operatorname{sum\_of\_powers}(k)$, che, dato in ingresso un $k \in \mathbb{N}$, restituisce la rappresentazione di $\sum_{i=1}^n (x_i)^k$ secondo la funzione $\operatorname{combination}$ già definita.

+ +
+
+
+
+
+
In [9]:
+
+
+
def sum_of_powers(k):
+    return combination(sum(eval(f"x_{i}")^k for i in range(1, n+1)))
+
+ +
+
+
+ +
+
+
+
+

Si sceglie infine un $k \in \mathbb{N}$ al quale elevare tutti le variabili della somma.

+ +
+
+
+
+
+
In [10]:
+
+
+
k = 8
+
+ +
+
+
+ +
+
+
+
+

Si computa la rappresentazione di $\sum_{i=1}^n (x_i)^k$ prima secondo $\operatorname{newton\_girard}$, e poi secondo $\operatorname{sum\_of\_powers}$, e si verifica che siano uguali.

+ +
+
+
+
+
+
In [11]:
+
+
+
a = newton_girard(k)
+a
+
+ +
+
+
+ +
+
+ + +
+ +
Out[11]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [12]:
+
+
+
b = sum_of_powers(k)
+b
+
+ +
+
+
+ +
+
+ + +
+ +
Out[12]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [13]:
+
+
+
a - b
+
+ +
+
+
+ +
+
+ + +
+ +
Out[13]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+

Sia ora:

+$$f(x) = x^n + a_{n-1} x^{n-1} \ldots + a_0,$$

con radici $x_1$, $x_2$, ..., $x_n$. Allora si definisce discriminante di $f$ la seguente produttoria:

+$$\Delta(f) = \displaystyle \prod_{1 \leq i < j \leq n} (x_i - x_j)^2.$$

In particolare, vale la seguente proprietà:

+$$\exists\, i \neq j \mid x_i = x_j \iff \Delta(f) = 0.$$ +
+
+
+
+
+
+

Si verifica facilmente che $\Delta(f)$ è un polinomio simmetrico. Poiché ogni permutazione è una composizione di trasposizioni, è sufficiente verificare che invertendo due radici $x_i$ e $x_j$ il discriminante rimanga invariato:

+
    +
  • i fattori che contengono solo uno tra $x_i$ e $x_j$ mantengono la somma della base invariata o al più cambiano di segno, e dunque, elevando al quadrato, rimangono invariati,
  • +
  • il fattore che contiene sia $x_i$ che $x_j$ cambia la propria base di segno, ma rimane invariato elevando al quadrato.
  • +
+

Poiché $\Delta(f)$ è un polinomio simmetrico nelle variabili $x_1$, ..., $x_n$, per il Teorema fondamentale dei polinomi simmetrici, si scrive in modo unico in funzione dei polinomi simmetrici elementari $e_i(x_1, \ldots, x_n)$. Tuttavia tali polinomi simmetrici elementari altro non sono che i coefficienti di $f(x)$, a meno del segno. In particolare vale che:

+$$e_i(x_1, \ldots, x_n) = (-1)^{i} a_{n-i}, \quad \text{per } 0 \leq i \leq n.$$ +
+
+
+
+
+
+

Si definiscono quindi i simboli $a_0$, ..., $a_n$ e si costruisce una funzione $\Delta(n)$ che restituisce il discriminante di un generico polinomio di $n$-esimo grado dato in ingresso in funzione degli $a_i$ mediante $\operatorname{combination}$.

+ +
+
+
+
+
+
In [14]:
+
+
+
var(",".join(f"a_{i}" for i in range(n+1)))
+
+def delta(n):
+    
+    f = reduce(mul, (eval(f"(x_{i}-x_{j})")^2 for i, j in combinations(range(1, n+1), 2)), 1)
+    c = combination(f)
+
+    for i in range(1, n+1):
+        if i % 2:
+            c = eval(f"c.substitute(e_{i}=-a_{n-i})")
+        else:
+            c = eval(f"c.substitute(e_{i}=a_{n-i})")
+
+    return c
+
+ +
+
+
+ +
+
+
+
+

Dunque, per l'$n$ scelto in partenza, il discriminante del generico polinomio di $n$-esimo grado è il seguente:

+ +
+
+
+
+
+
In [15]:
+
+
+
delta(n)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[15]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Infine si costruisce la funzione $\operatorname{evaluate\_delta}$ che, dato in ingresso un polinomio $f(x)$ di $n$-esimo grado, restituisce il valore di $\Delta(f)$, sostituendo agli $a_i$ generici di $\operatorname{delta}(n)$ i valori dei coefficienti di $f$.

+ +
+
+
+
+
+
In [16]:
+
+
+
def evaluate_delta(f):
+    d = delta(n)
+    
+    for i, a in enumerate(f.list()):
+        d = eval(f"d.substitute(a_{i}=a)")
+        
+    return d
+
+ +
+
+
+ +
+
+
+
+

Si verifica adesso che per un polinomio con radici multiple il valore di $\operatorname{evaluate\_delta}$ è precisamente zero:

+ +
+
+
+
+
+
In [17]:
+
+
+
f = (x-2)^2*(x-3)*(x-4)*(x-5)
+f
+
+ +
+
+
+ +
+
+ + +
+ +
Out[17]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [18]:
+
+
+
f.expand()
+
+ +
+
+
+ +
+
+ + +
+ +
Out[18]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [19]:
+
+
+
evaluate_delta(f)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[19]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Infine, si fa lo stesso con un polinomio con radici distinte, per verificare che $\operatorname{evaluate\_delta}$ è strettamente diverso da zero.

+ +
+
+
+
+
+
In [20]:
+
+
+
g = (x+2)*(x+I)*(x-I)*(x-1)*(x-2)
+g
+
+ +
+
+
+ +
+
+ + +
+ +
Out[20]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [21]:
+
+
+
g.expand()
+
+ +
+
+
+ +
+
+ + +
+ +
Out[21]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [22]:
+
+
+
evaluate_delta(g)
+
+ +
+
+
+ +
+
+ + +
+ +
Out[22]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

(c) 2022, ~videtta

+ +
+
+
+
+
+ + + + + + diff --git a/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.ipynb b/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.ipynb new file mode 100644 index 0000000..57c0822 --- /dev/null +++ b/Algebra/Notebook/1. Algoritmo di rappresentazione dei polinomi simmetrici/Algoritmo di rappresentazione dei polinomi simmetrici negli e_i.ipynb @@ -0,0 +1,735 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Algoritmo di rappresentazione dei polinomi simmetrici negli $e_i$\n", + "\n", + "Lo scopo di questo notebook è implementare l'algoritmo impiegato nella dimostrazione del _Teorema fondamentale dei polinomi simmetrici_, che, dato un campo $F$, asserisce il seguente isomorfismo:\n", + "\n", + "$$\\operatorname{Sym}[X_n] \\cong F[e_1, \\ldots, e_n],$$\n", + "\n", + "dove $X_n$ è l'insieme $\\{x_1, \\ldots, x_n\\}$.\n", + "\n", + "Innanzitutto, si sceglie un $n \\in \\mathbb{N}^+$, che rappresenta il numero di variabili di cui è composto il polinomio simmetrico,\n", + "e si crea l'anello di polinomi $\\mathbb{Q}[x_1, \\ldots, x_n]$, nel quale vale il _degree lexicographic order_ (**deglex**). Vengono\n", + "infine create delle variabili simboliche a rappresentare i polinomi simmetrici elementari." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defining x_1, x_2, x_3, x_4, x_5\n" + ] + }, + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(e_{0}, e_{1}, e_{2}, e_{3}, e_{4}, e_{5}\\right)\n", + "\\end{math}" + ], + "text/plain": [ + "(e_0, e_1, e_2, e_3, e_4, e_5)" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%display latex\n", + "n = 5\n", + "\n", + "P = PolynomialRing(QQ, \",\".join(f\"x_{i}\" for i in range(1, n+1)), order='deglex')\n", + "P.inject_variables()\n", + "\n", + "var(\",\".join(f\"e_{i}\" for i in range(n+1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definisce il valore che deve assumere la funzione $e(d)$, che rappresenta il polinomio simmetrico $e_d$, nel\n", + "seguente modo:\n", + "\n", + "$$e(d) = \\begin{cases}1 & \\text{se }d=0, \\\\ \\displaystyle \\sum_{1\\leq i_1 < i_2 < \\cdots < i_d \\leq n} \\underbrace{x_{i_1} \\cdots x_{i_d}}_{d\\text{ volte}} & \\text{altrimenti.} \\end{cases}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from functools import reduce\n", + "from itertools import combinations\n", + "from operator import mul\n", + "\n", + "def e(d: Integer):\n", + " if d == 0:\n", + " return 1\n", + " \n", + " return sum(reduce(mul, [P(f\"x_{j}\") for j in i], 1) for i in combinations(range(1, n+1), d))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definisce una funzione $\\beta(\\operatorname{exp\\_lt})$ che prende in ingresso una tupla ordinata $\\operatorname{exp\\_lt} \\in \\mathbb{N}^n$ e restituisce una tupla dello stesso tipo definita nel seguente modo:\n", + "\n", + "$$\\beta(\\operatorname{exp\\_lt})_i = \\begin{cases} \\operatorname{exp\\_lt}_i - \\operatorname{exp\\_lt}_{i+1} & \\text{se }1 \\leq i < n, \\\\ \\operatorname{exp\\_lt}_i & \\text{altrimenti.} \\end{cases}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def beta(exp_lt):\n", + " return [e - exp_lt[i+1] if i != n-1 else e for i, e in enumerate(exp_lt)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definiscono due funzioni analoghe, dette $\\operatorname{e\\_prod}$ e $\\operatorname{e\\_prod\\_value}$. La seconda restituisce lo stesso polinomio di $\\operatorname{e\\_prod}$ sostituendo ai simboli $e_i$ i corrispettivi valori $e(i)$. Pertanto si definisce solo il valore della prima funzione.\n", + "\n", + "Tale funzione $\\operatorname{e\\_prod}$ prende in ingresso una tupla $b \\in \\mathbb{N}^n$ e restituisce $e^b = {e_1}^{b_1} {e_2}^{b_2} \\cdots {e_n}^{b_n}$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def e_prod(b):\n", + " return reduce(mul, [eval(f\"e_{i+1}\")^k for i, k in enumerate(b)], 1)\n", + "\n", + "\n", + "def e_prod_value(b):\n", + " return reduce(mul, [e(i+1)^k for i, k in enumerate(b)], 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definisce infine la funzione $\\operatorname{combination}(\\operatorname{poly}(x))$, che prende in ingresso un polinomio simmetrico $\\operatorname{poly}(x)$ e ne restituisce la rappresentazione in $F[e_1, \\ldots, e_n]$, secondo il seguente algoritmo.\n", + "\n", + " - se $\\operatorname{poly}(x)$ è $0$ o ha grado nullo, la sua rappresentazione in $F[e_1, \\ldots, e_n]$ è già $\\operatorname{poly}(x)$, e quindi la funzione restituisce il polinomio in ingresso senza modificarlo,\n", + " - altrimenti, si considera, secondo il _deglex_, il _leading term_ di $\\operatorname{poly}(x)$, detto $\\operatorname{lt}$:\n", + " - detta $\\alpha$ la tupla ordinata degli esponenti di $\\operatorname{lt}$, si calcola $\\beta(\\alpha)$, detto $b$,\n", + " - detto $c$ il coefficiente razionale di $\\operatorname{lt}$, si restituisce la rappresentazione simbolica $c \\cdot \\operatorname{e\\_prod(b)}$, a cui si aggiunge ricorsivamente la rappresentazione del polinomio $\\operatorname{poly(x)} -\\, c \\cdot \\operatorname{e\\_prod\\_value(b)}$, ottenuta reiterando l'algoritmo su di esso." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def combination(poly):\n", + " if isinstance(poly, Integer) or isinstance(poly, Rational) or poly == 0 or poly.degree() == 0:\n", + " return poly\n", + " \n", + " lt = sorted(list(poly), reverse=True)[0]\n", + " \n", + " try:\n", + " b = beta(lt[1].exponents()[0])\n", + " return lt[0] * e_prod(b) + combination(poly - lt[0] * e_prod_value(b))\n", + " except (AttributeError, TypeError):\n", + " raise TypeError(\"The given polynomial is not of symmetric kind\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si sceglie inoltre un polinomio $\\operatorname{poly}(x)$ che _deve_ essere simmetrico -- qualora non fosse tale, l'algoritmo non terminerà con successo (se terminasse con successo, il polinomio sarebbe combinazione di polinomi simmetrici, e sarebbe dunque anch'esso simmetrico, ↯)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}x_{1}^{2} x_{2}^{2} x_{3}^{2} x_{4}^{2} x_{5}^{2} - 2 x_{1}^{3} x_{2} x_{3} x_{4} x_{5} - 2 x_{1} x_{2}^{3} x_{3} x_{4} x_{5} - 2 x_{1} x_{2} x_{3}^{3} x_{4} x_{5} - 2 x_{1} x_{2} x_{3} x_{4}^{3} x_{5} - 2 x_{1} x_{2} x_{3} x_{4} x_{5}^{3} + x_{1}^{4} + 2 x_{1}^{2} x_{2}^{2} + 2 x_{1}^{2} x_{3}^{2} + 2 x_{1}^{2} x_{4}^{2} + 2 x_{1}^{2} x_{5}^{2} + x_{2}^{4} + 2 x_{2}^{2} x_{3}^{2} + 2 x_{2}^{2} x_{4}^{2} + 2 x_{2}^{2} x_{5}^{2} + x_{3}^{4} + 2 x_{3}^{2} x_{4}^{2} + 2 x_{3}^{2} x_{5}^{2} + x_{4}^{4} + 2 x_{4}^{2} x_{5}^{2} + x_{5}^{4} + x_{1} + x_{2} + x_{3} + x_{4} + x_{5}\n", + "\\end{math}" + ], + "text/plain": [ + "x_1^2*x_2^2*x_3^2*x_4^2*x_5^2 - 2*x_1^3*x_2*x_3*x_4*x_5 - 2*x_1*x_2^3*x_3*x_4*x_5 - 2*x_1*x_2*x_3^3*x_4*x_5 - 2*x_1*x_2*x_3*x_4^3*x_5 - 2*x_1*x_2*x_3*x_4*x_5^3 + x_1^4 + 2*x_1^2*x_2^2 + 2*x_1^2*x_3^2 + 2*x_1^2*x_4^2 + 2*x_1^2*x_5^2 + x_2^4 + 2*x_2^2*x_3^2 + 2*x_2^2*x_4^2 + 2*x_2^2*x_5^2 + x_3^4 + 2*x_3^2*x_4^2 + 2*x_3^2*x_5^2 + x_4^4 + 2*x_4^2*x_5^2 + x_5^4 + x_1 + x_2 + x_3 + x_4 + x_5" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Il polinomio deve essere simmetrico...\n", + "poly = x_1 + x_2 + x_3 + x_4 + x_5 + (x_1^2 + x_2^2 + x_3^2 + x_4^2 + x_5^2 - x_1*x_2*x_3*x_4*x_5)^2\n", + "poly" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si calcola adesso la rappresentazione di $\\operatorname{poly}(x)$ in funzione dei polinomi simmetrici elementari secondo l'implementazione di $\\operatorname{combination}$:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}e_{1}^{4} - 4 \\, e_{1}^{2} e_{2} - 2 \\, e_{1}^{2} e_{5} + 4 \\, e_{2}^{2} + 4 \\, e_{2} e_{5} + e_{5}^{2} + e_{1}\n", + "\\end{math}" + ], + "text/plain": [ + "e_1^4 - 4*e_1^2*e_2 - 2*e_1^2*e_5 + 4*e_2^2 + 4*e_2*e_5 + e_5^2 + e_1" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "combination(poly)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data una somma di potenze simmetrica, è possibile implementare un algoritmo di rappresentazione negli $e_i$ secondo le [identità di Newton-Girard](https://it.wikipedia.org/w/index.php?title=Identit%C3%A0_di_Newton&oldid=127634236#Enunciato_in_forma_relativa_ai_polinomi_simmetrici_elementari). Si definisce allora la funzione $\\operatorname{newton\\_girard}(k)$, che prende in ingresso un $k \\in \\mathbb{N}$ e restituisce la rappresentazione di $\\sum_{i=1}^n {x_i}^k$ nel seguente modo:\n", + "\n", + "$$\\operatorname{newton\\_girard}(k) = \\begin{cases} n & \\text{se } k = 0, \\\\ (-1)^{k+1} \\cdot (k e_{k} + \\sum_{i=1}^{k-1} (-1)^i \\operatorname{newton\\_girard}(i) \\, e_{k-1}) & \\text{altrimenti}, \\end{cases}$$\n", + "\n", + "dove si pone $e_i = 0$ per ogni $i > n$.\n", + "\n", + "La funzione è implementata con l'ausilio di un sistema di _caching_, affinché non vengano ricalcolati i valori già calcolati." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from functools import lru_cache\n", + "\n", + "@lru_cache(maxsize=None)\n", + "def newton_girard(k): \n", + " if k == 0:\n", + " return n\n", + " \n", + " return ((-1)**(k+1) * ((k * eval(f\"e_{k}\") if k <= n else 0) +\n", + " sum((-1)**i * newton_girard(i) * eval(f\"e_{k - i}\") for i in range(max(1, k-n), k)))).expand()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definisce infine la funzione $\\operatorname{sum\\_of\\_powers}(k)$, che, dato in ingresso un $k \\in \\mathbb{N}$, restituisce la rappresentazione di $\\sum_{i=1}^n (x_i)^k$ secondo la funzione $\\operatorname{combination}$ già definita." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def sum_of_powers(k):\n", + " return combination(sum(eval(f\"x_{i}\")^k for i in range(1, n+1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si sceglie infine un $k \\in \\mathbb{N}$ al quale elevare tutti le variabili della somma." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "k = 8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si computa la rappresentazione di $\\sum_{i=1}^n (x_i)^k$ prima secondo $\\operatorname{newton\\_girard}$, e poi secondo $\\operatorname{sum\\_of\\_powers}$, e si verifica che siano uguali." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}e_{1}^{8} - 8 \\, e_{1}^{6} e_{2} + 20 \\, e_{1}^{4} e_{2}^{2} + 8 \\, e_{1}^{5} e_{3} - 16 \\, e_{1}^{2} e_{2}^{3} - 32 \\, e_{1}^{3} e_{2} e_{3} - 8 \\, e_{1}^{4} e_{4} + 2 \\, e_{2}^{4} + 24 \\, e_{1} e_{2}^{2} e_{3} + 12 \\, e_{1}^{2} e_{3}^{2} + 24 \\, e_{1}^{2} e_{2} e_{4} + 8 \\, e_{1}^{3} e_{5} - 8 \\, e_{2} e_{3}^{2} - 8 \\, e_{2}^{2} e_{4} - 16 \\, e_{1} e_{3} e_{4} - 16 \\, e_{1} e_{2} e_{5} + 4 \\, e_{4}^{2} + 8 \\, e_{3} e_{5}\n", + "\\end{math}" + ], + "text/plain": [ + "e_1^8 - 8*e_1^6*e_2 + 20*e_1^4*e_2^2 + 8*e_1^5*e_3 - 16*e_1^2*e_2^3 - 32*e_1^3*e_2*e_3 - 8*e_1^4*e_4 + 2*e_2^4 + 24*e_1*e_2^2*e_3 + 12*e_1^2*e_3^2 + 24*e_1^2*e_2*e_4 + 8*e_1^3*e_5 - 8*e_2*e_3^2 - 8*e_2^2*e_4 - 16*e_1*e_3*e_4 - 16*e_1*e_2*e_5 + 4*e_4^2 + 8*e_3*e_5" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = newton_girard(k)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}e_{1}^{8} - 8 \\, e_{1}^{6} e_{2} + 20 \\, e_{1}^{4} e_{2}^{2} + 8 \\, e_{1}^{5} e_{3} - 16 \\, e_{1}^{2} e_{2}^{3} - 32 \\, e_{1}^{3} e_{2} e_{3} - 8 \\, e_{1}^{4} e_{4} + 2 \\, e_{2}^{4} + 24 \\, e_{1} e_{2}^{2} e_{3} + 12 \\, e_{1}^{2} e_{3}^{2} + 24 \\, e_{1}^{2} e_{2} e_{4} + 8 \\, e_{1}^{3} e_{5} - 8 \\, e_{2} e_{3}^{2} - 8 \\, e_{2}^{2} e_{4} - 16 \\, e_{1} e_{3} e_{4} - 16 \\, e_{1} e_{2} e_{5} + 4 \\, e_{4}^{2} + 8 \\, e_{3} e_{5}\n", + "\\end{math}" + ], + "text/plain": [ + "e_1^8 - 8*e_1^6*e_2 + 20*e_1^4*e_2^2 + 8*e_1^5*e_3 - 16*e_1^2*e_2^3 - 32*e_1^3*e_2*e_3 - 8*e_1^4*e_4 + 2*e_2^4 + 24*e_1*e_2^2*e_3 + 12*e_1^2*e_3^2 + 24*e_1^2*e_2*e_4 + 8*e_1^3*e_5 - 8*e_2*e_3^2 - 8*e_2^2*e_4 - 16*e_1*e_3*e_4 - 16*e_1*e_2*e_5 + 4*e_4^2 + 8*e_3*e_5" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = sum_of_powers(k)\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}0\n", + "\\end{math}" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a - b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sia ora:\n", + "\n", + "$$f(x) = x^n + a_{n-1} x^{n-1} \\ldots + a_0,$$\n", + "\n", + "con radici $x_1$, $x_2$, ..., $x_n$. Allora si definisce **discriminante** di $f$ la seguente produttoria:\n", + "\n", + "$$\\Delta(f) = \\displaystyle \\prod_{1 \\leq i < j \\leq n} (x_i - x_j)^2.$$\n", + "\n", + "In particolare, vale la seguente proprietà:\n", + "\n", + "$$\\exists\\, i \\neq j \\mid x_i = x_j \\iff \\Delta(f) = 0.$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si verifica facilmente che $\\Delta(f)$ è un polinomio simmetrico. Poiché ogni permutazione è una composizione di trasposizioni, è sufficiente verificare che invertendo due radici $x_i$ e $x_j$ il discriminante rimanga invariato:\n", + "\n", + " - i fattori che contengono solo uno tra $x_i$ e $x_j$ mantengono la somma della base invariata o al più cambiano di segno, e dunque, elevando al quadrato, rimangono invariati,\n", + " - il fattore che contiene sia $x_i$ che $x_j$ cambia la propria base di segno, ma rimane invariato elevando al quadrato.\n", + " \n", + "Poiché $\\Delta(f)$ è un polinomio simmetrico nelle variabili $x_1$, ..., $x_n$, per il _Teorema fondamentale dei polinomi simmetrici_, si scrive in modo unico in funzione dei polinomi simmetrici elementari $e_i(x_1, \\ldots, x_n)$. Tuttavia tali polinomi simmetrici elementari altro non sono che i coefficienti di $f(x)$, a meno del segno. In particolare vale che:\n", + "\n", + "$$e_i(x_1, \\ldots, x_n) = (-1)^{i} a_{n-i}, \\quad \\text{per } 0 \\leq i \\leq n.$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definiscono quindi i simboli $a_0$, ..., $a_n$ e si costruisce una funzione $\\Delta(n)$ che restituisce il discriminante di un generico polinomio di $n$-esimo grado dato in ingresso in funzione degli $a_i$ mediante $\\operatorname{combination}$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "var(\",\".join(f\"a_{i}\" for i in range(n+1)))\n", + "\n", + "def delta(n):\n", + " \n", + " f = reduce(mul, (eval(f\"(x_{i}-x_{j})\")^2 for i, j in combinations(range(1, n+1), 2)), 1)\n", + " c = combination(f)\n", + "\n", + " for i in range(1, n+1):\n", + " if i % 2:\n", + " c = eval(f\"c.substitute(e_{i}=-a_{n-i})\")\n", + " else:\n", + " c = eval(f\"c.substitute(e_{i}=a_{n-i})\")\n", + "\n", + " return c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dunque, per l'$n$ scelto in partenza, il discriminante del generico polinomio di $n$-esimo grado è il seguente:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}a_{1}^{2} a_{2}^{2} a_{3}^{2} a_{4}^{2} - 4 \\, a_{0} a_{2}^{3} a_{3}^{2} a_{4}^{2} - 4 \\, a_{1}^{3} a_{3}^{3} a_{4}^{2} + 18 \\, a_{0} a_{1} a_{2} a_{3}^{3} a_{4}^{2} - 27 \\, a_{0}^{2} a_{3}^{4} a_{4}^{2} - 4 \\, a_{1}^{2} a_{2}^{3} a_{4}^{3} + 16 \\, a_{0} a_{2}^{4} a_{4}^{3} + 18 \\, a_{1}^{3} a_{2} a_{3} a_{4}^{3} - 80 \\, a_{0} a_{1} a_{2}^{2} a_{3} a_{4}^{3} - 6 \\, a_{0} a_{1}^{2} a_{3}^{2} a_{4}^{3} + 144 \\, a_{0}^{2} a_{2} a_{3}^{2} a_{4}^{3} - 27 \\, a_{1}^{4} a_{4}^{4} + 144 \\, a_{0} a_{1}^{2} a_{2} a_{4}^{4} - 128 \\, a_{0}^{2} a_{2}^{2} a_{4}^{4} - 192 \\, a_{0}^{2} a_{1} a_{3} a_{4}^{4} + 256 \\, a_{0}^{3} a_{4}^{5} - 4 \\, a_{1}^{2} a_{2}^{2} a_{3}^{3} + 16 \\, a_{0} a_{2}^{3} a_{3}^{3} + 16 \\, a_{1}^{3} a_{3}^{4} - 72 \\, a_{0} a_{1} a_{2} a_{3}^{4} + 108 \\, a_{0}^{2} a_{3}^{5} + 18 \\, a_{1}^{2} a_{2}^{3} a_{3} a_{4} - 72 \\, a_{0} a_{2}^{4} a_{3} a_{4} - 80 \\, a_{1}^{3} a_{2} a_{3}^{2} a_{4} + 356 \\, a_{0} a_{1} a_{2}^{2} a_{3}^{2} a_{4} + 24 \\, a_{0} a_{1}^{2} a_{3}^{3} a_{4} - 630 \\, a_{0}^{2} a_{2} a_{3}^{3} a_{4} - 6 \\, a_{1}^{3} a_{2}^{2} a_{4}^{2} + 24 \\, a_{0} a_{1} a_{2}^{3} a_{4}^{2} + 144 \\, a_{1}^{4} a_{3} a_{4}^{2} - 746 \\, a_{0} a_{1}^{2} a_{2} a_{3} a_{4}^{2} + 560 \\, a_{0}^{2} a_{2}^{2} a_{3} a_{4}^{2} + 1020 \\, a_{0}^{2} a_{1} a_{3}^{2} a_{4}^{2} - 36 \\, a_{0} a_{1}^{3} a_{4}^{3} + 160 \\, a_{0}^{2} a_{1} a_{2} a_{4}^{3} - 1600 \\, a_{0}^{3} a_{3} a_{4}^{3} - 27 \\, a_{1}^{2} a_{2}^{4} + 108 \\, a_{0} a_{2}^{5} + 144 \\, a_{1}^{3} a_{2}^{2} a_{3} - 630 \\, a_{0} a_{1} a_{2}^{3} a_{3} - 128 \\, a_{1}^{4} a_{3}^{2} + 560 \\, a_{0} a_{1}^{2} a_{2} a_{3}^{2} + 825 \\, a_{0}^{2} a_{2}^{2} a_{3}^{2} - 900 \\, a_{0}^{2} a_{1} a_{3}^{3} - 192 \\, a_{1}^{4} a_{2} a_{4} + 1020 \\, a_{0} a_{1}^{2} a_{2}^{2} a_{4} - 900 \\, a_{0}^{2} a_{2}^{3} a_{4} + 160 \\, a_{0} a_{1}^{3} a_{3} a_{4} - 2050 \\, a_{0}^{2} a_{1} a_{2} a_{3} a_{4} + 2250 \\, a_{0}^{3} a_{3}^{2} a_{4} - 50 \\, a_{0}^{2} a_{1}^{2} a_{4}^{2} + 2000 \\, a_{0}^{3} a_{2} a_{4}^{2} + 256 \\, a_{1}^{5} - 1600 \\, a_{0} a_{1}^{3} a_{2} + 2250 \\, a_{0}^{2} a_{1} a_{2}^{2} + 2000 \\, a_{0}^{2} a_{1}^{2} a_{3} - 3750 \\, a_{0}^{3} a_{2} a_{3} - 2500 \\, a_{0}^{3} a_{1} a_{4} + 3125 \\, a_{0}^{4}\n", + "\\end{math}" + ], + "text/plain": [ + "a_1^2*a_2^2*a_3^2*a_4^2 - 4*a_0*a_2^3*a_3^2*a_4^2 - 4*a_1^3*a_3^3*a_4^2 + 18*a_0*a_1*a_2*a_3^3*a_4^2 - 27*a_0^2*a_3^4*a_4^2 - 4*a_1^2*a_2^3*a_4^3 + 16*a_0*a_2^4*a_4^3 + 18*a_1^3*a_2*a_3*a_4^3 - 80*a_0*a_1*a_2^2*a_3*a_4^3 - 6*a_0*a_1^2*a_3^2*a_4^3 + 144*a_0^2*a_2*a_3^2*a_4^3 - 27*a_1^4*a_4^4 + 144*a_0*a_1^2*a_2*a_4^4 - 128*a_0^2*a_2^2*a_4^4 - 192*a_0^2*a_1*a_3*a_4^4 + 256*a_0^3*a_4^5 - 4*a_1^2*a_2^2*a_3^3 + 16*a_0*a_2^3*a_3^3 + 16*a_1^3*a_3^4 - 72*a_0*a_1*a_2*a_3^4 + 108*a_0^2*a_3^5 + 18*a_1^2*a_2^3*a_3*a_4 - 72*a_0*a_2^4*a_3*a_4 - 80*a_1^3*a_2*a_3^2*a_4 + 356*a_0*a_1*a_2^2*a_3^2*a_4 + 24*a_0*a_1^2*a_3^3*a_4 - 630*a_0^2*a_2*a_3^3*a_4 - 6*a_1^3*a_2^2*a_4^2 + 24*a_0*a_1*a_2^3*a_4^2 + 144*a_1^4*a_3*a_4^2 - 746*a_0*a_1^2*a_2*a_3*a_4^2 + 560*a_0^2*a_2^2*a_3*a_4^2 + 1020*a_0^2*a_1*a_3^2*a_4^2 - 36*a_0*a_1^3*a_4^3 + 160*a_0^2*a_1*a_2*a_4^3 - 1600*a_0^3*a_3*a_4^3 - 27*a_1^2*a_2^4 + 108*a_0*a_2^5 + 144*a_1^3*a_2^2*a_3 - 630*a_0*a_1*a_2^3*a_3 - 128*a_1^4*a_3^2 + 560*a_0*a_1^2*a_2*a_3^2 + 825*a_0^2*a_2^2*a_3^2 - 900*a_0^2*a_1*a_3^3 - 192*a_1^4*a_2*a_4 + 1020*a_0*a_1^2*a_2^2*a_4 - 900*a_0^2*a_2^3*a_4 + 160*a_0*a_1^3*a_3*a_4 - 2050*a_0^2*a_1*a_2*a_3*a_4 + 2250*a_0^3*a_3^2*a_4 - 50*a_0^2*a_1^2*a_4^2 + 2000*a_0^3*a_2*a_4^2 + 256*a_1^5 - 1600*a_0*a_1^3*a_2 + 2250*a_0^2*a_1*a_2^2 + 2000*a_0^2*a_1^2*a_3 - 3750*a_0^3*a_2*a_3 - 2500*a_0^3*a_1*a_4 + 3125*a_0^4" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "delta(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Infine si costruisce la funzione $\\operatorname{evaluate\\_delta}$ che, dato in ingresso un polinomio $f(x)$ di $n$-esimo grado, restituisce il valore di $\\Delta(f)$, sostituendo agli $a_i$ generici di $\\operatorname{delta}(n)$ i valori dei coefficienti di $f$." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_delta(f):\n", + " d = delta(n)\n", + " \n", + " for i, a in enumerate(f.list()):\n", + " d = eval(f\"d.substitute(a_{i}=a)\")\n", + " \n", + " return d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si verifica adesso che per un polinomio con radici multiple il valore di $\\operatorname{evaluate\\_delta}$ è precisamente zero:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}{\\left(x - 2\\right)}^{2} {\\left(x - 3\\right)} {\\left(x - 4\\right)} {\\left(x - 5\\right)}\n", + "\\end{math}" + ], + "text/plain": [ + "(x - 2)^2*(x - 3)*(x - 4)*(x - 5)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = (x-2)^2*(x-3)*(x-4)*(x-5)\n", + "f" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}x^{5} - 16 \\, x^{4} + 99 \\, x^{3} - 296 \\, x^{2} + 428 \\, x - 240\n", + "\\end{math}" + ], + "text/plain": [ + "x^5 - 16*x^4 + 99*x^3 - 296*x^2 + 428*x - 240" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f.expand()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}0\n", + "\\end{math}" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "evaluate_delta(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Infine, si fa lo stesso con un polinomio con radici distinte, per verificare che $\\operatorname{evaluate\\_delta}$ è strettamente diverso da zero." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}{\\left(x + 2\\right)} {\\left(x + i\\right)} {\\left(x - i\\right)} {\\left(x - 1\\right)} {\\left(x - 2\\right)}\n", + "\\end{math}" + ], + "text/plain": [ + "(x + 2)*(x + I)*(x - I)*(x - 1)*(x - 2)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g = (x+2)*(x+I)*(x-I)*(x-1)*(x-2)\n", + "g" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}x^{5} - x^{4} - 3 \\, x^{3} + 3 \\, x^{2} - 4 \\, x + 4\n", + "\\end{math}" + ], + "text/plain": [ + "x^5 - x^4 - 3*x^3 + 3*x^2 - 4*x + 4" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g.expand()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "\\begin{math}\n", + "\\newcommand{\\Bold}[1]{\\mathbf{#1}}-1440000\n", + "\\end{math}" + ], + "text/plain": [ + "-1440000" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "evaluate_delta(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***\n", + "(c) 2022, [~videtta](https://poisson.phc.dm.unipi.it/~videtta/)" + ] + } + ], + "metadata": { + "celltoolbar": "Edit Metadata", + "kernelspec": { + "display_name": "SageMath 9.2", + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.pdf b/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.pdf new file mode 100644 index 0000000..d495f0d Binary files /dev/null and b/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.pdf differ diff --git a/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.tex b/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.tex new file mode 100644 index 0000000..7b0c83b --- /dev/null +++ b/Geometria/Articoli/1. Lo spazio vettoriale dei sottinsiemi/spazio_vett_sottinsiemi.tex @@ -0,0 +1,153 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[italian]{babel} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsopn} +\usepackage{mathtools} + +\title{Spazio vettoriale dei sottoinsiemi} +\author{Gabriel Antonio Videtta} +\date{\today} + +\begin{document} + +\maketitle + +\newcommand{\FF}{\mathbb{F}_2} +\newcommand{\ZZ}{\mathbb{Z}} + +\newtheorem{example}{Esempio}[section] +\newtheorem{exercise}{Esercizio}[section] +\newtheorem{theorem}{Teorema}[section] + +\setlength\parindent{0pt} + +\tableofcontents + +\section{Il campo $\FF$ e verifica degli assiomi} + +Dato un qualsiasi insieme X\footnote{Non ci soffermiamo sulla definizione di insieme, +sebbene da tale scelta possano scaturire vari paradossi. Rimandiamo per la risoluzione +di tali problemi a varie teorie assiomatiche, come quella di Zermelo–Fraenkel.} è possibile +estrarne uno spazio vettoriale. \\ \\ +Per costruire l'insieme di vettori considereremo gli elementi di X, mentre il campo su cui verrà +costruito lo spazio sarà $\FF = \{0,1\} \, \cong \, \ZZ/2\ZZ$. Prima di costruire lo spazio, +assicuriamoci che $\FF$ sia effettivamente un campo\footnote{Non solo è un campo, ma è il più +piccolo campo non banale, ossia con più di un elemento.} e definiamolo. \\ \\ +Le operazioni $+$ e $\cdot$ di questo campo sono esattamente le stesse impiegate in +$\ZZ/2\ZZ$ (i.e. in modulo 2, dove $2 \equiv 0$), o equivalentemente vengono definite in questo modo: +\begin{itemize} + \item $+ : \FF \to \FF$ t.c. $0+0=0$, \, $1+0=1$, \, $0+1=1$, \, $1+1=0$ (addizione) + \item $\cdot : \FF \to \FF$ t.c. $0\cdot0=0$, \, $1\cdot0=0$, \, $0\cdot1=0$, \, $1\cdot1=1$ (moltiplicazione) +\end{itemize} +Gli assiomi di campo sono effettivamente soddisfatti: gli inversi additivi di $0$ e $1$ sono $0$ e $1$ stessi, e $1$ è inverso moltiplicativo di sé stesso. Valgono chiaramente le +proprietà associative e distributive, mentre gli elementi neutri sono $0$ per l'addizione e +$1$ per la moltiplicazione. +Adesso è possibile costruirci sopra uno spazio vettoriale, che d'ora in poi chiameremo +$\Delta (X)$. + +\section{Costruzione dello spazio vettoriale} + +Ricordiamo una delle operazioni elementari degli insiemi, la cosiddetta \textit{differenza +simmetrica} $A \Delta B$. Essa altro non è che l'unione dei due insiemi tolta la loro +intersezione: \[A \Delta B = \left( A \cup B \right) \setminus \left( A \cap B \right).\] +Adesso definiamo $\Delta (X) = \{ \alpha_1 x_1 + \alpha_2 x_2 + \ldots + \alpha_n x_n \mid n \in \mathbb{N} \land x_i \in X, \alpha_i \in \FF \; \forall \, i \in \mathbb{N} \mid 1 \leq i \leq n \}$. + +\begin{example} +Se $X = \{a, b\}$, $\Delta (X) = \{0, \, a, \, b, \, a+b\}$. +\end{example} +\begin{example} +Se $X = \{a, b, c\}$, $\Delta (X) = \{0, \, a, \, b, \, c, \, a+b, \, a+c, \, b+c, \, a+b+c\}$. +\end{example} + +Dotiamo lo spazio di due operazioni, dette somma ($+$) e prodotto esterno ($\cdot$): + +\begin{itemize} + \item $+ : \Delta (X) \to \Delta (X)$ t.c. $\forall \, a, b \in \Delta (X), \, a+b$ sia il risultato della + somma coefficiente a coefficiente\footnote{Esattamente come accade nei polinomi, dove + la somma di due polinomi è effettuata sommando i coefficienti dei monomi dello stesso + grado. L'unica differenza risiede nel ricordarsi che la somma dei coefficienti in $\Delta (X)$ è quella di $\FF$, dove il caso $1+1=0$ ha particolare rilevanza.}. + \item $\cdot : \Delta (X) \to \Delta (X)$ t.c. $\forall \, a \in \Delta (X), \, \delta \in \FF, \, \delta a$ sia il risultato del prodotto di $\delta$ con ogni coefficiente di $a$\footnote{Sussiste ancora l'analogia con i polinomi.}. +\end{itemize} + +\begin{example} +Se $X = \{a, \, b\}$, $a+a=(1+1)a=0$ in $\Delta (X)$, mentre $a+b$ ''rimane'' $a+b$. +\end{example} + +\begin{example} +Se $X = \{a, \, b\}$, $1\cdot a=a$ in $\Delta (X)$, mentre $0 \cdot a = 0$. +\end{example} + +Queste operazioni verificano facilmente gli assiomi dello spazio vettoriale, pertanto $\Delta (X)$ è uno spazio vettoriale, la cui base è $X$ stesso\footnote{Ogni elemento di $\Delta (X)$ è infatti combinazione lineare univoca degli elementi di $X$ -- ancora una volta, come accade nei polinomi.}. \\ + +Pertanto $\dim \Delta (X) = |X|$, se $|X| < \infty$, altrimenti $\dim \Delta (X) = \infty$. \\ + +L'interpretazione (e l'utilità) di questo spazio è facilmente spiegata: ogni elemento di +$\Delta (X)$ definisce in modo univoco un sottoinsieme di $X$ e l'operazione definita +altro non è che la differenza simmetrica $A \Delta B$ ricordata all'inizio della sezione. \\ + +In altri termini, dotando dell'insieme delle parti (i.e. dei sottoinsiemi) di $X$, detto +$\wp(X)$, dell'operazione differenza simmetrica per l'addizione e dell'operazione esistenza\footnote{$1 \cdot X = X$, $0 \cdot X = \varnothing$.} per il prodotto esterno, si può verificare che questo costituisce +uno spazio vettoriale su $\FF$ isomorfo a $\Delta (X)$ nel caso in cui $X$ sia un insieme finito\footnote{L'isomorfismo impiegato nella dimostrazione difatti non è definito per i sottoinsiemi infiniti -- dopotutto, se $|X| = \infty$, $\Delta (X)$ è un insieme numerabile, mentre $\wp(X)$ non può esserlo.}. + +\begin{theorem} +$|X| < \infty \Rightarrow \wp(X) \cong \Delta (X)$ +\end{theorem} + +\begin{proof} +Per dimostrare che i due spazi sono isomorfi si costruisce un'applicazione lineare +bigettiva. Definiamo pertanto $\phi : \wp(X) \to \Delta (X)$ in modo tale che: + +\[\phi(\{a_1, \, \ldots, \, a_n\}) = a_1 + \ldots + a_n\] + +Dimostriamo che $\phi$ è un'applicazione lineare, dimostrandone prima la linearità e poi +l'omogeneità. \\ + +Verifichiamo la linearità: +\[\begin{split} +&\phi (\{a_1, \, \ldots, \, a_n, \, b_{n+1}, \, \ldots, \, b_m \} \Delta \{a_1, \, \ldots, \, a_n, \, c_{n+1}, \, \ldots, \, c_k \}) = \\ +&\;\;\;= \phi (\{ b_{n+1}, \, \ldots, \, b_m, \, c_{n+1}, \, \ldots, \, c_k \}) = \\ +&\;\;\;= b_{n+1} + \ldots + b_m + \ldots + c_{n+1} + \ldots + c_k = \\ +&\;\;\;= (a_1 + \ldots + b_{n+1} + \ldots + b_m) + (a_1 + \ldots + c_{n+1} + \ldots + c_k) = \\ +&\;\;\;= \phi (\{a_1, \, \ldots, \, a_n, \, b_{n+1}, \ldots, \, b_m \}) + \phi (\{a_1, \, \ldots, \, a_n, \, c_{n+1}, \ldots, \, c_k \}). +\end{split}\] + +E l'omogeneità con $1$: +\[\phi (1 \cdot \{a_1, \, \ldots, \, a_n \}) = \phi (\{a_1, \, \ldots, \, a_n \}) = 1 \cdot \phi (\{a_1, \, \ldots, \, a_n \}).\] + +Ed infine con $0$: + +\[\phi (0 \cdot \{a_1, \, \ldots, \, a_n \}) = \phi (\varnothing) = 0 = 0 \cdot \phi (\{a_1, \, \ldots, \, a_n \}).\] + +Questa applicazione è iniettiva, dal momento che $\operatorname{Ker}\phi = \{\varnothing\}$. +Inoltre $\phi$ è surgettiva, dal momento che una controimmagine di un elemento $d$ di $\Delta (X)$ è l'insieme delle parti letterali di $d$. \\ + +Poiché bigettiva, tale applicazione è un isomorfismo. + +\end{proof} + +\section{Note ed esercizi} + +In realtà, è possibile costruire un'infinità di spazi su $X$ mantenendo le stesse operazioni, ma variando il campo su cui esso +è costruito. Un caso speciale, che merita una +menzione onorevole, è proprio $X = \{1, \, x, \, x^2, \, \ldots\}$ costruito su $\mathbb{R}$ (o un qualsiasi +$\mathbb{K}$ campo), che dà vita allo spazio dei polinomi, detto $\mathbb{R}[x]$ (o +$\mathbb{K}[x]$). + +\begin{exercise} +Si esibisca un controesempio per la dimostrazione dell'isomorfismo nel caso infinito. +\end{exercise} + +\begin{exercise} +Si dimostri che, se $X$ è finito, anche $\{ x_1, \, x_1+x_2, \, \ldots, \, \sum_{i=1}^{|X|} x_i \}$ con $x_i$ elementi distinti +di $X$ è una base di $\Delta (X)$. +\end{exercise} + +\begin{exercise} +Dopo aver mostrato che $\{ 1, \, x, \, x^2 \, , \, \ldots\}$ è una base di $\mathbb{R}[x]$\footnote{Questa particolare base è detta \textit{base standard} di $\mathbb{R}[x]$.}, +si dimostri che anche $\{ \sum_{i=0}^{j} x^i \mid j \in \mathbb{N}, \, j \geq 0 \}$, con $x^0 = 1$, lo è. +\end{exercise} + +\end{document} diff --git a/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.pdf b/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.pdf new file mode 100644 index 0000000..116aba8 Binary files /dev/null and b/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.pdf differ diff --git a/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.tex b/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.tex new file mode 100644 index 0000000..e910454 --- /dev/null +++ b/Geometria/Articoli/2. V e il suo duale a confronto/spazio_duale.tex @@ -0,0 +1,231 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage[italian]{babel} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsopn} +\usepackage{mathtools} +\usepackage{marvosym} + +\newcommand{\dual}[1]{#1^{*}} + +\title{$V$ e $\dual V$ a confronto} +\author{Gabriel Antonio Videtta} +\date{\today} + +\DeclareMathOperator{\tr}{tr} +\DeclareMathOperator{\Ker}{Ker} +\DeclareMathOperator{\Imm}{Im} + +\setlength\parindent{0pt} + +\begin{document} + +\maketitle + +\newcommand{\BB}{\mathcal{B}} +\newcommand{\FF}{\mathbb{F}_2} +\newcommand{\NN}{\mathbb{N}} +\newcommand{\ZZ}{\mathbb{Z}} +\newcommand{\KK}{\mathbb{K}} +\newcommand{\LL}[2]{\mathcal{L} \left(#1, \, #2\right)} + +\newcommand{\MM}[2]{\mathcal{M}_{#1 \times #2}\left(\KK\right)} +\newcommand{\M}[1]{\mathcal{M}_{#1}\left(\KK\right)} +\newcommand{\Mbb}[3]{\mathcal{M}^{#1}_{#2} \left( #3 \right)} +\newcommand{\Mb}[2]{\mathcal{M}^{#1}_{#2}} + +\theoremstyle{definition} +\newtheorem{definition}{Definizione}[section] + +\renewcommand{\vec}[1]{\underline{#1}} + +\newtheorem{example}{Esempio}[section] +\newtheorem{exercise}{Esercizio}[section] +\newtheorem{theorem}{Teorema}[section] +\newtheorem{proposition}{Proposizione}[section] +\newtheorem{corollary}{Corollario}[section] + +\tableofcontents + +\section{Premessa e motivazione} + +Lo studio delle applicazioni lineari è riconosciuto come uno +degli aspetti fondamentali della geometria contemporanea. Non è +infatti una mera coincidenza che nella maggior parte delle +applicazioni impiegate nello studio dei sistemi lineari si +riconoscano proprietà che sono proprie delle applicazioni lineari. \\ + +Uno dei primi esempi importanti di applicazione lineare è +quello della funzione traccia $\tr : \M{n} \to \KK$, che +associa a una matrice quadrata la somma degli elementi della +diagonale principale. Un altro esempio è quello del determinante +$\det : \left(\KK^{n}\right)^n \to \KK$, un'applicazione che generalizza +il concetto di linearità a più argomenti. Si parla infatti in +questo caso di un'applicazione multilineare. \\ + +In ogni caso, queste due importanti applicazioni sono +accomunate dallo spazio di arrivo, il campo $\KK$, sul +quale si fonda lo spazio di partenza. Per approfondire lo +studio di questo tipo di applicazioni, si introduce +pertanto il concetto di \textbf{spazio duale}. + +\section{Lo spazio duale e le sue proprietà} + +\begin{definition} +Si dice \textbf{spazio duale} di uno spazio vettoriale $V$ +lo spazio delle applicazioni lineari $\LL{V}{\KK}$, indicato con $\dual V$. +\end{definition} + +\subsection{Il caso finito} + +Prima di dedurre la dimensione e una base ``naturale'' di +$\dual V$, introduciamo il seguente teorema, che mette +in correlazione due spazi apparentemente scollegati. + +\vskip 10pt + +\begin{theorem} Siano $V$ e $W$ due spazi vettoriali di dimensione finita su $\KK$, e siano $\dim V = n \in \NN$, $\dim W = m \in \NN$. Allora $\LL{V}{W} \cong \MM{m}{n}$. +\label{isom} +\end{theorem} + +\begin{proof} +Siano $\BB = \left(\vec v_1, \, \dots, \, \vec v_n\right)$ e +$\BB' = \left(\vec w_1, \, \dots, \, \vec w_m\right)$ +basi ordinate rispettivamente di $V$ e di $W$. \\ + +Si considera l'applicazione lineare +$\Mb{\BB}{\BB'} : \LL{V}{W} \to \MM{m}{n}$, che +associa ad ogni applicazione lineare la sua matrice di +cambiamento di base. \\ + +Tale applicazione è iniettiva, dal momento che l'unica +applicazione a cui è associata la matrice nulla è l'applicazione +che associa ad ogni vettore lo zero di $W$. \\ + +Inoltre, $\Mb{\BB}{\BB'}$ è surgettiva, poiché data una +matrice $\mathbf{m} \in \MM{m}{n}$ si può costruire l'applicazione +$\phi : V \to W$ t.c. $\left[ \phi \left( v_i \right) \right]_{\BB'} = \mathbf{m}^i \; \forall \, i \in \NN \mid 1 \leq i \leq n$. \\ + +Dal momento che $\Mb{\BB}{\BB'}$ è sia iniettiva che +surgettiva, tale applicazione è bigettiva, e quindi +un isomorfismo. +\end{proof} + +\vskip 10pt + +\begin{corollary} +Sia $V$ uno spazio vettoriale di dimensione finita su $\KK$. +Allora $\dim V = \dim \dual V$. +\label{isom2} +\end{corollary} + +\begin{proof} +Dal \textit{Teorema \ref{isom}} si deduce che +$\dim \dual V = \dim \LL{V}{\KK} = \dim \KK \cdot \dim V = +\dim V$. +\end{proof} + +\vskip 10pt + +\begin{corollary} +Sia $V$ uno spazio vettoriale di dimensione finita su $\KK$. +Allora $V \cong \dual V$. +\label{isom3} +\end{corollary} + +\begin{proof} +Poiché $V$ è di dimensione finita, la dimostrazione segue dal +\textit{Corollario \ref{isom2}}, dal momento che +$\dim V = \dim \dual V \iff V \cong \dual V$. +\end{proof} + +\begin{proof}[Dimostrazione alternativa.] +Sia $\dim V = n \in N$ e sia $\BB = \left(\vec v_1, \, \dots, \, \vec v_n\right)$ una base ordinata di $V$. \\ + +Si costruisce un'applicazione $\phi : V \to \dual V$ che, +detto $\vec v = \sum_{i=0}^{n} \alpha_i \, \vec v_i$ con +$\alpha_i \in \KK \; \forall \, i \in \NN \mid 1 \leq i \leq n$, sia tale che: + +\[\phi(\vec v) = \sum_{i=0}^{n} \alpha_i \, \vec v_i^{*}\] + +con $\vec v_i^{*}$ costruito nel seguente modo\footnote{Si sarebbe potuto +semplificare la grafia introducendo la notazione del \textit{delta di Dirac}, ossia $\delta_{ij}$. Si è +tuttavia preferito esplicitare la definizione del funzionale.}: + +\[\vec v_{i}^*\left(\vec v_j\right) = \begin{cases}1 & \text{se } i = j \\ 0 & \text{altrimenti} \end{cases}\] + +L'applicazione $\phi$ è chiaramente lineare. Poiché i vari +$\vec v_i^{*}$ sono linearmente indipendenti, segue che +$\Ker \phi = \{\vec 0\}$, e quindi che $\phi$ è iniettiva. \\ + +Sia $\xi \in \dual V$. Allora $\xi \left( \vec v \right) = +\sum_{i=1}^{n} \alpha_i \, \xi(\vec v_i) = +\sum_{i=1}^{n} \vec v_i^{*} \left( \vec v \right) \xi(\vec v_i) \, $. Quindi $\xi = \sum_{i=1}^n \xi(\vec v_i) \, \vec v_i^{*}$. +Detto $\vec u = \sum_{i=1}^n \xi \left( \vec v_i \right) \vec v_i$, si verifica che $\phi \left( \vec u \right) = \xi$. +Pertanto $\phi$ è surgettiva\footnote{Alternativamente, per il teorema del rango, $\dim V$ = $\dim \Imm \phi + \underbrace{\dim \Ker \phi}_{=\,0} = \dim \Imm \phi \implies \dim \Imm \phi = \dim V = \dim \dual V \implies \Imm \phi = \dual V$, ossia che $\phi$ è surgettiva.}. \\ + +Poiché iniettiva e surgettiva, $\phi$ è bigettiva, e pertanto +un isomorfismo. + +\end{proof} + +\vskip 10pt + +\begin{corollary} Sia $V$ uno spazio vettoriale di dimensione +finita su $\KK$, con $\dim V = n \in \NN$. +L'insieme $\dual \BB = \left( \vec v_i^{*} \right)_{i=1\to n}$ è una base di $\dual V$. +\end{corollary} + +\begin{proof} +Dal \textit{Corollario \ref{isom3}} si desume che la dimensione +di $\dual V$ è esattamente $n$. Poiché $\dual \BB$ è un insieme +linearmente indipendente di $n$ elementi, si conclude +che è una base di $\dual V$. +\end{proof} + +\subsection{Il caso infinito} + +Le dimostrazioni presentate precdentemente non prendono in considerazione +il caso degli spazi vettoriali di dimensione infinita; +ciononostante vale in particolare un risultato correlato: + +\vskip 10pt + +\begin{theorem} Sia $V$ uno spazio vettoriale su $\KK$. +$\dim V = \infty \iff \dim \dual V = \infty$\footnote{Ciò +tuttavia non implica che $V$ e $\dual V$ siano equipotenti se di dimensione infinita; al contrario, $| \dual V | > |V|$.}. +\end{theorem} + +\begin{proof} +Se $\dual V$ è di dimensione infinita, anche $V$ deve esserlo +necessariamente, altrimenti, per il \textit{Teorema \ref{isom}} +dovrebbe esserlo anche $\dual V$. \\ + +Sia allora $V$ di dimensione infinita e sia $A_i$ una famiglia +di indici che enumeri $i$ elementi della base di $V$. + +Si consideri l'insieme linearmente indipendente $I_n = \{\vec v_{\alpha}^* \}_{\alpha \in A_n}$ con\footnote{Ancora una volta +questa definizione ricalca il delta di Dirac.}: + +\[\vec v_{\alpha}^*\left(\vec v_{\beta}\right) = \begin{cases}1 & \text{se } \alpha = \beta \\ 0 & \text{altrimenti} \end{cases}\] + +Si assuma l'esistenza di una base $\BB$ di $\dual V$ di +cardinalità finita, e sia $| \BB | = n \in \NN$. Ogni insieme $P \subset V$ linearmente indipendente è t.c. $|P| \leq n$. +Tuttavia $|I_{n+1}|=n+1>n$, \Lightning. + +\end{proof} + +\section{Esercizi} + +\begin{exercise} +Si dimostri che l'insieme $I_n$ è linearmente indipendente in $\dual V$, dato $V$ spazio vettoriale di dimensione infinita. +\end{exercise} + +\begin{exercise} +Dato $V$ uno spazio vettoriale di dimensione finita, si esibisca +una base per $\dual {\left( \dual V \right)} = \LL{\LL{V}{ \KK}}{\KK}$, il cosiddetto \textbf{spazio biduale}. +\end{exercise} + +\end{document} diff --git a/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.html b/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.html new file mode 100644 index 0000000..0157601 --- /dev/null +++ b/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.html @@ -0,0 +1,13943 @@ + + + + +Algoritmo di estrazione della forma canonica di Jordan + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

Algoritmo di estrazione della forma canonica di Jordan

+
+
+
+
+
+
+

Lo scopo di questo notebook è illustrare un breve e semplice algoritmo di estrazione della forma canonica di Jordan di una matrice $A \in M(n, \mathbb{C})$ qualsiasi. Si ricorda che la forma canonica di Jordan è un invariante completo per similitudine +di una matrice e che è una matrice a blocchi diagonale composta da più blocchi, detti per l'appunto di Jordan, della seguente forma:

+$$ J_{\lambda, m} = \begin{bmatrix} +\lambda & 1 & \; & \; \\ +\; & \lambda & \ddots & \; \\ +\; & \; & \ddots & 1 \\ +\; & \; & \; & \lambda +\end{bmatrix} \in M(m, \mathbb{C}). $$

Innanzitutto si sceglie un $n \in \mathbb{N}^+$ che rappresenta la taglia della matrice quadrata data in esame all'algoritmo e si crea la matrice $I = I_n$, ossia la matrice identità di taglia $n$.

+ +
+
+
+
+
+
In [35]:
+
+
+
%display latex
+from IPython.display import display, Markdown, Latex
+
+n = 10
+I = matrix.identity(n)
+
+ +
+
+
+ +
+
+
+
+

Si definisce adesso una funzione $\operatorname{jordan}(A)$ che prende in ingresso una matrice $A \in M(n, \mathbb{C})$ senza restituire alcun risultato. Tale funzione illustra passo passo in output l'algoritmo di estrazione della forma canonica di Jordan della matrice $A$ nei seguenti passi:

+
    +
  • Calcola il polinomio caratteristico $p_A(x)$ di $A$ e lo fattorizza;
  • +
  • Ne deduce lo spettro $\operatorname{sp}(A)$ e si riduce a studiare i blocchi relativi a ciascun autovalore;
  • +
  • Per ogni autovalore $\lambda$, calcola le dimensioni dei kernel delle potenze di $B = A - \lambda I$ fino a che non viene raggiunta la molteplicità algebrica di $\lambda$;
  • +
  • Infine, per l'autovalore $\lambda$, calcola il numero di blocchi $b_i$ di taglia $i$ secondo la formula $b_i = 2 \dim \ker B^i - \dim \ker B^{i-1} - \dim \ker B^{i+1}$;
  • +
  • Compone tutti i blocchi in una matrice a blocchi diagonale, ossia la forma canonica di Jordan.
  • +
+ +
+
+
+
+
+
In [58]:
+
+
+
def jordan(A):
+    display(Latex(r"Innanzitutto, si calcola il polinomio caratteristico di $A$, che risulta essere $p_A(x) = " + latex(factor(charpoly(A)(SR('x')))) + "$."))
+    eig = set(A.eigenvalues())
+    sp = ", ".join(map(latex, eig))
+
+    display(Latex(r"Allora, calcolandone le radici, si ricava $\operatorname{sp}(A) = \{" + sp + r"\}$."))
+    display(Markdown("---"))
+
+    Js = []
+
+    for i, t in enumerate(eig, start=1):
+        B = A - t*I
+        r = rank(B)
+        k = n - r
+
+        display(Latex(f"({i}) " + r"Consideriamo $\lambda = " + latex(t) + r"$ e $B=A-\lambda I=" + latex(B) + r".$"))
+        display(Latex(r"$B$ ha rango $" + str(r) + r"$ e quindi $\mu_g(\lambda) = " + str(k) + r"$."))
+
+        if k == 1:
+            display(Latex(r"Allora a $\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan."))
+        else:
+            display(Latex(r"Allora a $\lambda$ saranno dedicati esattamente $" + str(k) + "$ blocchi nella forma canonica di Jordan."))
+
+        K = [k]
+        k_1 = k
+        k_2 = n-rank(B^2)
+
+        i = 3
+        while k_1 != k_2:
+            K.append(k_2)
+            k_1 = k_2
+            k_2 = n-rank(B^i)
+            i += 1
+
+        display(Latex(r"Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\mu_a(\lambda) = " + str(K[-1]) + "$:"))
+
+        for i, k in enumerate(K, start=1):
+            if i == 1:
+                if i == len(K):
+                    display(Latex(r"‎ ‎ ‎ ‎ • $\dim \ker B = " + str(k) + "$."))
+                else:
+                    display(Latex(r"‎ ‎ ‎ ‎ • $\dim \ker B = " + str(k) + "$;"))
+            else:
+                if i == len(K):
+                    display(Latex(r"‎ ‎ ‎ ‎ • $\dim \ker B^" + str(i) + r" = " + str(k) + "$."))
+                else:
+                    display(Latex(r"‎ ‎ ‎ ‎ • $\dim \ker B^" + str(i) + r" = " + str(k) + "$;"))
+
+        display(Latex(r"Pertanto a $\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$):"))
+
+        b = {}
+
+        for i, k in enumerate(K, start=1):
+            if i == len(K):
+                if i == 2:
+                    b[i] = k - K[0]
+                    display(Latex(r"‎ ‎ ‎ ‎ • $b_2 = \dim \ker B^2 - \dim \ker B = " + str(b[i]) + "$."))
+                elif i == 1:
+                    b[i] = k
+                    display(Latex(r"‎ ‎ ‎ ‎ • $b_1 = \dim \ker B = " + str(b[i]) + "$."))
+                else:
+                    b[i] = k - K[i-2]
+                    display(Latex(r"‎ ‎ ‎ ‎ • $b_" + str(i) + r" = \dim \ker B^" + str(i) + r" - \dim \ker B^" + str(i-1) + " = " + str(b[i]) + "$."))
+            elif i == 1:
+                b[i] = 2*k - K[1]
+                display(Latex(r"‎ ‎ ‎ ‎ • $b_1 = 2 \dim \ker B - \dim \ker B^2 = " + str(b[i]) + "$;"))
+            else:
+                if i != 2:
+                    b[i] = 2*k - K[i-2] - K[i]
+                    display(Latex(r"‎ ‎ ‎ ‎ • $b_" + str(i) + r" = 2 \dim \ker B^" + str(i) + r" - \dim \ker B^" + str(i-1) + r" - \dim \ker B^" + str(i+1) + " = " + str(b[i]) + "$;"))
+                else:
+                    b[i] = 2*k - K[0] - K[2]
+                    display(Latex(r"‎ ‎ ‎ ‎ • $b_" + str(i) + r" = 2 \dim \ker B^2 - \dim \ker B - \dim \ker B^3 = " + str(b[i]) + "$;"))
+        
+        JBs = [jordan_block(t, N) for N, j in b.items() for _ in range(j)]
+        Js.extend(JBs)
+        
+        display(Latex(r"Allora l'insieme di tutti i blocchi relativi a $\lambda$ sarà rappresentato dalla seguente matrice: $J_{\lambda} = " + latex(block_diagonal_matrix(JBs)) + "$."))
+        display(Markdown("---"))
+            
+    JNF = block_diagonal_matrix(Js)
+    
+    display(Latex(r"La forma canonica di Jordan di $A$ sarà allora $J = " + latex(JNF) + "$."))
+
+ +
+
+
+ +
+
+
+
+

Si sceglie adesso una matrice $A \in M(n, \mathbb{C})$ di cui si vuole calcolare la forma canonica di Jordan.

+ +
+
+
+
+
+
In [59]:
+
+
+
# A deve avere esattamente n^2 elementi, essendo n x n...
+A = matrix(SR, n, [1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3])
+A
+
+ +
+
+
+ +
+
+ + +
+ +
Out[59]:
+ + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Si calcola infine la forma canonica di Jordan della matrice $A$ mediante la funzione $\operatorname{jordan}$.

+ +
+
+
+
+
+
In [60]:
+
+
+
jordan(A)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Innanzitutto, si calcola il polinomio caratteristico di $A$, che risulta essere $p_A(x) = {\left(x - 1\right)}^{4} {\left(x - 2\right)}^{3} {\left(x - 3\right)}^{3} $. +
+ +
+ +
+ +
+ + + + +
+Allora, calcolandone le radici, si ricava $\operatorname{sp}(A) = \{1, 2, 3\}$. +
+ +
+ +
+ +
+ + + +
+
+ +
+ +
+ +
+ +
+ + + + +
+(1) Consideriamo $\lambda = 1 $ e $B=A-\lambda I= \left(\begin{array}{rrrrrrrrrr} +0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 +\end{array}\right) .$ +
+ +
+ +
+ +
+ + + + +
+$B$ ha rango $9$ e quindi $\mu_g(\lambda) = 1$. +
+ +
+ +
+ +
+ + + + +
+Allora a $\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan. +
+ +
+ +
+ +
+ + + + +
+Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\mu_a(\lambda) = 4$: +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B = 1$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^2 = 2$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^3 = 3$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^4 = 4$. +
+ +
+ +
+ +
+ + + + +
+Pertanto a $\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$): +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_1 = 2 \dim \ker B - \dim \ker B^2 = 0$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_2 = 2 \dim \ker B^2 - \dim \ker B - \dim \ker B^3 = 0$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_3 = 2 \dim \ker B^3 - \dim \ker B^2 - \dim \ker B^4 = 0$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_4 = \dim \ker B^4 - \dim \ker B^3 = 1$. +
+ +
+ +
+ +
+ + + + +
+Allora l'insieme di tutti i blocchi relativi a $\lambda$ sarà rappresentato dalla seguente matrice: $J_{\lambda} = \left(\begin{array}{rrrr} +1 & 1 & 0 & 0 \\ +0 & 1 & 1 & 0 \\ +0 & 0 & 1 & 1 \\ +0 & 0 & 0 & 1 +\end{array}\right) $. +
+ +
+ +
+ +
+ + + +
+
+ +
+ +
+ +
+ +
+ + + + +
+(2) Consideriamo $\lambda = 2 $ e $B=A-\lambda I= \left(\begin{array}{rrrrrrrrrr} +-1 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & -1 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & -1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & -1 & 1 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 +\end{array}\right) .$ +
+ +
+ +
+ +
+ + + + +
+$B$ ha rango $8$ e quindi $\mu_g(\lambda) = 2$. +
+ +
+ +
+ +
+ + + + +
+Allora a $\lambda$ saranno dedicati esattamente $2$ blocchi nella forma canonica di Jordan. +
+ +
+ +
+ +
+ + + + +
+Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\mu_a(\lambda) = 3$: +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B = 2$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^2 = 3$. +
+ +
+ +
+ +
+ + + + +
+Pertanto a $\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$): +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_1 = 2 \dim \ker B - \dim \ker B^2 = 1$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_2 = \dim \ker B^2 - \dim \ker B = 1$. +
+ +
+ +
+ +
+ + + + +
+Allora l'insieme di tutti i blocchi relativi a $\lambda$ sarà rappresentato dalla seguente matrice: $J_{\lambda} = \left(\begin{array}{r|rr} +2 & 0 & 0 \\ +\hline + 0 & 2 & 1 \\ +0 & 0 & 2 +\end{array}\right) $. +
+ +
+ +
+ +
+ + + +
+
+ +
+ +
+ +
+ +
+ + + + +
+(3) Consideriamo $\lambda = 3 $ e $B=A-\lambda I= \left(\begin{array}{rrrrrrrrrr} +-2 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & -2 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & -2 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & -2 & 1 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & -1 & 0 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & -1 & 1 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & -1 & 1 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 +\end{array}\right) .$ +
+ +
+ +
+ +
+ + + + +
+$B$ ha rango $9$ e quindi $\mu_g(\lambda) = 1$. +
+ +
+ +
+ +
+ + + + +
+Allora a $\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan. +
+ +
+ +
+ +
+ + + + +
+Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\mu_a(\lambda) = 3$: +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B = 1$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^2 = 2$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $\dim \ker B^3 = 3$. +
+ +
+ +
+ +
+ + + + +
+Pertanto a $\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$): +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_1 = 2 \dim \ker B - \dim \ker B^2 = 0$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_2 = 2 \dim \ker B^2 - \dim \ker B - \dim \ker B^3 = 0$; +
+ +
+ +
+ +
+ + + + +
+‎ ‎ ‎ ‎ • $b_3 = \dim \ker B^3 - \dim \ker B^2 = 1$. +
+ +
+ +
+ +
+ + + + +
+Allora l'insieme di tutti i blocchi relativi a $\lambda$ sarà rappresentato dalla seguente matrice: $J_{\lambda} = \left(\begin{array}{rrr} +3 & 1 & 0 \\ +0 & 3 & 1 \\ +0 & 0 & 3 +\end{array}\right) $. +
+ +
+ +
+ +
+ + + +
+
+ +
+ +
+ +
+ +
+ + + + +
+La forma canonica di Jordan di $A$ sarà allora $J = \left(\begin{array}{rrrr|r|rr|rrr} +1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ +0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ +0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ +\hline + 0 & 0 & 0 & 0 & 2 & 0 & 0 & 0 & 0 & 0 \\ +\hline + 0 & 0 & 0 & 0 & 0 & 2 & 1 & 0 & 0 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 2 & 0 & 0 & 0 \\ +\hline + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 & 0 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 \\ +0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 +\end{array}\right) $. +
+ +
+ +
+
+ +
+
+
+
+
+

(c) 2023, ~videtta

+ +
+
+
+
+
+ + + + + + diff --git a/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.ipynb b/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.ipynb new file mode 100644 index 0000000..6b07c9a --- /dev/null +++ b/Geometria/Notebook/1. Forma canonica di Jordan/Algoritmo di estrazione della forma canonica di Jordan.ipynb @@ -0,0 +1,840 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Algoritmo di estrazione della forma canonica di Jordan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lo scopo di questo notebook è illustrare un breve e semplice algoritmo di estrazione della forma canonica di Jordan di una matrice $A \\in M(n, \\mathbb{C})$ qualsiasi. Si ricorda che la forma canonica di Jordan è un invariante completo per similitudine\n", + "di una matrice e che è una matrice a blocchi diagonale composta da più blocchi, detti per l'appunto di Jordan, della seguente forma:\n", + "\n", + "$$ J_{\\lambda, m} = \\begin{bmatrix}\n", + "\\lambda & 1 & \\; & \\; \\\\\n", + "\\; & \\lambda & \\ddots & \\; \\\\\n", + "\\; & \\; & \\ddots & 1 \\\\\n", + "\\; & \\; & \\; & \\lambda \n", + "\\end{bmatrix} \\in M(m, \\mathbb{C}). $$\n", + "\n", + "Innanzitutto si sceglie un $n \\in \\mathbb{N}^+$ che rappresenta la taglia della matrice quadrata data in esame all'algoritmo e si crea la matrice $I = I_n$, ossia la matrice identità di taglia $n$." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "%display latex\n", + "from IPython.display import display, Markdown, Latex\n", + "\n", + "n = 10\n", + "I = matrix.identity(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si definisce adesso una funzione $\\operatorname{jordan}(A)$ che prende in ingresso una matrice $A \\in M(n, \\mathbb{C})$ senza restituire alcun risultato. Tale funzione illustra passo passo in output l'algoritmo di estrazione della forma canonica di Jordan della matrice $A$ nei seguenti passi:\n", + "\n", + " - Calcola il polinomio caratteristico $p_A(x)$ di $A$ e lo fattorizza;\n", + " - Ne deduce lo spettro $\\operatorname{sp}(A)$ e si riduce a studiare i blocchi relativi a ciascun autovalore;\n", + " - Per ogni autovalore $\\lambda$, calcola le dimensioni dei kernel delle potenze di $B = A - \\lambda I$ fino a che non viene raggiunta la molteplicità algebrica di $\\lambda$;\n", + " - Infine, per l'autovalore $\\lambda$, calcola il numero di blocchi $b_i$ di taglia $i$ secondo la formula $b_i = 2 \\dim \\ker B^i - \\dim \\ker B^{i-1} - \\dim \\ker B^{i+1}$;\n", + " - Compone tutti i blocchi in una matrice a blocchi diagonale, ossia la forma canonica di Jordan." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "def jordan(A):\n", + " display(Latex(r\"Innanzitutto, si calcola il polinomio caratteristico di $A$, che risulta essere $p_A(x) = \" + latex(factor(charpoly(A)(SR('x')))) + \"$.\"))\n", + " eig = set(A.eigenvalues())\n", + " sp = \", \".join(map(latex, eig))\n", + "\n", + " display(Latex(r\"Allora, calcolandone le radici, si ricava $\\operatorname{sp}(A) = \\{\" + sp + r\"\\}$.\"))\n", + " display(Markdown(\"---\"))\n", + "\n", + " Js = []\n", + "\n", + " for i, t in enumerate(eig, start=1):\n", + " B = A - t*I\n", + " r = rank(B)\n", + " k = n - r\n", + "\n", + " display(Latex(f\"({i}) \" + r\"Consideriamo $\\lambda = \" + latex(t) + r\"$ e $B=A-\\lambda I=\" + latex(B) + r\".$\"))\n", + " display(Latex(r\"$B$ ha rango $\" + str(r) + r\"$ e quindi $\\mu_g(\\lambda) = \" + str(k) + r\"$.\"))\n", + "\n", + " if k == 1:\n", + " display(Latex(r\"Allora a $\\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan.\"))\n", + " else:\n", + " display(Latex(r\"Allora a $\\lambda$ saranno dedicati esattamente $\" + str(k) + \"$ blocchi nella forma canonica di Jordan.\"))\n", + "\n", + " K = [k]\n", + " k_1 = k\n", + " k_2 = n-rank(B^2)\n", + "\n", + " i = 3\n", + " while k_1 != k_2:\n", + " K.append(k_2)\n", + " k_1 = k_2\n", + " k_2 = n-rank(B^i)\n", + " i += 1\n", + "\n", + " display(Latex(r\"Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\\mu_a(\\lambda) = \" + str(K[-1]) + \"$:\"))\n", + "\n", + " for i, k in enumerate(K, start=1):\n", + " if i == 1:\n", + " if i == len(K):\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $\\dim \\ker B = \" + str(k) + \"$.\"))\n", + " else:\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $\\dim \\ker B = \" + str(k) + \"$;\"))\n", + " else:\n", + " if i == len(K):\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $\\dim \\ker B^\" + str(i) + r\" = \" + str(k) + \"$.\"))\n", + " else:\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $\\dim \\ker B^\" + str(i) + r\" = \" + str(k) + \"$;\"))\n", + "\n", + " display(Latex(r\"Pertanto a $\\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$):\"))\n", + "\n", + " b = {}\n", + "\n", + " for i, k in enumerate(K, start=1):\n", + " if i == len(K):\n", + " if i == 2:\n", + " b[i] = k - K[0]\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_2 = \\dim \\ker B^2 - \\dim \\ker B = \" + str(b[i]) + \"$.\"))\n", + " elif i == 1:\n", + " b[i] = k\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_1 = \\dim \\ker B = \" + str(b[i]) + \"$.\"))\n", + " else:\n", + " b[i] = k - K[i-2]\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_\" + str(i) + r\" = \\dim \\ker B^\" + str(i) + r\" - \\dim \\ker B^\" + str(i-1) + \" = \" + str(b[i]) + \"$.\"))\n", + " elif i == 1:\n", + " b[i] = 2*k - K[1]\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_1 = 2 \\dim \\ker B - \\dim \\ker B^2 = \" + str(b[i]) + \"$;\"))\n", + " else:\n", + " if i != 2:\n", + " b[i] = 2*k - K[i-2] - K[i]\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_\" + str(i) + r\" = 2 \\dim \\ker B^\" + str(i) + r\" - \\dim \\ker B^\" + str(i-1) + r\" - \\dim \\ker B^\" + str(i+1) + \" = \" + str(b[i]) + \"$;\"))\n", + " else:\n", + " b[i] = 2*k - K[0] - K[2]\n", + " display(Latex(r\"‎ ‎ ‎ ‎ • $b_\" + str(i) + r\" = 2 \\dim \\ker B^2 - \\dim \\ker B - \\dim \\ker B^3 = \" + str(b[i]) + \"$;\"))\n", + " \n", + " JBs = [jordan_block(t, N) for N, j in b.items() for _ in range(j)]\n", + " Js.extend(JBs)\n", + " \n", + " display(Latex(r\"Allora l'insieme di tutti i blocchi relativi a $\\lambda$ sarà rappresentato dalla seguente matrice: $J_{\\lambda} = \" + latex(block_diagonal_matrix(JBs)) + \"$.\"))\n", + " display(Markdown(\"---\"))\n", + " \n", + " JNF = block_diagonal_matrix(Js)\n", + " \n", + " display(Latex(r\"La forma canonica di Jordan di $A$ sarà allora $J = \" + latex(JNF) + \"$.\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si sceglie adesso una matrice $A \\in M(n, \\mathbb{C})$ di cui si vuole calcolare la forma canonica di Jordan." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/latex": [ + "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrrrrrrrrr}\n", + "1 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 1 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 1 & 1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 2 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 2 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3\n", + "\\end{array}\\right)$$" + ], + "text/plain": [ + "[1 1 0 0 0 0 1 0 1 0]\n", + "[0 1 1 0 0 0 1 0 1 0]\n", + "[0 0 1 1 0 0 1 0 1 0]\n", + "[0 0 0 1 1 0 1 0 1 0]\n", + "[0 0 0 0 2 0 1 0 1 0]\n", + "[0 0 0 0 0 2 1 0 1 0]\n", + "[0 0 0 0 0 0 2 1 1 0]\n", + "[0 0 0 0 0 0 0 3 1 0]\n", + "[0 0 0 0 0 0 0 0 3 1]\n", + "[0 0 0 0 0 0 0 0 0 3]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# A deve avere esattamente n^2 elementi, essendo n x n...\n", + "A = matrix(SR, n, [1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3])\n", + "A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si calcola infine la forma canonica di Jordan della matrice $A$ mediante la funzione $\\operatorname{jordan}$." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/latex": [ + "Innanzitutto, si calcola il polinomio caratteristico di $A$, che risulta essere $p_A(x) = {\\left(x - 1\\right)}^{4} {\\left(x - 2\\right)}^{3} {\\left(x - 3\\right)}^{3} $." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora, calcolandone le radici, si ricava $\\operatorname{sp}(A) = \\{1, 2, 3\\}$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "(1) Consideriamo $\\lambda = 1 $ e $B=A-\\lambda I= \\left(\\begin{array}{rrrrrrrrrr}\n", + "0 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2\n", + "\\end{array}\\right) .$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$B$ ha rango $9$ e quindi $\\mu_g(\\lambda) = 1$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora a $\\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\\mu_a(\\lambda) = 4$:" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B = 1$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^2 = 2$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^3 = 3$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^4 = 4$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Pertanto a $\\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$):" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_1 = 2 \\dim \\ker B - \\dim \\ker B^2 = 0$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_2 = 2 \\dim \\ker B^2 - \\dim \\ker B - \\dim \\ker B^3 = 0$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_3 = 2 \\dim \\ker B^3 - \\dim \\ker B^2 - \\dim \\ker B^4 = 0$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_4 = \\dim \\ker B^4 - \\dim \\ker B^3 = 1$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora l'insieme di tutti i blocchi relativi a $\\lambda$ sarà rappresentato dalla seguente matrice: $J_{\\lambda} = \\left(\\begin{array}{rrrr}\n", + "1 & 1 & 0 & 0 \\\\\n", + "0 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 1 & 1 \\\\\n", + "0 & 0 & 0 & 1\n", + "\\end{array}\\right) $." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "(2) Consideriamo $\\lambda = 2 $ e $B=A-\\lambda I= \\left(\\begin{array}{rrrrrrrrrr}\n", + "-1 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & -1 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & -1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & -1 & 1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\n", + "\\end{array}\\right) .$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$B$ ha rango $8$ e quindi $\\mu_g(\\lambda) = 2$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora a $\\lambda$ saranno dedicati esattamente $2$ blocchi nella forma canonica di Jordan." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\\mu_a(\\lambda) = 3$:" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B = 2$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^2 = 3$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Pertanto a $\\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$):" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_1 = 2 \\dim \\ker B - \\dim \\ker B^2 = 1$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_2 = \\dim \\ker B^2 - \\dim \\ker B = 1$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora l'insieme di tutti i blocchi relativi a $\\lambda$ sarà rappresentato dalla seguente matrice: $J_{\\lambda} = \\left(\\begin{array}{r|rr}\n", + "2 & 0 & 0 \\\\\n", + "\\hline\n", + " 0 & 2 & 1 \\\\\n", + "0 & 0 & 2\n", + "\\end{array}\\right) $." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "(3) Consideriamo $\\lambda = 3 $ e $B=A-\\lambda I= \\left(\\begin{array}{rrrrrrrrrr}\n", + "-2 & 1 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & -2 & 1 & 0 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & -2 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & -2 & 1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & -1 & 0 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & -1 & 1 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & -1 & 1 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\n", + "\\end{array}\\right) .$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$B$ ha rango $9$ e quindi $\\mu_g(\\lambda) = 1$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora a $\\lambda$ sarà dedicato esattamente un blocco nella forma canonica di Jordan." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Si calcolano adesso le dimensioni dei kernel fino a quando non viene raggiunta la molteplicità algebrica $\\mu_a(\\lambda) = 3$:" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B = 1$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^2 = 2$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $\\dim \\ker B^3 = 3$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Pertanto a $\\lambda$ sono assegnati i seguenti blocchi (dove $b_n$ indica il numero di blocchi di taglia $n$):" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_1 = 2 \\dim \\ker B - \\dim \\ker B^2 = 0$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_2 = 2 \\dim \\ker B^2 - \\dim \\ker B - \\dim \\ker B^3 = 0$;" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "‎ ‎ ‎ ‎ • $b_3 = \\dim \\ker B^3 - \\dim \\ker B^2 = 1$." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "Allora l'insieme di tutti i blocchi relativi a $\\lambda$ sarà rappresentato dalla seguente matrice: $J_{\\lambda} = \\left(\\begin{array}{rrr}\n", + "3 & 1 & 0 \\\\\n", + "0 & 3 & 1 \\\\\n", + "0 & 0 & 3\n", + "\\end{array}\\right) $." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "La forma canonica di Jordan di $A$ sarà allora $J = \\left(\\begin{array}{rrrr|r|rr|rrr}\n", + "1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\hline\n", + " 0 & 0 & 0 & 0 & 2 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "\\hline\n", + " 0 & 0 & 0 & 0 & 0 & 2 & 1 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 2 & 0 & 0 & 0 \\\\\n", + "\\hline\n", + " 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 1 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3\n", + "\\end{array}\\right) $." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "jordan(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***\n", + "(c) 2023, [~videtta](https://poisson.phc.dm.unipi.it/~videtta/)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "SageMath 9.3", + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..13ca539 --- /dev/null +++ b/LICENSE @@ -0,0 +1,156 @@ +Creative Commons Attribution 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/README.md b/README.md new file mode 100644 index 0000000..cb98037 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Raccolta di articoli e scritti 📝 + +Questo repository raccoglie tutti gli articoletti e tutti i notebook che ho scritto. Ogni cartella racchiude una materia differente, e a sua volta ogni materia è divisa in due sezioni, una dedicata agli scritti in [LaTeX](https://www.latex-project.org/) e una dedicata ai notebook creati su [SageMath](https://www.sagemath.org/). + +Sicuramente questi scritti non sono perfetti, e potrebbero dunque contenere alcuni errori. Nell'eventualità in cui vogliate segnalarmeli, potete farlo scrivendomi a g.videtta1@studenti.unipi.it, o aprendo un issue su questo repository. + +Riguardo la licenza con cui pubblico questi scritti, vale la stessa premessa che ho fatto per [i miei appunti](https://notes.hearot.it). + +Di seguito elenco gli strumenti che più utilizzo per scrivere i miei articoletti: + +- [TeXstudio](https://www.texstudio.org/) (assieme al foglio di stile che trovate sotto la cartella `tex` nel repository dei [miei appunti](https://notes.hearot.it)), +- [Overleaf](https://overleaf.com/), anche hostato dal [Dipartimento di Matematica](https://tex.dm.unipi.it) (spesso e volentieri solo per articoli coscritti).