#import "theme.typ": *
#import "prelude.typ": *

#import "@preview/cetz:0.3.4"
#import "skein.typ": *
#import "@preview/drafting:0.2.2": set-margin-note-defaults, inline-note, margin-note, set-page-properties
#import "@preview/colorful-boxes:1.1.0": stickybox

#set-margin-note-defaults(
  rect: (..kwargs, content) => rect(
    ..kwargs,
    {
      set text(size: 8pt, font: "Open Sans")
      set par(leading: 0.5em, justify: false)
      content
    },
  ),
  side: right,
)

// Prelude

#show: ams-article.with(
  paper-size: "a4",
  title: [Il polinomio di Kauffman: \ un invariante di isotopia regolare],
  page-title: [Il polinomio di Kauffman: un invariante di isotopia regolare],
  authors: (
    (
      name: "Antonio De Lucreziis",
      organization: "Dipartimento di Matematica",
      location: "Pisa, Italia",
      email: "antonio.delucreziis@gmail.com",
    ),
  ),
  abstract: [
    In questa tesi tratteremo del polinomio di Kauffman, un invariante di nodi e link per di isotopia regolare. Introdurremo dei risultati di fondazione della teoria dei nodi per definire l'isotopia regolare. Infine vedremo la dimostrazione della buona definizione del polinomio di Kauffman a partire dalla forma assiomatica. Inoltre per il progetto di Laboratorio Computazionale abbiamo implementato in Python questo polinomio e verificato tutti i valori presenti nel database di KnotInfo e trovato un errore nel calcolo del nodo $10_125$.
  ],
  bibliography: bibliography("refs.bib"),
)

#set-page-properties(margin-right: 4cm)

// Content

= Introduzione

In questa tesi studieremo un invariante di isotopia regolare chiamato polinomio di Kauffman @Kauffman1990-qe. Intuitivamente se l'isotopia ambiente è l'equivalenza tra diagrammi generata dalle mosse I, II e III di Reidemeister, l'isotopia regolare è l'equivalenza generata solo dalle mosse II e III.

#figure(
  image("assets/ambient-regular-isotopy-difference.jpg", width: 13cm),
  caption: [Mosse di Reidemeister],
)

Dato un nodo o link non orientato $K$, possiamo definire in forma assiomatica il polinomio $kL_K (a, z) in bb(Z)[a, a^(-1), z, z^(-1)]$ attraverso i seguenti assiomi:

1. Se $K$, $K'$ sono equivalenti a meno di isotopia regolare, allora $kL_K (a,z) = kL_K' (a,z)$.

2. Valgono le seguenti relazioni skein:

  - $kL(#skein.over) + kL(#skein.under) = z (kL(#skein.h) + kL(#skein.v))$

  - $kL(#skein.unit) = 1$

  - $kL(#skein.over-twist) = a kL(#skein.strand)$

  - $kL(#skein.under-twist) = a^(-1) kL(#skein.strand)$


Vedremo come questi assiomi definiscono un unico invariante di isotopia regolare ben definito e come $kL_K (a, z)$ può essere generalizzato a un invariante di isotopia ambiente $F_K (a, z)$ utilizzando il _writhe_ di un nodo.

== Introduzione alla Teoria dei Nodi

Ora introdurremo alcuni risultati fondamentali di teoria dei nodi. Vedremo le definizioni di nodo e link ed alcuni risultati di fondazione che ci serviranno per poter parlare ad esempio dei diagrammi planari e dell'isotopia regolare.

#definition[
  Dati $X, Y$ spazi topologici, $f : X arrow Y$ continua si dice *embedding* se $X$ è omeomorfo a $f(X) subset Y$ con la topologia di sottospazio indotta da $Y$.
] <embedding>

// #let embedding-def = ref-link(<embedding>)[embedding]

#fact[
  Dati $X$, $Y$ spazi topologici con $X$ compatto, $Y$ di Hausdorff e data un'applicazione continua $f : X arrow Y$ allora $f$ è un embedding $<=>$ è iniettiva.
]

#definition[
  Dato un embedding $f : X arrow Y$, un punto $p in X$ allora $f$ si dice *localmente piatto* in $p$ se $exists U subset bb(R)^3$ intorno di $p$, tale che
] <locally-flat>

#grid(
  columns: (1fr, 1fr),
  gutter: 1em,
  align: center + horizon,
  grid(
    columns: 3,
    gutter: 1em,
    align: center,
    $U$, $approx$, $bb(D)^2 times [0, 1]$,
    $U inter f(X)$, $<->$, ${ 0 } times [0, 1]$,
  ),
  align(center, image("assets/locally-flat-v2.png", width: 5.5cm)),
)


