presentation fwjpfejipwfwe

main
Antonio De Lucreziis 11 months ago
parent a9f262656c
commit 1ef109fcf9

Binary file not shown.

Binary file not shown.

@ -298,7 +298,7 @@ Questo sarà importante più avanti quando vedremo invarianti come il polinomio
#definition[ #definition[
Sia $K$ un diagramma di un nodo, $cal(U)$ la sua ombra planare#footnote[Ovvero per $K subset bb(R)^3$ poniamo $cal(U) colon.eq pi(K) subset bb(R)^2$] e $p in cal(U)$ un punto di partenza direzionato in $cal(U)$. Sia $K$ un diagramma di un nodo, $cal(U)$ la sua ombra planare#footnote[Ovvero per $K subset bb(R)^3$ poniamo $cal(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 banale standard* (o in _forma discendente_) associato a $K$ detto $hat(K)(cal(U), p)$ è definito come segue: si prende il 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. Il *nodo banale standard* (o in _forma discendente_) associato a $K$ detto $hat(K)(cal(U), p)$ è definito come segue: si prende il 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.
Questa definizione si estende anche a diagrammi di link prendendo un insieme di punti base ordinati come mostrato in figura. In particolare questo induce un ordinamento dall'alto verso il basso delle componenti. #h(1fr) Questa definizione si estende anche a diagrammi di link prendendo un insieme di punti base ordinati come mostrato in figura. In particolare questo induce un ordinamento dall'alto verso il basso delle componenti. #h(1fr)

