presentation fwjpfejipwfwe
This commit is contained in:
Binary file not shown.
Binary file not shown.
+1
-1
@@ -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)
|
||||
|
||||
|
||||
+533
-244
@@ -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)
|
||||
// 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])
|
||||
},
|
||||
// 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$:
|
||||
|
||||
// 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*.
|
||||
|
||||
*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.
|
||||
|
||||
#grid(
|
||||
columns: (1fr, auto),
|
||||
gutter: 1em,
|
||||
[
|
||||
*Def.* Le mosse I, II, III sono dette *mosse di Reidemeister*.
|
||||
#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 di isotopie planari e mosse di Reidemeister.
|
||||
],
|
||||
pad(top: 1em, figure(image("assets/reidemeister-moves.jpg", height: 6.75cm))),
|
||||
*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)),
|
||||
),
|
||||
)
|
||||
|
||||
== Isotopia Regolare
|
||||
|
||||
|
||||
*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
|
||||
|
||||
#slide[
|
||||
Applichiamo la relazione skein:
|
||||
#{
|
||||
set align(center)
|
||||
show math.equation: set text(size: 15pt)
|
||||
|
||||
$L[#text("Hopf")] + L[#text("versione scambiata")] = z(L[#text("due cerchi")] + L[#text("due fili")])$
|
||||
grid(
|
||||
columns: 2,
|
||||
row-gutter: 1.5em,
|
||||
column-gutter: 3em,
|
||||
align: center + top,
|
||||
|
||||
#pause
|
||||
[*Link di Hopf*], [*Nodo trifoglio*],
|
||||
|
||||
Sapendo che:
|
||||
- $L[#text("due cerchi")] = delta = (a + a^(-1))/z - 1$
|
||||
- $L[#text("due fili")] = a + a^(-1)$
|
||||
$
|
||||
& 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
|
||||
$,
|
||||
)
|
||||
}
|
||||
|
||||
#pause
|
||||
== Invariante di isotopia ambiente associato
|
||||
|
||||
Otteniamo:
|
||||
$L[#text("Hopf")] = -(a + a^(-1))z^(-1) + 1 + (a + a^(-1))z$
|
||||
*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.
|
||||
|
||||
Questi calcoli suggeriscono che $L_K$ esiste, ma serve una dimostrazione rigorosa!
|
||||
]
|
||||
*Prop.* Il polinomio $F_K (a, z)$ è un invariante di isotopia ambiente.
|
||||
|
||||
== La Sfida della Buona Definizione
|
||||
== Considerazioni preliminari
|
||||
|
||||
#slide[
|
||||
*Problema centrale:* Gli assiomi definiscono $L_K$ in modo unico?
|
||||
*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)
|
||||
|
||||
*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?
|
||||
v(1em)
|
||||
|
||||
#pause
|
||||
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,
|
||||
|
||||
*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
|
||||
$K$, $S_i K$, $E_i K$, $e_i K$,
|
||||
)
|
||||
|
||||
#pause
|
||||
v(1em)
|
||||
|
||||
#align(center)[
|
||||
#box(fill: red.lighten(80%), inset: 1em, radius: 5pt)[
|
||||
*Senza questa dimostrazione, $L_K$ non sarebbe ben definito!*
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
== Ingredienti per la Costruzione
|
||||
|
||||
#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
|
||||
|
||||
#pause
|
||||
|
||||
2. *Operazioni sui diagrammi*:
|
||||
- $S_i K$: scambia l'incrocio $i$
|
||||
- $E_i K$, $e_i K$: splice orizzontale e verticale
|
||||
|
||||
#pause
|
||||
|
||||
3. *Sequenze di scambi*: $lambda = (lambda_n, dots, lambda_0)$
|
||||
- Trasformano $K$ in $hat(K)(lambda)$
|
||||
|
||||
#pause
|
||||
|
||||
*Proprietà fondamentale:* $L[hat(K)] = a^(w(hat(K)))$
|
||||
]
|
||||
|
||||
== La Formula Ricorsiva
|
||||
|
||||
#slide[
|
||||
*Idea*: Esprimere $L_K$ in termini di diagrammi "più semplici"
|
||||
|
||||
Applicando le relazioni skein incrementalmente:
|
||||
$
|
||||
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])
|
||||
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)
|
||||
|
||||
Sommando e sottraendo membro a membro, i termini intermedi si cancellano!
|
||||
$
|
||||
sum_K (lambda) colon.eq sum_(i=0)^n (-1)^i (L[A_i^lambda K] + L[B_i^lambda K])
|
||||
$
|
||||
}
|
||||
|
||||
#pause
|
||||
== Considerazioni preliminari
|
||||
|
||||
*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])$
|
||||
]
|
||||
#let dotss = $space dots.c space$
|
||||
|
||||
== Definizione Induttiva Completa
|
||||
#slide(
|
||||
repeat: 5,
|
||||
self => [
|
||||
|
||||
|
||||
#v(2em)
|
||||
|
||||
#{
|
||||
set align(center)
|
||||
|
||||
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
|
||||
}
|
||||
|
||||
#v(1em)
|
||||
|
||||
|
||||
#let (only, uncover) = utils.methods(self)
|
||||
|
||||
#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]
|
||||
)
|
||||
)$
|
||||
|
||||
|
||||
v(1.5em)
|
||||
$
|
||||
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
|
||||
$
|
||||
}
|
||||
|
||||
],
|
||||
)
|
||||
|
||||
#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)
|
||||
|
||||
*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)))]$
|
||||
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
|
||||
}
|
||||
|
||||
#pause
|
||||
#v(1em)
|
||||
|
||||
*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])
|
||||
$
|
||||
|
||||
#{
|
||||
v(1.5em)
|
||||
|
||||
h(4.4em)
|
||||
$display(
|
||||
=> L[K] + (-1)^n L[hat(K)] =
|
||||
z sum_(i=0)^n (-1)^i (
|
||||
L[E_i S_(i-1) dotss S_0 K] + L[e_i S_(i-1) dotss S_0 K]
|
||||
)
|
||||
)$
|
||||
}
|
||||
|
||||
#{
|
||||
set text(fill: white)
|
||||
|
||||
|
||||
v(1.5em)
|
||||
$
|
||||
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
|
||||
$
|
||||
}
|
||||
]
|
||||
|
||||
== Strategia della Dimostrazione
|
||||
|
||||
#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
|
||||
|
||||
$
|
||||
& 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 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)
|
||||
$
|
||||
}
|
||||
]
|
||||
|
||||
== Verifica degli Assiomi e Invarianza
|
||||
|
||||
#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]
|
||||
)
|
||||
)$
|
||||
}
|
||||
|
||||
#{
|
||||
set text(fill: white)
|
||||
|
||||
|
||||
v(1.5em)
|
||||
$
|
||||
Omega_K (lambda) colon.eq (-1)^(abs(lambda) + 1) L[hat(K)(lambda)] + z sum_K (lambda)
|
||||
$
|
||||
}
|
||||
]
|
||||
|
||||
#slide[
|
||||
|
||||
|
||||
#v(2em)
|
||||
|
||||
#{
|
||||
set align(center)
|
||||
|
||||
[Sia $lambda$ una sequenza di scambi che porta $K$ a $hat(K)$:]
|
||||
}
|
||||
|
||||
#v(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_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
|
||||
|
||||
+103
-74
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+53
-7
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user