inoltre $f$ si dice embedding *localmente piatto* se lo è in ogni punto di $X$.

// #let locally-flat-def = ref-link(<locally-flat>)[localmente piatto]

#definition[
  Un *nodo tame* è un sottoinsieme $K subset bb(R)^3$ per cui esiste un embedding $f : bb(S)^1 arrow.hook bb(R)^3$ localmente piatto con $K = f(bb(S)^1)$. In questo caso $f$ è anche detto *embedding tame*.
]

#figure(
  image("assets/wild_knot.svg", width: 75%),
  caption: [
    Un esempio di nodo non tame
  ],
)

Esistono anche nodi non tame come quello riportato nella figura precedente @wiki:wild_knot, ma d'ora in avanti considereremo solo nodi tame.

#definition[
  Due nodi $K_0, K_1 subset bb(R)^3$ sono *equivalenti* se esiste un'*isotopia ambiente* $H$ che porta uno nell'altro, ovvero esiste $H : bb(R)^3 times [0, 1] arrow bb(R)^3$ applicazione continua, tale che

  - $forall t in [0, 1], H(dot, t)$ è un omeomorfismo

  e ponendo $H_t (x) colon.eq H(x, t)$ si ha

  - $H_0 = id_(bb(R)^3)$

  - $H_1(K_0) = K_1$
]

Inoltre se due nodi sono equivalenti allora vale che $bb(R)^3 without K_0 approx bb(R)^3 without K_1$.

Spesso serve fare manipolazioni direttamente sui nodi o sui diagrammi e lavorare con gli embedding $bb(S)^1 arrow bb(R)^3$ non è molto comodo da un punto di vista formale e pratico, per questo motivo introduciamo i _nodi poligonali_ che ci permettono di dare una formalizzazione alternativa dei nodi tame più operativa.

#definition[
  Un *nodo poligonale* è un nodo equivalente ad un'unione finita di segmenti lineari.
]

#fact(name: [Crowell @crowell1977introduction])[
  Dato un nodo $K subset bb(R)^3$, $K$ è tame $<=>$ $K$ è poligonale.
]

// Dunque nella classe di isotopia di un nodo tame c'è sempre un nodo poligonale e possiamo restringerci a studiare questi ultimi.

#definition[
  Il *nodo banale* è la classe di equivalenza del bordo di un triangolo equilatero.
]

Passiamo ora al caso in cui abbiamo un nodo con più di una componente

#definition[
  $L subset bb(R)^3$ è detto *link* se $exists$ embedding $f : bb(S)^1 union dots.c union bb(S)^1 arrow bb(R)^3$ localmente piatto con immagine $L$.
]


Possiamo generalizzare tutte le definizioni che diamo per i nodi ai link, sostituendo $bb(S)^1$ con $bb(S)^1 union dots.c union bb(S)^1$ e apportando le giuste modifiche.

Introduciamo ora il concetto di equivalenza combinatoria di link poligonali in $bb(R)^3$; questo è il primo passo che ci permetterà di descrivere l'equivalenza per isotopia ambiente tra nodi attraverso una sequenza finita di mosse.

#definition[
  Due link $L_1, L_2$ sono *combinatorialmente equivalenti* se si ottengono uno dall'altro tramite un numero finito delle seguenti mosse:

  1. Aggiunta/rimozione di vertici

    #image("assets/delta-move-1.png")

  2. Dato un triangolo piano $Delta subset bb(R)^3$ tale che $Delta inter L$ sia un lato di $Delta$ ed un segmento di $L$ allora una $Delta$*-mossa* è la seguente

    #image("assets/delta-move-2.png")
]