@ -16,31 +16,32 @@
#show: dm-unipi-theme.with(aspect-ratio: "16-9", config-info( #show: dm-unipi-theme.with(aspect-ratio: "16-9", config-info(
title: [Il Polinomio di Kauffman: un invariante di isotopia regolare], title: [Il Polinomio di Kauffman: un invariante di isotopia regolare],
subtitle: [Tesi di Laurea Triennale], subtitle: [Tesi di Laurea Triennale],
author: { // author: {
set align(center) // set align(center)
grid( // grid(
columns: 2, // columns: 2,
row-gutter: 0.75em, // row-gutter: 0.75em,
column-gutter: 0.5em, // column-gutter: 0.5em,
align: (right, left), // align: (right, left),
[*Candidato:*], [Antonio De Lucreziis], // [*Candidato:*], [Antonio De Lucreziis],
[*Relatore:*], [Paolo Lisca], // [*Relatore:*], [Paolo Lisca],
) // )
// grid(align: left, [*Candidato:* Antonio De Lucreziis \ *Relatore:* Paolo Lisca]) // // grid(align: left, [*Candidato:* Antonio De Lucreziis \ *Relatore:* Paolo Lisca])
}, // },
author: [Antonio De Lucreziis],
date: [18 Luglio 2025], date: [18 Luglio 2025],
institution: [Dipartimento di Matematica \ Università di Pisa], institution: [Dipartimento di Matematica \ Università di Pisa],
logo: image("assets/dm-unipi-logo-bianco.png"), logo: image("assets/dm-unipi-logo-bianco.png"),
)) ))
// #set text(font: "Source Sans Pro", weight: 500, size: 20pt) // #set text(font: "Source Sans Pro", weight: 500, size: 20pt)
#set text(font: "Open Sans", weight: 400, size: 17pt) #set text(font: "Open Sans", weight: 400, size: 16pt)
#show math.equation: set text(size: 20pt) #show math.equation: set text(size: 19pt)
#show strong: it => text(weight: 600, it.body) #show strong: it => text(weight: 600, it.body)
#set par(leading: 1em) #set par(leading: 1em, spacing: 1em)
#set list(indent: 0.25em, body-indent: 0.75em, spacing: 1em) #set list(indent: 0.25em, body-indent: 0.75em, spacing: 1em)
#set enum(indent: 0.25em, body-indent: 0.75em, spacing: 1em) #set enum(indent: 0.25em, body-indent: 0.75em, spacing: 1em, numbering: "i.1.a)")
#show figure.caption: caption => block(inset: (x: 2em), { #show figure.caption: caption => block(inset: (x: 2em), {
set align(left) set align(left)
@ -48,22 +49,6 @@
caption.body caption.body
}) })
#show figure.where(kind: "definition"): it => {
set align(start)
block({
strong({
it.supplement
[.]
})
[ ]
it.body
})
}
#let definition(body) = {
figure(kind: "definition", supplement: [Definizione], body)
}
#title-slide() #title-slide()
@ -71,85 +56,44 @@
== Introduzione == Introduzione
#slide[ *Def.* $X, Y$ spazi topologici, $f : X arrow Y$ continua è *embedding* se $X approx f(X) subset Y$.
#definition[ *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]$.
$X, Y$ spazi topologici, $f : X arrow Y$ continua è *embedding* se $X approx f(X) subset Y$
]
#definition[ \
$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:
]
#{ *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)$.
set align(center)
grid( *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$.
columns: (auto, auto),
gutter: 3em,
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", height: 6cm)),
)
}
]
== Nodi e Diagrammi
#slide[
#definition[
$K subset bb(R)^3$ è un *nodo tame* se esiste $f : bb(S)^1 arrow.hook bb(R)^3$ embedding localmente piatto con $K = f(bb(S)^1)$
]
#pause
#figure(image("assets/wild_knot.svg", height: 5cm), caption: [Esempio di nodo non tame])
]
== Isotopia Ambiente == Isotopia Ambiente
#slide[ *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:
#definition[
$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:
- $forall t in [0, 1], H(dot, t)$ è un omeomorfismo - $forall t in [0, 1], H(dot, t)$ è un omeomorfismo
e ponendo $H_t (x) colon.eq H(x, t)$ si ha e posta $H_t (x) colon.eq H(x, t)$ si ha:
- $H_0 = id_(bb(R)^3)$ - $H_0 = id_(bb(R)^3)$
- $H_1(K_0) = K_1$ - $H_1(K_0) = K_1$
]
]
#slide[ // == Introduzione
*Def.* Un *nodo poligonale* è un nodo equivalente ad un'unione finita di segmenti lineari.
*Fatto (Crowell).* Dato un nodo $K subset bb(R)^3$, $K$ è *tame* $<=>$ $K$ è *poligonale*. // *Def.* Un *nodo poligonale* è un nodo equivalente ad un'unione finita di segmenti lineari.
\ // *Fatto (Crowell).* Dato un nodo $K subset bb(R)^3$, $K$ è *nodo (tame)* $<=>$ $K$ è *poligonale*.
*Def.* Possiamo generalizzare i nodi $bb(S)^1 arrow bb(R)^3$ a *link* come $bb(S)^1 union.sq dots.c union.sq bb(S)^1 arrow bb(R)^3$.
]
== Proiezioni e Diagrammi == Proiezioni e Diagrammi
// Data $v in bb(S)^2 subset bb(R)^3$ direzione, $pi_v : bb(R)^3 arrow v^perp$ proiezione sul piano ortogonale a $v$ come nella seguente figura:
*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: *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( #grid(
columns: (auto, 1fr), columns: (auto, 1fr),
gutter: 1em,
figure(image("assets/projection-plane.png", height: 6cm)), figure(image("assets/projection-plane.png", height: 6cm)),
[ [
1. $L$ non ha segmenti paralleli a $v$. 1. $L$ non ha segmenti paralleli a $v$.
2. Se $x in pi_v (L)$ è tale che $abs(pi^(-1)(x)) > 1$, ovvero è un punto *singolare*, allora: 2. Se $x in pi_v (L)$ è tale che $abs(pi^(-1)(x)) > 1$, ovvero è un punto *singolare*, allora:
@ -166,237 +110,582 @@
== Proiezioni e Diagrammi == Proiezioni e Diagrammi
// 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$: *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.
// 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*. #pad(
top: 0.5em,
grid(
columns: (1fr, auto),
gutter: 1em,
align: top,
[
*Def.* Le mosse I, II, III in figura sono dette *mosse di Reidemeister*.
*Teorema (di Reidemeister).* Due diagrammi di link _equivalenti_ sono collegati da una _successione finita mosse di Reidemeister_ e isotopie planari.
],
figure(image("assets/reidemeister-moves.jpg", height: 6.75cm)),
),
)
*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. == Isotopia Regolare
#grid(
columns: (1fr, auto),
gutter: 1em,
[
*Def.* Le mosse I, II, III sono dette *mosse di Reidemeister*.
*Teorema (di Reidemeister).* Due diagrammi di link equivalenti sono collegati da una successione finita di isotopie planari e mosse di Reidemeister. *Def.* $D_1, D_2$ diagrammi di link si dicono equivalenti a meno di *isotopia regolare* se e solo se sono equivalenti a meno di isotopie planari e mosse II e III di Reidemeister.
],
pad(top: 1em, figure(image("assets/reidemeister-moves.jpg", height: 6.75cm))), #figure(image("assets/ambient-regular-isotopy-difference.jpg", height: 7cm))
)
== Comportamento Isotopia Regolare
*Osservazione.* Tutte le mosse di tipo I, quelle che introducono quelli che chiameremo *riccioli*, possono passare sopra o sotto altri fili senza problemi applicando le seguenti mosse
#figure(image("assets/move-1-factorization.png", width: 75%))
== Comportamento Isotopia Regolare
*Osservazione.* Quando abbiamo una coppia di riccioli con segni opposti abbiamo la seguente proprietà di cancellazione detto _trucco di Whitney_.
#figure(image("assets/whitney-trick.png", width: 100%))
== Comportamento Isotopia Regolare
*Lemma.* Sia $K$ un diagramma di un nodo in _forma discendente_, allora o è composto interamente da riccioli o ammette una sequenza di mosse di tipo II e III che portano al diagramma di un nodo formato solo da riccioli.
Ovvero un nodo in forma discendente è _equivalente_ ad uno composto solo da riccioli.
\
#pause
_Dim._ Consideriamo una successione di mosse $K = D_0 stretch(arrow) dots.c stretch(arrow) D_n = #skein.unit-medium$.
- Mosse di tipo I che rimuovono un ricciolo
- Mosse di tipo I che aggiungono un ricciolo
- Mosse di tipo II, III
== Comportamento Isotopia Regolare
#figure(image("assets/modified-curl-add-before.png", width: 7% * 6.5))
#figure(image("assets/modified-curl-add-after.png", width: 7% * 13))
#align(center)[Mosse di tipo I che aggiungono un ricciolo]
== Comportamento Isotopia Regolare
#v(2em)
#figure(image("assets/modified-r2-before.png", width: 8% * 6.5))
#figure(image("assets/modified-r2-after.png", width: 8% * 8.5))
#align(center)[Mosse di tipo II, III]
== Writhe
*Def.* Definiamo *il segno* di un incrocio di un diagramma come segue:
$
epsilon(#skein-generic(size-factor: 1.5, direction: (+1, +1))) = +1
#h(2em)
epsilon(#skein-generic(size-factor: 1.5, direction: (+1, -1))) = -1
$
*Def.* $K$ link orientato, definiamo il *writhe* $display(w(K) colon.eq sum_(c "incrocio") epsilon(c))$.
#pause
\
*Prop.* Se $K$ è il diagramma di un nodo, il _writhe_ non dipende dall'orientazione.
#pause
*Prop.* Il writhe è un invariante di isotopia regolare, ovvero $K_1 tilde K_2 => w(K_1) = w(K_2)$.
= Polinomio di Kauffman = Polinomio di Kauffman
== Il Writhe: Un Primo Invariante == Assiomi
#slide[ *Def.* Sia $K$ un diagramma di un link non orientato, $L_K in bb(Z)[a, a^(-1), z, z^(-1)]$ e verifica:
*Definizione del segno di un incrocio:*
$epsilon(skein.over) = +1 quad quad epsilon(skein.under) = -1$
#pause 1. $K tilde K' => L_K = L_K'$.
*Il writhe:* $w(K) := sum_("incroci " c) epsilon(c)$ 2. Valgono le seguenti relazioni:
#pause #set par(spacing: 1.25em)
#set enum(numbering: "a)", spacing: 1.75em)
*Proprietà:* 1. $L[#skein.over-large] + L[#skein.under-large] = z (L[#skein.h-large] + L[#skein.v-large])$
- Invariante per mosse II e III ✓
- NON invariante per mossa I ✗
#pause 2. $L[#skein.unit-large] = 1$
*Formula di correzione:* Se $L_K$ è invariante per isotopia regolare con 3. $L[#skein.over-twist-large] = a L[#skein.strand-large]$
$L(#text("sopra-ricciolo")) = a L(#text("filo"))$, $L(#text("sotto-ricciolo")) = a^(-1) L(#text("filo"))$
Allora: $F_K := a^(-w(K)) L_K$ è invariante per isotopia ambiente! 4. $L[#skein.under-twist-large] = a^(-1) L[#skein.strand-large]$
]
== Il Polinomio di Kauffman: Definizione #pause
#slide[ \
Il protagonista: $L_K (a,z) in bb(Z)[a, a^(-1), z, z^(-1)]$
*Assiomi:* *Osservazione.* A questo punto non sappiamo se $L_K$ sia ben definito.
1. Se $K$, $K'$ sono equivalenti a meno di isotopia regolare, allora $L_K = L_K'$
#pause == Calcoli impliciti
2. Relazioni skein: #let knot-picture(src, ..rest) = $thin #image("assets/derived/atlas-" + src, ..rest) thin$
- $L(#text("sopra")) + L(#text("sotto")) = z(L(#text("h-splice")) + L(#text("v-splice")))$
- $L(#text("nodo banale")) = 1$
- $L(#text("sopra-ricciolo")) = a L(#text("filo"))$, $L(#text("sotto-ricciolo")) = a^(-1) L(#text("filo"))$
#pause #{
set align(center)
*Domanda:* Gli assiomi definiscono univocamente $L_K$? 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 ]
+
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
$,
)
}
== Esempio: Link di Hopf == Calcoli impliciti
#{
set align(center)
show math.equation: set text(size: 15pt)
grid(
columns: 2,
row-gutter: 1.5em,
column-gutter: 3em,
align: center + top,
[*Link di Hopf*], [*Nodo trifoglio*],
$
& 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
$,
$
& 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
$,
)
}
#slide[ == Invariante di isotopia ambiente associato
Applichiamo la relazione skein:
$L[#text("Hopf")] + L[#text("versione scambiata")] = z(L[#text("due cerchi")] + L[#text("due fili")])$ *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
$
#pause dove $L_K$ di un diagramma orientato è definito dimenticando l'orientazione.
Sapendo che: *Prop.* Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente.
- $L[#text("due cerchi")] = delta = (a + a^(-1))/z - 1$
- $L[#text("due fili")] = a + a^(-1)$
#pause == Considerazioni preliminari
Otteniamo: *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$:
$L[#text("Hopf")] = -(a + a^(-1))z^(-1) + 1 + (a + a^(-1))z$
#pause #{
set align(center)
Questi calcoli suggeriscono che $L_K$ esiste, ma serve una dimostrazione rigorosa! v(1em)
]
== La Sfida della Buona Definizione grid(
columns: 4,
column-gutter: 2em,
row-gutter: 1em,
align: center,
{
skein.over-large
place(center + top, dy: -0.25em, {
show math.equation: set text(size: 15pt)
$i$
})
},
{
skein.under-large
place(center + top, dy: -0.25em, {
show math.equation: set text(size: 15pt)
$i$
})
},
skein.h-large,
skein.v-large,
#slide[ $K$, $S_i K$, $E_i K$, $e_i K$,
*Problema centrale:* Gli assiomi definiscono $L_K$ in modo unico? )
#pause v(1em)
*Sfide:* $
1. Gli assiomi sono *impliciti* (relazioni, non formule) A_i^lambda colon.eq E_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
2. Come garantire che esista una soluzione? #h(2em)
3. Come garantire l'unicità? B_i^lambda colon.eq e_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
4. Come verificare l'indipendenza dalle scelte computazionali? $
#pause v(1em)
*Scelte che potrebbero influenzare il risultato:* $
- Scelta del punto base $p$ su ogni componente sum_K (lambda) colon.eq sum_(i=0)^n (-1)^i (L[A_i^lambda K] + L[B_i^lambda K])
- Direzione del punto base (orario vs antiorario) $
- Ordine delle operazioni nelle sequenze }
#pause == Considerazioni preliminari
#align(center)[ #let dotss = $space dots.c space$
#box(fill: red.lighten(80%), inset: 1em, radius: 5pt)[
*Senza questa dimostrazione, $L_K$ non sarebbe ben definito!*
]
]
]
== Ingredienti per la Costruzione #slide(
repeat: 5,
self => [
#slide[
*Concetti chiave necessari:*
1. *Nodo banale standard*: $hat(K)(cal(U), p)$ #v(2em)
- Percorrere l'ombra planare da un punto base $p$
- Primo passaggio su ogni incrocio = sopra-incrocio
#pause #{
set align(center)
2. *Operazioni sui diagrammi*: [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
- $S_i K$: scambia l'incrocio $i$ }
- $E_i K$, $e_i K$: splice orizzontale e verticale
#pause #v(1em)
3. *Sequenze di scambi*: $lambda = (lambda_n, dots, lambda_0)$
- Trasformano $K$ in $hat(K)(lambda)$
#pause #let (only, uncover) = utils.methods(self)
*Proprietà fondamentale:* $L[hat(K)] = a^(w(hat(K)))$ #only(
] "1-3",
$
& L[K] + L[S_0 K] = z( L[E_0 K] + L[e_0 K] ) \
& pause L[S_0 K] + L[S_1 S_0 K] = z( L[E_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
& pause L[S_(n-1) dotss S_0 K] + L [hat(K)] = z (L[E_n S_(n-1) dotss S_0 K] + L[e_n S_(n-1) dotss S_0 K])
$,
)
#only(
4,
$
& 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_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
(-1)^n ( & 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])
$,
)
#only(
5,
$
& 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_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
(-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])
$,
)
#{
set text(fill: white)
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]
)
)$
== La Formula Ricorsiva
v(1.5em)
$
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
$
}
],
)
#slide[ #slide[
*Idea*: Esprimere $L_K$ in termini di diagrammi "più semplici"
Applicando le relazioni skein incrementalmente:
#v(2em)
#{
set align(center)
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
}
#v(1em)
$ $
L[K] + L[S_0 K] & = z(L[E_0 K] + L[e_0 K]) \ & L[K] + cancel(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_1 S_0 K] + L[e_1 S_0 K]) \ -(& cancel(L[S_0 K]) + cancel(L[S_1 S_0 K])) = -z( L[E_1 S_0 K] + L[e_1 S_0 K] ) \
& dots.v \ & space 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]) (-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])
$ $
#pause #{
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]
)
)$
}
Sommando e sottraendo membro a membro, i termini intermedi si cancellano! #{
set text(fill: white)
#pause
*Formula finale:* v(1.5em)
$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])$ $
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
$
}
] ]
== Definizione Induttiva Completa
#slide[ #slide[
*Caso 1:* $K = hat(K)$ (nodo banale standard)
$L_K = a^(w(K))$
#pause
*Caso 2:* $K = K_1 union K_2$ con $K_1$ sovrastante $K_2$ #v(2em)
$L_K = delta L_(K_1) L_(K_2)$ dove $delta = (a + a^(-1))/z - 1$
#pause #{
set align(center)
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
}
*Caso 3:* Uso della formula ricorsiva: #v(1em)
$L_K = 1/2 [sum_(q = p, overline(p)) ((-1)^(abs(lambda(q))+1) L_(hat(K)(q)) + z sum_K (lambda(q)))]$
#pause
*Proprietà cruciale:* Ogni termine a destra ha meno incroci o è "più vicino" al caso base $
] & 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_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
(-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])
$
== Strategia della Dimostrazione #{
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[ #slide[
*Ipotesi induttiva* (per diagrammi con $< N$ incroci):
1. $L_K$ è ben definito (indipendente dalle scelte)
2. $L_K$ verifica tutte le relazioni skein
3. $L_K$ è invariante per mosse II e III che non aumentano gli incroci
#pause #v(2em)
*Lemmi tecnici fondamentali:* #{
set align(center)
- *Lemma delle Rotazioni*: L'ordine ciclico degli scambi non influenza il risultato [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
- *Invarianza del punto base*: La definizione non dipende dal punto base scelto }
- *Identità per nodi banali*: $L[hat(K)(p)] + L[hat(K)(q)] = z(L[E_i hat(K)] + L[e_i hat(K)])$
#pause #v(1em)
*Metodo:* Spostando il punto base di un incrocio per volta, si dimostra l'invarianza completa
]
== Verifica degli Assiomi e Invarianza $
& 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_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
(-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)
$
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
$
}
]
#slide[ #slide[
*Teorema*: La definizione induttiva soddisfa tutti gli assiomi di Kauffman
#pause
*Dimostrazione per le relazioni skein*: #v(2em)
1. Scegli il punto base in modo che l'incrocio sia il primo nella sequenza
2. La relazione skein emerge naturalmente dalla formula ricorsiva
3. Gli altri termini si cancellano per simmetria
#pause #{
set align(center)
*Invarianza per isotopia regolare*: [Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
- *Mossa II*: scegli punti base che evitano gli incroci coinvolti }
- *Mossa III*: usa equivalenze locali e induzione
#pause #v(1em)
#align(center)[
La costruzione induttiva "conosce automaticamente" tutte le proprietà necessarie! $
] & 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_1 S_0 K] + L[e_1 S_0 K] ) \
& space dots.v \
(-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]
)
)$
}
#{
v(1.5em)
$
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
$
}
] ]
== Definizione induttiva
*Def (induttiva di $L_K$).* Il polinomio $L_(K)(a,z)$ è definito induttivamente come segue:
// 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)$
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
$
3. Altrimenti $K = K_1 union dotss union K_n$:
#v(0.75em)
a) Se $n > 1$: $display(
L_K (a, z) colon.eq
1 / (2n)
sum_(i=1)^n sum_(q=p_i, overline(p)_i)
((-1)^(abs(lambda(q))+1) delta L_(K_i) L_(K - K_i) + z sum_K (lambda(q)))
)$
#v(1.5em)
b) Se $n=1$: $display(
L_K (a, z) colon.eq
1 / 2
sum_(q = p, overline(p))
((-1)^(abs(lambda(q))+1) L_(hat(K)(q)) + z sum_K (lambda(q)))
)$
== Dimostrazione buona definizione
== Ipotesi induttiva
Bla bla bla
= Laboratorio Computazionale = Laboratorio Computazionale
== Implementazione e Verifica == Implementazione e Verifica

