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[
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)

@ -16,31 +16,32 @@
#show: dm-unipi-theme.with(aspect-ratio: "16-9", config-info(
title: [Il Polinomio di Kauffman: un invariante di isotopia regolare],
subtitle: [Tesi di Laurea Triennale],
author: {
set align(center)
grid(
columns: 2,
row-gutter: 0.75em,
column-gutter: 0.5em,
align: (right, left),
[*Candidato:*], [Antonio De Lucreziis],
[*Relatore:*], [Paolo Lisca],
)
// grid(align: left, [*Candidato:* Antonio De Lucreziis \ *Relatore:* Paolo Lisca])
},
// author: {
// set align(center)
// grid(
// columns: 2,
// row-gutter: 0.75em,
// column-gutter: 0.5em,
// align: (right, 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],
institution: [Dipartimento di Matematica \ Università di Pisa],
logo: image("assets/dm-unipi-logo-bianco.png"),
))
// #set text(font: "Source Sans Pro", weight: 500, size: 20pt)
#set text(font: "Open Sans", weight: 400, size: 17pt)
#show math.equation: set text(size: 20pt)
#set text(font: "Open Sans", weight: 400, size: 16pt)
#show math.equation: set text(size: 19pt)
#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 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), {
set align(left)
@ -48,22 +49,6 @@
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()
@ -71,85 +56,44 @@
== Introduzione
#slide[
*Def.* $X, Y$ spazi topologici, $f : X arrow Y$ continua è *embedding* se $X approx f(X) subset Y$.
#definition[
$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]$.
#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:
]
\
#{
set align(center)
*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)$.
grid(
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])
]
*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
#slide[
#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:
*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:
- $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[
*Def.* Un *nodo poligonale* è un nodo equivalente ad un'unione finita di segmenti lineari.
// == Introduzione
*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.
\
*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$.
]
// *Fatto (Crowell).* Dato un nodo $K subset bb(R)^3$, $K$ è *nodo (tame)* $<=>$ $K$ è *poligonale*.
== 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:
#grid(
columns: (auto, 1fr),
gutter: 1em,
figure(image("assets/projection-plane.png", height: 6cm)),
[
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:
@ -166,237 +110,582 @@
== 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.
],
pad(top: 1em, figure(image("assets/reidemeister-moves.jpg", height: 6.75cm))),
)
*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.
#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
== Il Writhe: Un Primo Invariante
== Assiomi
#slide[
*Definizione del segno di un incrocio:*
$epsilon(skein.over) = +1 quad quad epsilon(skein.under) = -1$
*Def.* Sia $K$ un diagramma di un link non orientato, $L_K in bb(Z)[a, a^(-1), z, z^(-1)]$ e verifica:
#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à:*
- Invariante per mosse II e III ✓
- NON invariante per mossa I ✗
1. $L[#skein.over-large] + L[#skein.under-large] = z (L[#skein.h-large] + L[#skein.v-large])$
#pause
2. $L[#skein.unit-large] = 1$
*Formula di correzione:* Se $L_K$ è invariante per isotopia regolare con
$L(#text("sopra-ricciolo")) = a L(#text("filo"))$, $L(#text("sotto-ricciolo")) = a^(-1) L(#text("filo"))$
3. $L[#skein.over-twist-large] = a L[#skein.strand-large]$
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:*
1. Se $K$, $K'$ sono equivalenti a meno di isotopia regolare, allora $L_K = L_K'$
*Osservazione.* A questo punto non sappiamo se $L_K$ sia ben definito.
#pause
== Calcoli impliciti
2. Relazioni skein:
- $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"))$
#let knot-picture(src, ..rest) = $thin #image("assets/derived/atlas-" + src, ..rest) thin$
#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[
Applichiamo la relazione skein:
== Invariante di isotopia ambiente associato
$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:
- $L[#text("due cerchi")] = delta = (a + a^(-1))/z - 1$
- $L[#text("due fili")] = a + a^(-1)$
*Prop.* Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente.
#pause
== Considerazioni preliminari
Otteniamo:
$L[#text("Hopf")] = -(a + a^(-1))z^(-1) + 1 + (a + a^(-1))z$
*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$:
#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[
*Problema centrale:* Gli assiomi definiscono $L_K$ in modo unico?
$K$, $S_i K$, $E_i K$, $e_i K$,
)
#pause
v(1em)
*Sfide:*
1. Gli assiomi sono *impliciti* (relazioni, non formule)
2. Come garantire che esista una soluzione?
3. Come garantire l'unicità?
4. Come verificare l'indipendenza dalle scelte computazionali?
$
A_i^lambda colon.eq E_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
#h(2em)
B_i^lambda colon.eq e_lambda_i S_lambda_(i-1) dots.c space S_lambda_0
$
#pause
v(1em)
*Scelte che potrebbero influenzare il risultato:*
- Scelta del punto base $p$ su ogni componente
- Direzione del punto base (orario vs antiorario)
- Ordine delle operazioni nelle sequenze
$
sum_K (lambda) colon.eq sum_(i=0)^n (-1)^i (L[A_i^lambda K] + L[B_i^lambda K])
$
}
#pause
== Considerazioni preliminari
#align(center)[
#box(fill: red.lighten(80%), inset: 1em, radius: 5pt)[
*Senza questa dimostrazione, $L_K$ non sarebbe ben definito!*
]
]
]
#let dotss = $space dots.c space$
== Ingredienti per la Costruzione
#slide(
repeat: 5,
self => [
#slide[
*Concetti chiave necessari:*
1. *Nodo banale standard*: $hat(K)(cal(U), p)$
- Percorrere l'ombra planare da un punto base $p$
- Primo passaggio su ogni incrocio = sopra-incrocio
#v(2em)
#pause
#{
set align(center)
2. *Operazioni sui diagrammi*:
- $S_i K$: scambia l'incrocio $i$
- $E_i K$, $e_i K$: splice orizzontale e verticale
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
}
#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[
*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[S_0 K] + L[S_1 S_0 K] & = z(L[E_1 S_0 K] + L[e_1 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])
& 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])
$
#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:*
$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 Completa
#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$
$L_K = delta L_(K_1) L_(K_2)$ dove $delta = (a + a^(-1))/z - 1$
#v(2em)
#pause
#{
set align(center)
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
}
*Caso 3:* Uso della formula ricorsiva:
$L_K = 1/2 [sum_(q = p, overline(p)) ((-1)^(abs(lambda(q))+1) L_(hat(K)(q)) + z sum_K (lambda(q)))]$
#v(1em)
#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[
*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
- *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)])$
[Sia $lambda$ una sequenza di scambi che porta $K$ a $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[
*Teorema*: La definizione induttiva soddisfa tutti gli assiomi di Kauffman
#pause
*Dimostrazione per le relazioni skein*:
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
#v(2em)
#pause
#{
set align(center)
*Invarianza per isotopia regolare*:
- *Mossa II*: scegli punti base che evitano gli incroci coinvolti
- *Mossa III*: usa equivalenze locali e induzione
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
}
#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
== Implementazione e Verifica

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

@ -4,7 +4,10 @@
import cetz.draw: *
// 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
// draw the black line
@ -81,6 +84,49 @@
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
//
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: ((:), (:))) = {
skein-canvas({
#let skein-generic(kind: "over", direction: (+1, +1), arrows: (true, true), styles: ((:), (:)), size-factor: 1.0) = {
skein-canvas(size-factor: size-factor, {
import cetz.draw: *
if kind == "over" {
draw-strand({ 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(1))
draw-strand(size-factor: size-factor, { line((-1, 1), (1, -1)) }, style: styles.at(0))
}
if kind == "under" {
draw-strand({ 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(0))
draw-strand(size-factor: size-factor, { line((-1, -1), (1, 1)) }, style: styles.at(1))
}
if arrows.at(0) {

Loading…
Cancel
Save