#fact[
  Due link poligonali $L_1, L_2 subset bb(R)^3$ sono equivalenti $<=>$ sono combinatorialmente equivalenti.
]

#pagebreak()

== Proiezioni e Diagrammi

Data una direzione $v in bb(S)^2 subset bb(R)^3$, possiamo definire $pi_v : bb(R)^3 arrow v^perp$ proiezione sul piano ortogonale a $v$ come nella seguente figura:

#figure(image("assets/projection-plane.png", width: 60%))

Per formalizzare il concetto di diagramma di un nodo introdurremo il concetto di proiezione regolare, ovvero una proiezione in cui i punti di intersezione tra le immagini dei segmenti di $L$ sono solamente gli incroci del nodo (e senza segmenti paralleli alla direzione di proiezione).

#definition[
  Sia $L subset bb(R)^3$ un link, $v in bb(S)^2$ una direzione e $pi_v : bb(R)^3 arrow v^perp$ la proiezione su $v^perp$ come in precedenza. Allora un punto $x in pi(L) subset v^perp$ si dice

  - *regolare* se $abs(pi^(-1)(x)) = 1$

  - *singolare* se $abs(pi^(-1)(x)) > 1$

  - *doppio* se $abs(pi^(-1)(x)) = 2$
]

#fact[
  Dato un link poligonale $L subset bb(R)^3$, esiste un aperto denso $U subset bb(S)^2$ tale che $forall v in U$ si ha che

  1. $L$ non ha segmenti paralleli a $v$.

  2. Se $x in pi_v (L)$ è singolare allora

    - $pi_v^(-1)(x)$ non contiene vertici di $L$

    - $x$ è un punto doppio

    - $x$ è un punto di intersezione trasversa delle immagini di due segmenti
]

Quindi dato $L subset bb(R)^3$ link poligonale, esiste una proiezione regolare $pi(L) subset bb(R)^2$ con un numero finito di punti singolari, ciascuno dei quali è un punto doppio e di intersezione trasversa. Ognuno di questi punti doppi viene detto *incrocio*.

#definition[
  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.
]

#fact[
  Due link con stesso diagramma sono equivalenti.
]

#definition[
  Le mosse I, II, III (e le loro inverse) sono dette *mosse di Reidemeister*.
]

#figure(image("assets/reidemeister-moves.jpg", width: 10cm))

#theorem(name: [di Reidemeister])[
  Due diagrammi di link equivalenti sono collegati da una successione finita di isotopie planari e mosse di Reidemeister.
]

Il modo principale in cui utilizzeremo il teorema di Reidemeister è attraverso la seguente proprietà. Indichiamo con $scr(D)$ l'insieme dei diagrammi di nodi e link.

#proposition[
  Data una funzione $phi : scr(D) arrow S$ con $S$ un insieme (eventualmente con una qualche struttura come quella di anello) con la proprietà che $D tilde D' => phi(D) = phi(D')$ allora se $phi(D) != phi(D') => D tilde.not D'$, in particolare se $D, D'$ sono diagrammi per $K, K'$ allora $K tilde.not K'$.
]

#proof[
  È semplicemente la forma contronominale del teorema di Reidemeister.
]

Funzioni con la stessa proprietà di $phi$ sono quindi invarianti di nodi o link per isotopia ambiente e ci danno un modo di distinguerli. Più avanti vedremo ad esempio il polinomio $F_K (a, z) : scr(D) arrow bb(Z)[a, a^(-1), z, z^(-1)]$ che risulterà essere un invariante di isotopia ambiente per link orientatati.

Come abbiamo generalizzato da nodi a link possiamo ripetere tutto anche aggiungendo un'orientazione e studiare *nodi e link orientati* ed abbiamo anche una versione orientata del teorema di Reidemeister.

== Operazioni su Diagrammi

