diff --git a/out/presentation.pdf b/out/presentation.pdf index 8cc86e7..c08d912 100644 Binary files a/out/presentation.pdf and b/out/presentation.pdf differ diff --git a/src/presentation.typ b/src/presentation.typ index d6f506e..1475d2c 100644 --- a/src/presentation.typ +++ b/src/presentation.typ @@ -56,17 +56,19 @@ == Introduzione -*Def.* $X, Y$ spazi topologici, $f : X arrow Y$ continua è *embedding* se $X approx f(X) subset Y$. +// *Def.* $X, Y$ spazi topologici, $f : X arrow Y$ continua è *embedding* se $X approx f(X) subset Y$. -*Def.* $f : X arrow Y$ embedding, $p in X$ allora $f$ è *localmente piatto* in $p$ se esiste $U subset bb(R)^3$ intorno di $p$ tale che $U approx DD^2 times [0,1]$ e $U inter f(X) <-> {0} times [0, 1]$. +// *Def.* $f : X arrow Y$ embedding, $p in X$ allora $f$ è *localmente piatto* in $p$ se esiste $U subset bb(R)^3$ intorno di $p$ tale che $U approx DD^2 times [0,1]$ e $U inter f(X) <-> {0} times [0, 1]$. -\ +// \ *Def.* $K subset bb(R)^3$ è un *nodo (tame)* se esiste $f : bb(S)^1 arrow.hook bb(R)^3$ embedding loc. piatto con $K = f(bb(S)^1)$. *Def.* Possiamo generalizzare i nodi $bb(S)^1 arrow bb(R)^3$ a *link* sostituendo con $bb(S)^1 union.sq dots.c union.sq bb(S)^1 arrow bb(R)^3$. -== Isotopia Ambiente +\ + +#pause *Def.* $K_0, K_1 subset bb(R)^3$ sono *equivalenti* se esiste un'*isotopia ambiente* che porta uno nell'altro, ovvero esiste $H : bb(R)^3 times [0, 1] arrow bb(R)^3$ continua, tale che: @@ -86,7 +88,6 @@ e posta $H_t (x) colon.eq H(x, t)$ si ha: == Proiezioni e Diagrammi - *Fatto.* Sia $L subset bb(R)^3$ link poligonale, allora esiste un aperto denso $U subset bb(S)^2$ tale che $forall v in U$ e detta $pi_v : bb(R)^3 arrow v^perp$ la proiezione sul piano $v^perp$ come in figura, abbiamo che: #grid( @@ -113,7 +114,7 @@ e posta $H_t (x) colon.eq H(x, t)$ si ha: *Def.* Un *diagramma* $D subset bb(R)^2$ di un link $L subset bb(R)^3$ è l'immagine di $L$ attraverso una proiezione regolare decorata con l'informazione sopra/sotto ad ogni incrocio. #pad( - top: 0.5em, + top: 1em, grid( columns: (1fr, auto), gutter: 1em, @@ -147,6 +148,17 @@ e posta $H_t (x) colon.eq H(x, t)$ si ha: #figure(image("assets/whitney-trick.png", width: 100%)) +== Diagrammi in forma discendente + +#align(center)[ + Dato $K$ il *nodo banale standard* (o in _forma discendente_) associato è $hat(K)(cal(U), p)$: + + #v(1em) + + #image("assets/standard-unlink-construction.png", height: 8cm) +] + + == Comportamento Isotopia Regolare @@ -158,7 +170,7 @@ Ovvero un nodo in forma discendente è _equivalente_ ad uno composto solo da ric #pause -_Dim._ Consideriamo una successione di mosse $K = D_0 stretch(arrow) dots.c stretch(arrow) D_n = #skein.unit-medium$. +_Dim._ Consideriamo una successione di mosse $K = D_0 stretch(arrow) dots.c stretch(arrow) D_n = #skein.unit-large$. Modifichiamo le mosse nei seguenti casi: - Mosse di tipo I che rimuovono un ricciolo @@ -171,6 +183,8 @@ _Dim._ Consideriamo una successione di mosse $K = D_0 stretch(arrow) dots.c stre #figure(image("assets/modified-curl-add-before.png", width: 7% * 6.5)) +$ #rotate(90deg, $~>$) $ + #figure(image("assets/modified-curl-add-after.png", width: 7% * 13)) #align(center)[Mosse di tipo I che aggiungono un ricciolo] @@ -181,6 +195,8 @@ _Dim._ Consideriamo una successione di mosse $K = D_0 stretch(arrow) dots.c stre #figure(image("assets/modified-r2-before.png", width: 8% * 6.5)) +$ #rotate(90deg, $~>$) $ + #figure(image("assets/modified-r2-after.png", width: 8% * 8.5)) #align(center)[Mosse di tipo II, III] @@ -212,15 +228,15 @@ $ == Assiomi -*Def.* Sia $K$ un diagramma di un link non orientato, $L_K in bb(Z)[a, a^(-1), z, z^(-1)]$ e verifica: +*Def.* Sia $K$ un diagramma di un link _non orientato_, $L_K in bb(Z)[a, a^(-1), z, z^(-1)]$ e verifica: + +#set par(spacing: 1.5em) +#set enum(numbering: "i.a)", spacing: 1.5em) 1. $K tilde K' => L_K = L_K'$. 2. Valgono le seguenti relazioni: - #set par(spacing: 1.25em) - #set enum(numbering: "a)", spacing: 1.75em) - 1. $L[#skein.over-large] + L[#skein.under-large] = z (L[#skein.h-large] + L[#skein.v-large])$ 2. $L[#skein.unit-large] = 1$ @@ -231,7 +247,7 @@ $ #pause -\ +#v(0.5em) *Osservazione.* A questo punto non sappiamo se $L_K$ sia ben definito. @@ -239,42 +255,137 @@ $ #let knot-picture(src, ..rest) = $thin #image("assets/derived/atlas-" + src, ..rest) thin$ -#{ - set align(center) +// #show image: it => rect(stroke: 1pt + red, inset: 0pt, it) - grid( - columns: 1, - row-gutter: 1.5em, - column-gutter: 3em, - align: center + top, - [*Link $L[#skein.unit-large #skein.unit-large]$*], - $ - & L[ #knot-picture("infinity-0.png", height: 2.25em) ] - + - L[ #knot-picture("infinity-1.png", height: 2.25em) ] = - z ( - L[ #knot-picture("infinity-2.png", height: 2.25em) ] - + - L[ #knot-picture("infinity-3.png", height: 2.25em) ] - ) \ - #pause & => - a L[ #skein.unit-large ] +#slide(repeat: 5, self => [ + #let (alternatives,) = utils.methods(self) + #set align(center + top) + + #v(3em) + + #alternatives(position: center + top)[ + #grid( + columns: 1, + row-gutter: 1.5em, + column-gutter: 3em, + align: center, + [*Link $L[#skein.unit-large #skein.unit-large]$*], + ) + ][ + #grid( + columns: 1, + row-gutter: 1.5em, + column-gutter: 3em, + align: center, + [*Link $L[#skein.unit-large #skein.unit-large]$*], + $ + ( + space & #knot-picture("infinity-0.png", width: 1.075em) space, + space && #knot-picture("infinity-1.png", width: 1.075em) space, + space && #knot-picture("infinity-2.png", width: 1.075em) space, + space && #knot-picture("infinity-3.png", width: 1.075em) space + ) \ + text( + fill: #white, + L[ & thin #rect(width: 1.075em, height: 2.25em, stroke: none) thin ] + - a^(-1) L[ #skein.unit-large ] = - z ( - delta - + - L [ #skein.unit-large ] - ) \ - & => a + a^(-1) = z ( delta + 1 ) \ - & => delta = (a + 1 slash a) / z - 1 - $, - ) -} + L[ && thin #rect(width: 1.075em, height: 2.25em, stroke: none) thin ] = + z ( + L[ && thin #rect(width: 1.075em, height: 2.25em, stroke: none) thin ] + + + L[ && thin #rect(width: 1.075em, height: 2.25em, stroke: none) thin ] + ) + ) + $, + ) + ][ + #grid( + columns: 1, + row-gutter: 1.5em, + column-gutter: 3em, + align: center, + [*Link $L[#skein.unit-large #skein.unit-large]$*], + $ + & L[ #knot-picture("infinity-0.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-1.png", height: 2.25em) ] = + z ( + L[ #knot-picture("infinity-2.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-3.png", height: 2.25em) ] + ) + $, + ) + ][ + #grid( + columns: 1, + row-gutter: 1.5em, + column-gutter: 3em, + align: center, + [*Link $L[#skein.unit-large #skein.unit-large]$*], + $ + & L[ #knot-picture("infinity-0.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-1.png", height: 2.25em) ] = + z ( + L[ #knot-picture("infinity-2.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-3.png", height: 2.25em) ] + ) \ + pause & => + a L[ #skein.unit-large ] + + + a^(-1) L[ #skein.unit-large ] = + z ( + delta + + + L [ #skein.unit-large ] + ) \ + & => a + a^(-1) = z ( delta + 1 ) \ + & => delta = (a + 1 slash a) / z - 1 + $, + ) + ][ + #grid( + columns: 1, + row-gutter: 1.5em, + column-gutter: 3em, + align: center, + [*Link $L[#skein.unit-large #skein.unit-large]$*], + { + $ + & L[ #knot-picture("infinity-0.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-1.png", height: 2.25em) ] = + z ( + L[ #knot-picture("infinity-2.png", height: 2.25em) ] + + + L[ #knot-picture("infinity-3.png", height: 2.25em) ] + ) \ + #pause & => + a L[ #skein.unit-large ] + + + a^(-1) L[ #skein.unit-large ] = + z ( + delta + + + L [ #skein.unit-large ] + ) \ + & => a + a^(-1) = z ( delta + 1 ) \ + & => delta = (a + 1 slash a) / z - 1 + $ + + $ + ~> L[K_1 union.sq K_2] = delta L[K_1] L[K_2] + $ + }, + ) + ] +]) == Calcoli impliciti -#{ +#slide({ set align(center) show math.equation: set text(size: 15pt) @@ -331,24 +442,24 @@ $ -(2a + a^(-1)) + (1 + a^(-2)) z + (a + a^(-1)) z^2 $, ) -} +}) -== Invariante di isotopia ambiente associato +// == Invariante di isotopia ambiente associato -*Def.* Definiamo $F_K in bb(Z)[a, a^(-1), z, z^(-1)]$ per diagrammi di link orientati $K$ come -$ - F_K colon.eq a^(-w(K)) L_K -$ +// *Def.* Definiamo $F_K in bb(Z)[a, a^(-1), z, z^(-1)]$ per diagrammi di link orientati $K$ come +// $ +// F_K colon.eq a^(-w(K)) L_K +// $ -dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. +// dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. -*Prop.* Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente. +// *Prop.* Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente. == Considerazioni preliminari -*Def.* Sia $K$ un diagramma di un nodo, $p in K$ un punto di partenza direzionato e sia $lambda = (lambda_n, dots, lambda_0)$ una sequenza di etichette di incroci di $K$: +#slide({ + [*Def.* Sia $K$ un diagramma di un nodo, $p in K$ un punto di partenza direzionato e sia $lambda = (lambda_n, dots, lambda_0)$ una sequenza di etichette di incroci di $K$:] -#{ set align(center) v(1em) @@ -360,24 +471,38 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. align: center, { skein.over-large - place(center + top, dy: -0.25em, { + place(center + top, dy: -0.75em, { show math.equation: set text(size: 15pt) $i$ }) }, { skein.under-large - place(center + top, dy: -0.25em, { + place(center + top, dy: -0.75em, { + show math.equation: set text(size: 15pt) + $i$ + }) + }, + { + skein.h-large + place(center + top, dy: -0.75em, { + show math.equation: set text(size: 15pt) + $i$ + }) + }, + { + skein.v-large + place(center + top, dy: -0.75em, { show math.equation: set text(size: 15pt) $i$ }) }, - skein.h-large, - skein.v-large, $K$, $S_i K$, $E_i K$, $e_i K$, ) + pause + v(1em) $ @@ -386,12 +511,14 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. B_i^lambda colon.eq e_lambda_i S_lambda_(i-1) dots.c space S_lambda_0 $ + pause + v(1em) $ sum_K (lambda) colon.eq sum_(i=0)^n (-1)^i (L[A_i^lambda K] + L[B_i^lambda K]) $ -} +}) == Considerazioni preliminari @@ -399,23 +526,17 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. #slide( repeat: 5, - self => [ - - - #v(2em) - - #{ - set align(center) + self => { + let (only, uncover) = utils.methods(self) + set align(center) + { [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:] } - #v(1em) + v(1em) - - #let (only, uncover) = utils.methods(self) - - #only( + only( "1-3", $ & L[K] + L[S_0 K] = z( L[E_0 K] + L[e_0 K] ) \ @@ -425,7 +546,7 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. $, ) - #only( + only( 4, $ & L[K] + L[S_0 K] = z( L[E_0 K] + L[e_0 K] ) \ @@ -435,7 +556,7 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. $, ) - #only( + only( 5, $ & L[K] + cancel(L[S_0 K]) = z( L[E_0 K] + L[e_0 K] ) \ @@ -445,7 +566,7 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. $, ) - #{ + { set text(fill: white) v(1.5em) @@ -457,31 +578,14 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. L[E_i S_(i-1) dotss S_0 K] + L[e_i S_(i-1) dotss S_0 K] ) )$ - - - v(1.5em) - $ - Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda) - $ } - - ], + }, ) -#slide[ - - - #v(2em) - - #{ - set align(center) - - [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:] - } - - #v(1em) - +#slide({ + align(center, [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]) + v(1em) $ & L[K] + cancel(L[S_0 K]) = z( L[E_0 K] + L[e_0 K] ) \ @@ -490,42 +594,21 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. (-1)^n (& cancel(L[S_(n-1) dotss S_0 K]) + L [hat(K)]) = (-1)^n z (L[E_n S_(n-1) dotss S_0 K] + L[e_n S_(n-1) dotss S_0 K]) $ - #{ - v(1.5em) - - h(4.4em) - $display( - => L[K] + (-1)^n L[hat(K)] = - z sum_(i=0)^n (-1)^i ( - L[E_i S_(i-1) dotss S_0 K] + L[e_i S_(i-1) dotss S_0 K] - ) - )$ - } - - #{ - set text(fill: white) - - - v(1.5em) - $ - Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda) - $ - } -] - -#slide[ - + v(1.5em) - #v(2em) - - #{ - set align(center) - - [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:] - } + h(4.4em) + $display( + => L[K] + (-1)^n L[hat(K)] = + z sum_(i=0)^n (-1)^i ( + L[E_i S_(i-1) dotss S_0 K] + L[e_i S_(i-1) dotss S_0 K] + ) + )$ +}) - #v(1em) +#slide({ + align(center, [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]) + v(1em) $ & L[K] + cancel(L[S_0 K]) = z( L[E_0 K] + L[e_0 K] ) \ @@ -534,43 +617,21 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. (-1)^n (& cancel(L[S_(n-1) dotss S_0 K]) + L [hat(K)]) = (-1)^n z (L[E_n S_(n-1) dotss S_0 K] + L[e_n S_(n-1) dotss S_0 K]) $ - #{ - v(1.5em) + v(1.5em) - h(4.4em) - $display( - => L[K] + (-1)^n L[hat(K)] = - z sum_(i=0)^n (-1)^i ( - L[A_i^lambda K] + L[B_i^lambda K] - ) - )$ - } - - - #{ - set text(fill: white) - - - v(1.5em) - $ - Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda) - $ - } -] - -#slide[ - - - #v(2em) - - #{ - set align(center) - - [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:] - } + h(4.4em) + $display( + => L[K] + (-1)^n L[hat(K)] = + z sum_(i=0)^n (-1)^i ( + L[A_i^lambda K] + L[B_i^lambda K] + ) + )$ +}) - #v(1em) +#slide({ + align(center, [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]) + v(1em) $ & L[K] + cancel(L[S_0 K]) = z( L[E_0 K] + L[e_0 K] ) \ @@ -579,34 +640,20 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. (-1)^n (& cancel(L[S_(n-1) dotss S_0 K]) + L [hat(K)]) = (-1)^n z (L[E_n S_(n-1) dotss S_0 K] + L[e_n S_(n-1) dotss S_0 K]) $ - #{ - v(1.5em) - - h(4.4em) - $display( - => L[K] = (-1)^(n+1) L[hat(K)] + - z sum_(i=0)^n (-1)^i ( - L[A_i^lambda K] + L[B_i^lambda K] - ) - )$ - } - - #{ - set text(fill: white) - + v(1.5em) - v(1.5em) - $ - Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda) - $ - } -] + h(4.4em) + $display( + => L[K] = (-1)^(n+1) L[hat(K)] + + z sum_(i=0)^n (-1)^i ( + L[A_i^lambda K] + L[B_i^lambda K] + ) + )$ +}) #slide[ - #v(2em) - #{ set align(center) @@ -629,18 +676,9 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. h(4.4em) $display( => L[K] = (-1)^(n+1) L[hat(K)] + - z sum_(i=0)^n (-1)^i ( - L[A_i^lambda K] + L[B_i^lambda K] - ) + z sum_K^text(fill: #white, n) (lambda) )$ } - - #{ - v(1.5em) - $ - Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda) - $ - } ] == Definizione induttiva @@ -649,21 +687,15 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. // la definizione è sotto perché gli enumerate non vanno d'accordo con le figure -1. Se $K = hat(K)(cal(U), p)$ è in _forma discendente_ per un qualche $p$: $L_K (a, z) colon.eq a^w(K)$ +1. Se $K$ è in _forma discendente_: $L_K (a, z) colon.eq a^w(K)$ -2. Se $K = K_1 union K_2$ rispettivamente diagrammi di un nodo e di un link e con $K_1$ _sovrastante_ $K_2$: - - $ - L(K_1 union K_2) colon.eq delta L(K_1) L(K_2) - #h(2em) - delta colon.eq (a + a^(-1)) slash z - 1 - $ +2. Se $K = K_1 union K_2$: $L(K_1 union K_2) colon.eq delta L(K_1) L(K_2)$ #h(1fr) (con $delta colon.eq (a + 1 slash a) / z - 1$) 3. Altrimenti $K = K_1 union dotss union K_n$: #v(0.75em) - a) Se $n > 1$: $display( + a) #h(0.35em) Se $n > 1$: $display( L_K (a, z) colon.eq 1 / (2n) sum_(i=1)^n sum_(q=p_i, overline(p)_i) @@ -672,7 +704,7 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. #v(1.5em) - b) Se $n=1$: $display( + b) #h(0.35em) Se $n=1$: $display( L_K (a, z) colon.eq 1 / 2 sum_(q = p, overline(p)) @@ -684,55 +716,86 @@ dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione. == Ipotesi induttiva -Bla bla bla +#slide[ -= Laboratorio Computazionale + L'ipotesi induttiva che useremo nel corso della dimostrazione è la seguente: -== Implementazione e Verifica + #set par(spacing: 1.5em) + #set list(spacing: 1.5em) + #set enum(numbering: "a)", spacing: 1.5em) -#slide[ - *Progetto Computazionale:* + Per ogni diagramma di link $K$ con $< N$ incroci e per diagrammi contenenti $#skein.over-twist-large$ con $< N$ incroci: + + 1. $L_K$ è ben definito (non dipende dalla scelta di punto base). - - *Implementazione in Python*: Algoritmo basato sulle relazioni skein - - *Calcolo automatico* di $L_K$ e $F_K$ per diagrammi di nodi - - *Interfaccia user-friendly* per l'inserimento di diagrammi + 2. $L_K$ verifica gli assiomi: - #pause + - $L[K] + L[S_i K] = z ( L[e_i K] + L[E_i K] )$ - *Verifica sperimentale:* - - Confronto con il database *KnotInfo* - - Verifica su centinaia di nodi noti - - Test di coerenza con valori pubblicati + - $L[#skein.over-twist-large] = a L [#skein.strand-large]$, $L[#skein.under-twist-large] = a^(-1) L [#skein.strand-large]$ - #pause + 3. $L_K$ è invariante per mosse di tipo II e III che non aumentano il numero di incroci. - *Risultato Principale:* Trovato un *errore* nel valore per il nodo $10_125$. + 4. Se $K$ ammette una _funzione di slacciamento_ allora $L_K = a^w(K)$ ] -== Conclusioni +== Dimostrazione buona definizione #slide[ - *Percorso compiuto:* - 1. Dal concetto geometrico di nodo alla formalizzazione tramite diagrammi - 2. Definizione dell'isotopia regolare e degli invarianti - 3. Costruzione rigorosa del polinomio di Kauffman - 4. Dimostrazione della buona definizione - 5. Estensione agli invarianti di isotopia ambiente - - #pause - - *Risultati principali:* - - *Dimostrazione* della buona definizione di $L_K$ - - *Costruzione* di $F_K$ come invariante ambiente - - *Verifica computazionale* e scoperta di errori nella letteratura - - #pause - - #align(center)[ - #text(size: 1.2em, weight: "bold")[ - Grazie per l'attenzione! - ] - ] + #set par(spacing: 1.25em) + #set list(spacing: 1.25em) + #set enum(numbering: "a)", spacing: 1.25em) + + _Dimostrazione._ - *Domande?* + 1. $L_K$ è ben definito (non dipende dalla scelta di punto base) + + - Invarianza $sum_K (lambda)$ per $1$-rotazioni + + - Caso più componenti + + - Caso una sola componente + + - Splice di un nodo in forma discendente + + - Assiomi di $L_K$ per nodi in forma discendente + + 2. $L_K$ verifica gli assiomi + + 3. $L_K$ è invariante per mosse di tipo II e III che non aumentano il numero di incroci + + 4. Se $K$ ammette una _funzione di slacciamento_ allora $L_K = a^w(K)$ ] + += Laboratorio Computazionale + +== Implementazione in Python + +#show raw: set text(size: 15pt) +#set par(spacing: 1.25em) +#set list(spacing: 1.25em) +#set enum(numbering: "a)", spacing: 1.25em) + +Implementazioni esistenti: + +- *KnotScape*: scritto in C, degli anni '90. + +- *KnotTheory*: ultimo aggiornamento \~2011, per Mathematica. + +#pause + +Per il progetto di Lab. Comp. abbiamo scritto una *nuova implementazione* in _Python_ open source: + +- Rappresentazione di nodi attraverso codici *PD* e *SG*. + +- Algoritmo per il calcolo di $L_K$ e $F_K$. + +#pause + +- Verifica di tutti i polinomi contenuti nel *database di KnotInfo*. + +- _Trovato un errore nel nodo_ $10_125$, c'è $L_m(K)$ invece di $L_K$. + +== Fine + +#" "