@ -1,23 +1,29 @@
#import "@preview/touying:0.6.1": * #import "@preview/touying:0.6.1": *
#let _tblock(self: none, title: none, it) = { #let _tblock(self: none, title: none, it) = {
grid(columns: 1, row-gutter: 0pt, block( grid(
fill: self.colors.primary-dark, columns: 1,
width: 100%, row-gutter: 0pt,
radius: (top: 6pt), block(
inset: (top: 0.4em, bottom: 0.3em, left: 0.5em, right: 0.5em), fill: self.colors.primary-dark,
text(fill: self.colors.neutral-lightest, weight: "bold", title), width: 100%,
), rect( radius: (top: 6pt),
fill: gradient.linear(self.colors.primary-dark, self.colors.primary.lighten(90%), angle: 90deg), inset: (top: 0.4em, bottom: 0.3em, left: 0.5em, right: 0.5em),
width: 100%, text(fill: self.colors.neutral-lightest, weight: "bold", title),
height: 4pt, ),
), block( rect(
fill: self.colors.primary.lighten(90%), fill: gradient.linear(self.colors.primary-dark, self.colors.primary.lighten(90%), angle: 90deg),
width: 100%, width: 100%,
radius: (bottom: 6pt), height: 4pt,
inset: (top: 0.4em, bottom: 0.5em, left: 0.5em, right: 0.5em), ),
it, block(
)) fill: self.colors.primary.lighten(90%),
width: 100%,
radius: (bottom: 6pt),
inset: (top: 0.4em, bottom: 0.5em, left: 0.5em, right: 0.5em),
it,
),
)
} }
#let tblock(title: none, it) = touying-fn-wrapper(_tblock.with(title: title, it)) #let tblock(title: none, it) = touying-fn-wrapper(_tblock.with(title: title, it))
@ -89,7 +95,7 @@
// institution // institution
if info.institution != none { if info.institution != none {
parbreak() parbreak()
text(size: 0.7em, info.institution) text(size: 0.8em, info.institution)
} }
// date // date
if info.date != none { if info.date != none {
@ -100,29 +106,47 @@
touying-slide(self: self, body) touying-slide(self: self, body)
}) })
#let outline-slide(config: (:), title: utils.i18n-outline-title, numbered: true, level: none, ..args) = touying-slide-wrapper(self => { #let outline-slide(
self.store.title = title config: (:),
touying-slide(self: self, config: config, std.align(self.store.align, components.adaptive-columns({ title: utils.i18n-outline-title,
text(fill: self.colors.primary, weight: 600, components.custom-progressive-outline( numbered: true,
level: level, level: none,
alpha: self.store.alpha, ..args,
indent: (0em, 1em), ) = touying-slide-wrapper(self => {
vspace: (.4em,), self.store.title = "Indice"
numbered: (numbered,), touying-slide(self: self, config: config, std.align(
depth: 1, self.store.align,
..args.named(), components.adaptive-columns({
)) text(fill: self.colors.primary, weight: 600, components.custom-progressive-outline(
}) + args.pos().sum(default: none))) level: level,
alpha: self.store.alpha,
indent: (0em, 1em),
vspace: (.4em,),
numbered: (numbered,),
depth: 1,
..args.named(),
))
})
+ args.pos().sum(default: none),
))
}) })
#let new-section-slide(config: (:), title: utils.i18n-outline-title, level: 1, numbered: true, ..args, body) = outline-slide(config: config, title: title, level: level, numbered: numbered, ..args, body) #let new-section-slide(
config: (:),
title: utils.i18n-outline-title,
level: 1,
numbered: true,
..args,
body,
) = outline-slide(config: config, title: title, level: level, numbered: numbered, ..args, body)
#let focus-slide(config: (:), align: horizon + center, body) = touying-slide-wrapper(self => { #let focus-slide(config: (:), align: horizon + center, body) = touying-slide-wrapper(self => {
self = utils.merge-dicts( self = utils.merge-dicts(self, config-common(freeze-slide-counter: true), config-page(
self, fill: self.colors.primary,
config-common(freeze-slide-counter: true), margin: 2em,
config-page(fill: self.colors.primary, margin: 2em, header: none, footer: none), header: none,
) footer: none,
))
set text(fill: self.colors.neutral-lightest, weight: "bold", size: 1.5em) set text(fill: self.colors.neutral-lightest, weight: "bold", size: 1.5em)
touying-slide(self: self, config: config, std.align(align, body)) touying-slide(self: self, config: config, std.align(align, body))
}) })
@ -131,12 +155,11 @@
let content = { let content = {
set std.align(center + horizon) set std.align(center + horizon)
if title != none { if title != none {
block( block(fill: self.colors.tertiary, inset: (top: 0.7em, bottom: 0.7em, left: 3em, right: 3em), radius: 0.5em, text(
fill: self.colors.tertiary, size: 1.5em,
inset: (top: 0.7em, bottom: 0.7em, left: 3em, right: 3em), fill: self.colors.neutral-lightest,
radius: 0.5em, title,
text(size: 1.5em, fill: self.colors.neutral-lightest, title), ))
)
} }
body body
} }
@ -176,7 +199,11 @@
rows: (auto, auto), rows: (auto, auto),
utils.call-or-display(self, self.store.footer), utils.call-or-display(self, self.store.footer),
if self.store.progress-bar { if self.store.progress-bar {
utils.call-or-display(self, components.progress-bar(height: 2pt, self.colors.primary, self.colors.neutral-lightest)) utils.call-or-display(self, components.progress-bar(
height: 2pt,
self.colors.primary,
self.colors.neutral-lightest,
))
}, },
) )
} }
@ -191,26 +218,30 @@
margin: (top: 3.5em, bottom: 2.5em, x: 2.5em), margin: (top: 3.5em, bottom: 2.5em, x: 2.5em),
), ),
config-common(slide-fn: slide, new-section-slide-fn: new-section-slide), config-common(slide-fn: slide, new-section-slide-fn: new-section-slide),
config-methods(init: (self: none, body) => { config-methods(
set text(size: 18pt, font: "Open Sans") init: (self: none, body) => {
set par(leading: 0.75em) set text(size: 18pt, font: "Open Sans")
set list(marker: { set par(leading: 0.75em)
place(top + left, dy: 0.2em, circle(fill: self.colors.primary, radius: 3pt)) set list(marker: {
h(0.25em) place(top + left, dy: 0.2em, circle(fill: self.colors.primary, radius: 3pt))
}) h(0.25em)
show figure.caption: set text(size: 0.6em) })
show footnote.entry: set text(size: 0.6em) show figure.caption: set text(size: 0.6em)
show heading: set text(fill: self.colors.primary) show footnote.entry: set text(size: 0.6em)
show link: it => if type(it.dest) == str { show heading: set text(fill: self.colors.primary)
set text(fill: self.colors.primary) show link: it => if type(it.dest) == str {
it set text(fill: self.colors.primary)
} else { it
it } else {
} it
show figure.where(kind: table): set figure.caption(position: top) }
show figure.where(kind: table): set figure.caption(position: top)
body body
}, alert: utils.alert-with-primary-color, tblock: _tblock), },
alert: utils.alert-with-primary-color,
tblock: _tblock,
),
config-colors( config-colors(
primary: rgb("#003c71"), primary: rgb("#003c71"),
primary-dark: rgb("#005baa"), primary-dark: rgb("#005baa"),
@ -236,16 +267,14 @@
logo: utils.call-or-display(self, self.store.header-right), logo: utils.call-or-display(self, self.store.header-right),
), ),
header: self => if self.store.title != none { header: self => if self.store.title != none {
block( block(width: 100%, height: 2em, fill: self.colors.primary, place(
width: 100%, left + horizon,
height: 2em, text(fill: self.colors.neutral-lightest, weight: 600, size: 1.2em, utils.call-or-display(
fill: self.colors.primary, self,
place( self.store.title,
left + horizon, )),
text(fill: self.colors.neutral-lightest, weight: 600, size: 1.2em, utils.call-or-display(self, self.store.title)), dx: 1.5em,
dx: 1.5em, ))
),
)
}, },
footer: self => { footer: self => {
let cell(fill: none, it) = rect( let cell(fill: none, it) = rect(

@ -4,7 +4,10 @@
import cetz.draw: * import cetz.draw: *
// draw the white outline // draw the white outline
set-style(..cetz.styles.resolve((stroke: (paint: white, thickness: size-factor * 0.75pt * 8, cap: "butt")), base: style)) set-style(..cetz.styles.resolve(
(stroke: (paint: white, thickness: size-factor * 0.75pt * 8, cap: "butt")),
base: style,
))
polyline polyline
// draw the black line // draw the black line
@ -81,6 +84,49 @@
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) }) draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
}), }),
// //
// Large
//
unit-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
circle((0, 0), radius: 1, stroke: (paint: black, thickness: 0.75pt))
}),
over-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ line((-1, -1), (1, 1)) })
draw-strand({ line((-1, 1), (1, -1)) })
}),
under-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ line((-1, 1), (1, -1)) })
draw-strand({ line((-1, -1), (1, 1)) })
}),
h-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ hobby((-1, -1), (0, -0.61), (1, -1), omega: 1) })
draw-strand({ hobby((-1, 1), (0, +0.61), (1, 1), omega: 1) })
}),
v-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ hobby((-1, -1), (-0.61, 0), (-1, 1), omega: 1) })
draw-strand({ hobby((1, -1), (+0.61, 0), (1, 1), omega: 1) })
}),
strand-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
rect((-1, -1), (1, 1), fill: white, stroke: none)
draw-strand({ hobby((-1, 0), (0, 0.25), (1, 0), omega: 1) })
}),
over-twist-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
draw-strand({ hobby((-1.5, +1), (-1, +1), (0.5, 0), (0.1, -1), (0, -1)) })
}),
under-twist-large: skein-canvas(size-factor: 1.5, {
import cetz.draw: *
draw-strand({ hobby((-1.5, +1), (-1, +1), (0.5, 0), (0.1, -1), (0, -1)) })
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
}),
//
// Medium // Medium
// //
unit-medium: skein-canvas(size-factor: medium-scale-factor, { unit-medium: skein-canvas(size-factor: medium-scale-factor, {
@ -123,16 +169,16 @@
}), }),
) )
#let skein-generic(kind: "over", direction: (+1, +1), arrows: (true, true), styles: ((:), (:))) = { #let skein-generic(kind: "over", direction: (+1, +1), arrows: (true, true), styles: ((:), (:)), size-factor: 1.0) = {
skein-canvas({ skein-canvas(size-factor: size-factor, {
import cetz.draw: * import cetz.draw: *
if kind == "over" { if kind == "over" {
draw-strand({ line((-1, -1), (1, 1)) }, style: styles.at(1)) draw-strand(size-factor: size-factor, { line((-1, -1), (1, 1)) }, style: styles.at(1))
draw-strand({ line((-1, 1), (1, -1)) }, style: styles.at(0)) draw-strand(size-factor: size-factor, { line((-1, 1), (1, -1)) }, style: styles.at(0))
} }
if kind == "under" { if kind == "under" {
draw-strand({ line((-1, 1), (1, -1)) }, style: styles.at(0)) draw-strand(size-factor: size-factor, { line((-1, 1), (1, -1)) }, style: styles.at(0))
draw-strand({ line((-1, -1), (1, 1)) }, style: styles.at(1)) draw-strand(size-factor: size-factor, { line((-1, -1), (1, 1)) }, style: styles.at(1))
} }
if arrows.at(0) { if arrows.at(0) {

Loading…
Cancel
Save