#definition[
  Dato un link $L subset bb(R)^3$ possiamo definire

  - Il *mirror* $m(L) colon.eq rho(L)$ dove $rho : bb(R)^3 arrow bb(R)^3$ è la riflessione rispetto al piano di proiezione. In particolare dato un diagramma, il suo mirror è lo stesso diagramma con tutte le informazioni sopra/sotto scambiate.

  inoltre, se diamo anche un'_orientazione_ ad $L$ possiamo definire

  - Il *reverse* $r(L)$, in cui prendiamo l'orientazione opposta su ogni componente.

  - L'*inverso* $-L colon.eq m(r(L)) = r(m(L))$.
]

#definition[
  Sia $K subset bb(R)^3$, se $K$ non è equivalente a $m(K)$ allora diciamo che $K$ è *chirale*, altrimenti è detto *anfichirale*.
]


= Isotopia Regolare

#todo[
  Work in progress
]

// #todo[
//   Aggiungere più commenti
// ]

// Il teorema di Reidemeister ci dice che se due nodi sono equivalenti a meno di isotopia allora lo sono anche i loro diagrammi a meno di isotopie planari e delle mosse I, II e III.

// Possiamo chiederci cosa succede se ci restringiamo all'equivalenza generata solo dalle isotopie planari e dalle mosse II e III, questo ci dà una nuova equivalenza tra nodi più forte dell'isotopia ambiente.

// #definition[
//   Due nodi o link $K_1, K_2$ si dicono equivalenti a meno di *isotopia regolare* se due loro diagrammi sono equivalenti a meno di isotopie planari e mosse II e III di Reidemeister.
// ]

// #figure(image("assets/ambient-regular-isotopy-difference.jpg", width: 13cm))

// Una prima cosa che possiamo notare è che tutte le mosse R1 possono essere "fattorizzate" in modo da averle tutte raggruppate insieme. #margin-note[Magari aggiungere la dimostrazione di questa cosa]

// #todo[
//   Altro disegno
// ]


// C'è un'osservazione importante da fare quando parliamo di isotopia regolare. Quest'ultima è definita solo quando si parla di diagrammi di link, quando invece parliamo di isotopia ambiente ha anche senso parlare dei link come circonferenze embedded.

// Più avanti vedremo invarianti di isotopia ambiente come il polinomio $F_K$ che però è definito attraverso l'isotopia regolare, in particolare il calcolo va fatto fissando un particolare diagramma del link. Tutt'ora è un problema aperto dare una definizione di $F_K$ che sia indipendente dalla scelta di un diagramma.




// Questo ci suggerisce un primo invariante di isotopia regolare per link orientatati, per prima cosa introduciamo il segno di un incrocio.

// #definition[
//   Dato un incrocio di un link orientato ci possono essere due casi

//   $
//     epsilon(#skein-generic(direction: (+1, +1))) = +1
//     #h(2em)
//     epsilon(#skein-generic(direction: (+1, -1))) = -1
//   $
// ]

// #definition[
//   Dato $K$ link orientato, il *writhe* $w(K)$ (o numero di avvolgimento) è dato dalla somma dei segni dei suoi crossing

//   $
//     w(K) colon.eq sum_c epsilon(c)
//   $
// ]

// #proposition[
//   Il writhe non dipende dall'orientazione del link
// ]

// #proposition[
//   Il writhe è un invariante di isotopia regolare, ovvero se $K_1, K_2$ sono equivalenti a meno di isotopia regolare allora $w(K_1) = w(K_2)$.
// ]

// #todo[
//   Esempi di calcolo del writhe
// ]

// Un primo fatto generale che possiamo osservare è che dato un invariante di isotopia regolare con certe proprietà, possiamo costruire un invariante di isotopia ambiente aggiungendo un fattore di correzione dato dal writhe.

// #proposition[
//   Sia $R$ un anello, $a in R$ un elemento invertibile e $K$ un link orientato, allora se $L(K) in R$ è un invariante di isotopia regolare tale che

//   $
//     L(#skein.over-twist) = a L(#skein.strand)
//     #h(2em)
//     L(#skein.under-twist) = a^(-1) L(#skein.strand)
//   $

//   allora $F(K) colon.eq a^(-w(K)) L(K)$ è un invariante di isotopia ambiente.
// ] <prop-ext-ambient-isotopy-inv>


= Polinomio di Kauffman

#todo[
  Work in progress
]

== Definizione assiomatica

#todo[
  Work in progress
]

// Vediamo ora la definizione del polinomio di Kauffman.

// #definition[
//   Dato $K$ un link non orientato, $kL_K in bb(Z)[a, a^(-1), z, z^(-1)]$, ovvero i polinomi di Laurent sugli interi nelle variabili $a$ e $z$, e verifica i seguenti assiomi:

//   1. Se $K$, $K'$ sono equivalenti a meno di isotopia regolare, allora $kL_K = kL_K'$.

//   2. Valgono le seguenti relazioni skein per quaterne di diagrammi identici ovunque tranne che nei punti indicati

//     - $kL(#skein.over) + kL(#skein.under) = z (kL(#skein.h) + kL(#skein.v))$

//     - $kL(#skein.unit) = 1$

//     - $kL(#skein.over-twist) = a kL(#skein.strand)$

//     - $kL(#skein.under-twist) = a^(-1) kL(#skein.strand)$
// ]

// Come già anticipato in precedenza, vedremo che questo è un invariante di isotopia regolare e può essere generalizzato ad invariante di isotopia ambiente come segue

// #definition[
//   Definiamo $F_K in Z[a, a^(-1), z, z^(-1)]$ per diagrammi orientati $K$ come
//   $
//     F_K colon.eq a^(-w(K)) kL_K
//   $
//   dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione.
// ]

// #proposition[
//   Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente
// ]

// #proof[
//   Segue dalla @prop-ext-ambient-isotopy-inv.
// ]

== Alcune proprietà del polinomio di Kauffman

#todo[
  Work in progress
]

// #lemma[
//   Sia $K$ un link orientato e $m(K)$ il suo mirror. Allora abbiamo la seguente relazione per $L$
//   e $F$

//   $
//     L_(m(K)) (a, z) = L_K (1 slash a, z)
//     #h(2em)
//     F_(m(K)) (a, z) = F_K (1 slash a, z)
//   $

// ]

// #proof[
//   $m(K)$ è ottenuto da $K$ scambiando tutti i suoi crossing quindi se analizziamo cosa succede nei vari assiomi solo vicino ad un certo incrocio otteniamo le seguenti relazioni
//   $
//     kL(m(#skein.unit)) = kL(#skein.unit) = 1 \
//     kL(m(#skein.over-twist)) = kL(#skein.under-twist) = a^(-1) kL(#skein.strand) \
//     kL(m(#skein.under-twist)) = kL(#skein.over-twist) = a kL(#skein.strand)
//   $

//   ed infine l'ultima relazione rimane invariata per la simmetria del polinomio di Kauffman

//   $
//     kL(m(#skein.over)) + kL(m(#skein.under)) = z (kL(m(#skein.h)) + kL(m(#skein.v))) \
//     => kL(#skein.under) + kL(#skein.over) = z (kL(#skein.h) + kL(#skein.v)) \
//     => kL(#skein.over) + kL(#skein.under) = z (kL(#skein.h) + kL(#skein.v))
//   $

//   quindi passare al mirror ha l'effetto di scambiare solamente $a$ con $a^(-1)$ ma il resto della valutazione rimane identico.

//   Infine per $F_m(K)$ basta osservare che $w(m(K)) = -w(K)$ per una motivazione analoga.
// ]

// Prima di passare alla dimostrazione della buona definizione vediamo alcuni esempi di calcolo di $L_K$ in modo "implicito", questo può essere fatto scegliendo accuratamente per quali diagrammi valutare le relazioni skein degli assiomi.

// Ad esempio proviamo a ricavare il valore di $delta colon.eq L(#skein.unit#skein.unit)$ #margin-note[Tutte le immagini qua sotto sono temporanee e devo rifarle]

// #let knot-picture(src, ..rest) = $thin #image("assets/derived/atlas-" + src, ..rest) thin$

// $
//   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) )
//   ) \
//   =>
//   a L( #skein.unit )
//   +
//   a^(-1) L( #skein.unit )
//   &=
//   z (
//     delta
//     +
//     L ( #skein.unit )
//   ) \
//   => a + a^(-1) &= z ( delta + 1 ) \
//   => delta &= (a + a^(-1)) slash z - 1
// $

// Questo valore $delta = (a + 1 slash a) slash z - 1$ ricomparirà anche in seguito ed è il coefficiente che il polinomio di Kauffman introduce quando abbiamo un link con due componenti disgiunte. Possiamo anche trovare il risultato per il link di Hopf come segue

// // #figure(image("assets/implicit-calc-2.png"))

// $
//   L( #knot-picture("hopf-0.png", height: 1.75em) )
//   +
//   L( #knot-picture("hopf-1.png", height: 1.75em) )
//   &=
//   z (
//     L( #knot-picture("hopf-2.png", height: 1.75em) )
//     +
//     L( #knot-picture("hopf-3.png", height: 1.75em) )
//   ) \
//   =>
//   L( #knot-picture("hopf-0.png", height: 1.75em) )
//   +
//   delta
//   &=
//   z (
//     a
//     +
//     a^(-1)
//   ) \
//   =>
//   L( #knot-picture("hopf-0.png", height: 1.75em) )
//   &=
//   - (a + a^(-1)) z^(-1) + 1 + (a + a^(-1)) z
// $


// Ed del nodo trifoglio

// // #figure(image("assets/implicit-calc-3.png"))

// $
//   L( #knot-picture("trefoil-0.png", height: 2em) )
//   +
//   L( #knot-picture("trefoil-1.png", height: 2em) )
//   &=
//   z (
//     L( #knot-picture("trefoil-2.png", height: 2em) )
//     +
//     L( #knot-picture("trefoil-3.png", height: 2em) )
//   ) \
//   =>
//   L( #knot-picture("trefoil-0.png", height: 2em) )
//   +
//   a
//   &=
//   z (
//     L( #knot-picture("hopf-0.png", height: 1.75em) )
//     +
//     a^(-2)
//   ) \
//   =>
//   L( #knot-picture("trefoil-0.png", height: 2em) )
//   &=
//   -(2a + a^(-1)) + (1 + a^(-2)) z + (a + a^(-1)) z^2
// $

// #definition[
//   Diremo che un diagramma è _split_ se è l'unione disgiunta di due diagrammi separati, in questo caso scriviamo $K = K_1 union.sq K_2$ dove $K_1$ e $K_2$ sono le due componenti disgiunte.
// ]

// #definition[
//   Un diagramma $K$ è una *somma connessa* se appare come due diagrammi disgiunti connessi da due archi paralleli (a meno di isotopie planari). Tagliando questi due archi e riunendo insieme le estremità dello stesso sotto-diagramma otteniamo un nuovo diagramma split della forma $tilde(K) = K_1 union.sq K_2$, in questo caso chiamiamo la somma connessa $K = K_1 hash K_2$.
// ]

// #proposition[
//   Valgono le seguenti relazioni di $L$ ed $F$ per diagrammi split o in somma connessa

//   #{
//     set align(center)
//     grid(
//       rows: 2,
//       columns: 2,
//       column-gutter: 2em,
//       row-gutter: 1em,
//       $L(K_1 union.sq K_2) = delta L(K_1) L(K_2)$, $F(K_1 union.sq K_2) = delta F(K_1) F(K_2)$,
//       $L(K_1 hash K_2) = L(K_1) L(K_2)$, $F(K_1 hash K_2) = F(K_1) F(K_2)$,
//     )
//   }

//   dove $delta = (a + a^(-1)) slash z - 1$ ed è lo stesso coefficiente che abbiamo trovato nell'esempio precedente.
// ]

== Dimostrazione Forma Induttiva

#todo[
  Work in progress
]

// Prima di passare a descrivere la definizione induttiva diamo alcune definizioni di manipolazioni di un diagramma.

// #definition[
//   Sia $K$ un diagramma, $cal(U)$ la sua ombra planare#footnote[Ovvero per $K subset bb(R)^3$ poniamo $U colon.eq pi(K) subset bb(R)^2$] e $p in cal(U)$ un punto di partenza direzionato in $cal(U)$.
// ]

// - Il suo *nodo (o link) banale standard* associato detto $hat(K)(cal(U), p)$ è definito come segue: si prende il primo punto di partenza direzionato e si inizia a percorrere l'ombra planare in quella direzione e si rende ogni incrocio un sopra-incrocio quando ci si passa sopra per la prima volta.

//   #figure(
//     image(
//       "assets/standard-unlink-construction.png",
//       width: 12cm,
//     ),
//     caption: [
//       Un link con $3$ componenti e punti di partenza direzionati $p_1, p_2, p_3$. In #box(radius: 3pt, outset: (y: 3pt), inset: (x: 2pt), fill: rgb("#91cdff"))[azzurro] sono evidenziati gli incroci che sono cambiati rispetto al link di partenza.
//     ],
//   )


// - Sia $K$ un link, $lambda = (lambda_n, dots, lambda_0)$ una sequenza di etichette di incroci allora poniamo

//   $
//     A_i^lambda = E_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
//     #h(2em)
//     B_i^lambda = e_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
//   $

//   notiamo che per $i=0$ abbiamo che $A_0^lambda K = E_lambda_0 K$ e $B_0^lambda K = e_lambda_0 K$ che è l'unico caso degenere per questa definizione.

// - #todo[Operazione compatta $sum_K (lambda)$]

// L'idea per la definizione induttiva è di considerare dato un nodo o un link $K$ il suo nodo o link discendente standard $hat(K)$. Questo induce una sequenza di indici $lambda$ che indichiamo con $0, dots, n$. Se la applichiamo incrementalmente a $K$ otteniamo le seguenti relazioni

// $
//   L_K + L_(S_0 K) = z( L_(E_0 K) + L_(e_0 K) ) \
//   L_(S_0 K) + L_(S_1 S_0 K) = z( L_(E_0 S_0 K) + L_(e_0 S_0 K) ) \
//   dots.v \
//   L_(S_(n-1) dots S_0 K) + L_(hat(K)) = z (L_(E_n S_(n-1) dots S_0 K) + L_(e_n S_(n-1) dots S_0 K))
// $

// se ora sommiamo e sottraiamo membro a membro otteniamo la seguente identità

// #context block(
//   width: page.width,
//   grid(
//     columns: 3,
//     column-gutter: 2em,
//     row-gutter: 1em,
//     $L_K + L_(S_0 K)$, [], $z( L_(E_0 K) + L_(e_0 K) )$,
//     $-(L_(S_0 K) + L_(S_1 S_0 K))$, [], $-z( L_(E_0 S_0 K) + L_(e_0 S_0 K) )$,
//     $dots.v$, $=$, $dots.v$,
//     $+(-1)^n (L_(S_(n-1) dots S_0 K) + L_(hat(K)))$,
//     [],
//     $+(-1)^n (z (L_(E_n S_(n-1) dots S_0 K) + L_(e_n S_(n-1) dots S_0 K)))$,
//   ),
// )

// notiamo che possiamo cancellare tutti i termini del membro di sinistra che compaiono due volte con segno opposto

// #context block(
//   width: page.width,
//   grid(
//     columns: 3,
//     column-gutter: 2em,
//     row-gutter: 1em,
//     $L_K + cancel(L_(S_0 K))$, [], $z( L_(E_0 K) + L_(e_0 K) )$,
//     $-(cancel(L_(S_0 K)) + cancel(L_(S_1 S_0 K)))$, [], $-z( L_(E_0 S_0 K) + L_(e_0 S_0 K) )$,
//     $dots.v$, $=$, $dots.v$,
//     $+(-1)^n (cancel(L_(S_(n-1) dots S_0 K)) + L_(hat(K)))$,
//     [],
//     $+(-1)^n (z (L_(E_n S_(n-1) dots S_0 K) + L_(e_n S_(n-1) dots S_0 K)))$,
//   ),
// )

// Da cui otteniamo un'espressione per $L_K$, inoltre posto $lambda = (0, dots, n)$

// #align(
//   center,
//   block(
//     width: 15cm,
//     [
//       #set align(center)

//       $
//         =>
//         L_K
//         &=
//         (-1)^(n+1) L_(hat(K)) + z sum_(i=0)^n (-1)^i (
//           L_(E_n S_(n-1) dots S_0 K) + L_(e_n S_(n-1) dots S_0 K)
//         ) \
//         &=
//         (-1)^(n+1) L_(hat(K)) + z sum_(i=0)^n (-1)^i (
//           L_(A_n^lambda K) + L_(B_n^lambda K)
//         )
//       $ <kauffman-rec-inductive>

//     ],
//   ),
// )

// Questo ci dà un'idea su come sia possibile calcolare induttivamente $L_K$ in termini di $L_hat(K)$ e di altri diagrammi con meno incroci del diagramma di partenza.

// Affinché sia sempre possibile raggiungere un nodo in forma di nodo banale standard serve aggiungere la seguente relazione quando $K = K_1 union.sq K_2$ con $K_1$ sovrastante $K_2$.

// $
//   L_(K_1 union.sq K_2) = delta L_(K_1) L_(K_2)
// $ <kauffman-rec-overlies>

// sempre con $delta = (a + a^(-1)) slash z - 1$.

// // Closed form algorithm

// #definition(name: [Forma chiusa per $kL_K$])[
//   Il polinomio $kL_(K)(a,z)$ è definito induttivamente come segue, abbiamo i seguenti casi:
// ]

// // la definizione è sotto perché gli enumerate non vanno d'accordo con le figure

// 1. Se $K = hat(K)$ è un _nodo banale standard_ allora $kL_K (a, z) colon.eq a^w(K)$

// 2. Se $K_1$ è _sovrastante_ $K_2$, sia $d colon.eq (a + a^(-1)) slash z - 1$ e allora

//   $
//     kL(K_1 union.sq K_2) colon.eq d kL(K_1) kL(K_2)
//   $

// 3. Se $K = K_1 union.sq dotss union.sq K_n$

//   - Se un $K_i$ è _sovrastante_ un'altra componente allora applica (ii).

//   - Se nessun $K_i$ è _sovrastante_ tutti gli altri, siano $p_1, ..., p_n$ dei punti di partenza direzionati su $K_1, ..., K_n$ e sia $overline(p)_i$ lo stesso punto di partenza direzionato con la direzione opposta di $p_i$ su $K_i$. Sia $lambda(p_i)$ la sequenza di scambi di incroci di $K_i$ con $K - K_i$ tale che $hat(K)(lambda(p_i)) = K_i union.sq (K - K_i)$ tale che $K_i$ sia _sovrastante_ il resto delle componenti. A questo punto possiamo definire $kL_K$ come

//     #[
//       #set text(size: 11pt)
//       $
//         kL_K (a, z) colon.eq
//         1 / (2n) [
//           sum_(i=1)^n sum_(q=p_i, overline(p)_i) ((-1)^(|lambda(q)|+1) d kL_(K_i) kL_(K - K_i) + z sum_K (lambda(q)))
//         ]
//       $
//     ]

//   - Se $K$ è una singola componente allora sia $p$ un punto di partenza direzionato su $K$ e $overline(p)$ quello con direzione opposta. Sia $lambda(p)$ la sequenza di scambi di incroci che lo porta al nodo banale standard $hat(K)$ e definiamo

//     #[
//       #set text(size: 11pt)

//       $
//         kL_K (a, z) colon.eq
//         1 / 2 [
//           sum_(q = p, overline(p)) ((-1)^(|lambda(q)|+1) kL(hat(K)(lambda(q))) + z sum_K (lambda(q)))
//         ]
//       $
//     ]
