Primera versión terminada

This commit is contained in:
Miguel Marco 2020-10-26 19:57:15 +01:00
parent 979fd6ecdf
commit 250a683fb4
44 changed files with 3616 additions and 7 deletions

451
codigo/zariski_vankampen.py Normal file
View File

@ -0,0 +1,451 @@
r"""
Zariski-Van Kampen method implementation
This file contains functions to compute the fundamental group of
the complement of a curve in the complex affine or projective plane,
using Zariski-Van Kampen approach. It depends on the package ``sirocco``.
The current implementation allows to compute a presentation of the
fundamental group of curves over the rationals or number fields with
a fixed embedding on `\QQbar`.
Instead of computing a representation of the braid monodromy, we
choose several base points and a system of paths joining them that
generate all the necessary loops around the points of the discriminant.
The group is generated by the free groups over these points, and
braids over this paths gives relations between these generators.
This big group presentation is simplified at the end.
.. TODO::
Implement the complete braid monodromy approach.
AUTHORS:
- Miguel Marco (2015-09-30): Initial version
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import fundamental_group # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = y^3 + x^3 -1
sage: fundamental_group(f) # optional - sirocco
Finitely presented group < x0 | >
"""
# ****************************************************************************
# Copyright (C) 2015 Miguel Marco <mmarco@unizar.es>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# https://www.gnu.org/licenses/
# ****************************************************************************
from __future__ import division, absolute_import
from sage.groups.braid import BraidGroup
from sage.groups.perm_gps.permgroup_named import SymmetricGroup
from sage.rings.rational_field import QQ
from sage.rings.qqbar import QQbar
from sage.rings.all import CC
from sage.parallel.decorate import parallel
from sage.misc.flatten import flatten
from sage.groups.free_group import FreeGroup
from sage.misc.misc_c import prod
from sage.rings.complex_field import ComplexField
from sage.rings.complex_interval_field import ComplexIntervalField
from sage.combinat.permutation import Permutation
from sage.functions.generalized import sign
def braid_from_piecewise(strands):
r"""
Compute the braid corresponding to the piecewise linear curves strands.
INPUT:
- ``strands`` -- a list of lists of tuples ``(t, c)``, where ``t``
is a number between 0 and 1, and ``c`` is a complex number
OUTPUT:
The braid formed by the piecewise linear strands.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import braid_from_piecewise # optional - sirocco
sage: paths = [[(0, I), (0.2, -1 - 0.5*I), (0.8, -1), (1, -I)],
....: [(0, -1), (0.5, -I), (1, 1)],
....: [(0, 1), (0.5, 1 + I), (1, I)]]
sage: braid_from_piecewise(paths) # optional - sirocco
s0*s1
"""
L = strands
i = min(val[1][0] for val in L)
totalpoints = [[[a[0][1].real(), a[0][1].imag()]] for a in L]
indices = [1 for a in range(len(L))]
cuts = [0,i]
while i < 1:
for j, val in enumerate(L):
if val[indices[j]][0] > i:
xaux = val[indices[j] - 1][1]
yaux = val[indices[j]][1]
aaux = val[indices[j] - 1][0]
baux = val[indices[j]][0]
interpola = xaux + (yaux - xaux) * (i - aaux) / (baux - aaux)
totalpoints[j].append([interpola.real(), interpola.imag()])
else:
totalpoints[j].append([val[indices[j]][1].real(),
val[indices[j]][1].imag()])
indices[j] = indices[j] + 1
i = min(val[indices[k]][0] for k, val in enumerate(L))
cuts.append(i)
for j, val in enumerate(L):
totalpoints[j].append([val[-1][1].real(), val[-1][1].imag()])
braid = []
G = SymmetricGroup(len(totalpoints))
def sgn(x, y):
if x < y:
return 1
if x > y:
return -1
return 0
for i in range(len(totalpoints[0]) - 1):
l1 = [totalpoints[j][i] for j in range(len(L))]
l2 = [totalpoints[j][i + 1] for j in range(len(L))]
M = [[l1[s], l2[s]] for s in range(len(l1))]
M.sort()
l1 = [a[0] for a in M]
l2 = [a[1] for a in M]
cruces = []
for j in range(len(l2)):
for k in range(j):
if l2[j] < l2[k]:
t = (l1[j][0] - l1[k][0])/(l2[k][0] - l1[k][0] + l1[j][0] - l2[j][0])
s = sgn(l1[k][1]*(1 - t) + t*l2[k][1], l1[j][1]*(1 - t) + t*l2[j][1])
cruces.append([t, k, j, s])
if cruces:
cruces.sort()
P = G(Permutation([]))
while cruces:
# we select the crosses in the same t
crucesl = [c for c in cruces if c[0] == cruces[0][0]]
altura = cuts[i]*(1-cruces[0][0])+cuts[i+1]*cruces[0][0]
crossesl = [(P(c[2] + 1) - P(c[1] + 1), c[1], c[2], c[3])
for c in crucesl]
cruces = cruces[len(crucesl):]
while crossesl:
crossesl.sort()
c = crossesl.pop(0)
braid.append((altura, c[3]*min(map(P, [c[1] + 1, c[2] + 1]))))
P = G(Permutation([(c[1] + 1, c[2] + 1)])) * P
crossesl = [(P(cr[2]+1) - P(cr[1]+1), cr[1], cr[2], cr[3])
for cr in crossesl]
return braid
def discrim(f):
r"""
Return the points in the discriminant of ``f``.
The result is the set of values of the first variable for which
two roots in the second variable coincide.
INPUT:
- ``f`` -- a polynomial in two variables with coefficients in a
number field with a fixed embedding in `\QQbar`
OUTPUT:
A list with the values of the discriminant in `\QQbar`.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import discrim # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = (y^3 + x^3 - 1) * (x + y)
sage: discrim(f) # optional - sirocco
[1,
-0.500000000000000? - 0.866025403784439?*I,
-0.500000000000000? + 0.866025403784439?*I]
"""
x, y = f.variables()
F = f.base_ring()
poly = F[x](f.discriminant(y).resultant(f, y)).radical()
return poly.roots(QQbar, multiplicities=False)
def segments(points):
"""
Return the bounded segments of the Voronoi diagram of the given points.
INPUT:
- ``points`` -- a list of complex points
OUTPUT:
A list of pairs ``(p1, p2)``, where ``p1`` and ``p2`` are the
endpoints of the segments in the Voronoi diagram.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import discrim, segments # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = y^3 + x^3 - 1
sage: disc = discrim(f) # optional - sirocco
sage: segments(disc) # optional - sirocco # abs tol 1e-15
[(-2.84740787203333 - 2.84740787203333*I,
-2.14285714285714 + 1.11022302462516e-16*I),
(-2.84740787203333 + 2.84740787203333*I,
-2.14285714285714 + 1.11022302462516e-16*I),
(2.50000000000000 + 2.50000000000000*I,
1.26513881334184 + 2.19128470333546*I),
(2.50000000000000 + 2.50000000000000*I,
2.50000000000000 - 2.50000000000000*I),
(1.26513881334184 + 2.19128470333546*I, 0.000000000000000),
(0.000000000000000, 1.26513881334184 - 2.19128470333546*I),
(2.50000000000000 - 2.50000000000000*I,
1.26513881334184 - 2.19128470333546*I),
(-2.84740787203333 + 2.84740787203333*I,
1.26513881334184 + 2.19128470333546*I),
(-2.14285714285714 + 1.11022302462516e-16*I, 0.000000000000000),
(-2.84740787203333 - 2.84740787203333*I,
1.26513881334184 - 2.19128470333546*I)]
"""
from numpy import array, vstack
from scipy.spatial import Voronoi
discpoints = array([(CC(a).real(), CC(a).imag()) for a in points])
added_points = 3 * abs(discpoints).max() + 1.0
configuration = vstack([discpoints, array([[added_points, 0],
[-added_points, 0],
[0, added_points],
[0, -added_points]])])
V = Voronoi(configuration)
res = []
for rv in V.ridge_vertices:
if -1 not in rv:
p1 = CC(list(V.vertices[rv[0]]))
p2 = CC(list(V.vertices[rv[1]]))
res.append((p1, p2))
return res
def followstrand(f, x0, x1, y0a, prec=53):
r"""
Return a piecewise linear approximation of the homotopy continuation
of the root ``y0a`` from ``x0`` to ``x1``.
INPUT:
- ``f`` -- a polynomial in two variables
- ``x0`` -- a complex value, where the homotopy starts
- ``x1`` -- a complex value, where the homotopy ends
- ``y0a`` -- an approximate solution of the polynomial `F(y) = f(x_0, y)`
- ``prec`` -- the precision to use
OUTPUT:
A list of values `(t, y_{tr}, y_{ti})` such that:
- ``t`` is a real number between zero and one
- `f(t \cdot x_1 + (1-t) \cdot x_0, y_{tr} + I \cdot y_{ti})`
is zero (or a good enough approximation)
- the piecewise linear path determined by the points has a tubular
neighborhood where the actual homotopy continuation path lies, and
no other root intersects it.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import followstrand # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = x^2 + y^3
sage: x0 = CC(1, 0)
sage: x1 = CC(1, 0.5)
sage: followstrand(f, x0, x1, -1.0) # optional - sirocco # abs tol 1e-15
[(0.0, -1.0, 0.0),
(0.7500000000000001, -1.015090921153253, -0.24752813818386948),
(1.0, -1.026166099551513, -0.32768940253604323)]
"""
CIF = ComplexIntervalField(prec)
CC = ComplexField(prec)
G = f.change_ring(QQbar).change_ring(CIF)
(x, y) = G.variables()
g = G.subs({x: (1 - x) * CIF(x0) + x * CIF(x1)})
coefs = []
deg = g.total_degree()
for d in range(deg + 1):
for i in range(d + 1):
c = CIF(g.coefficient({x: d - i, y: i}))
cr = c.real()
ci = c.imag()
coefs += list(cr.endpoints())
coefs += list(ci.endpoints())
yr = CC(y0a).real()
yi = CC(y0a).imag()
from sage.libs.sirocco import contpath, contpath_mp
try:
if prec == 53:
points = contpath(deg, coefs, yr, yi)
else:
points = contpath_mp(deg, coefs, yr, yi, prec)
return points
except Exception:
return followstrand(f, x0, x1, y0a, 2 * prec)
@parallel
def braid_in_segment(f, x0, x1):
"""
Return the braid formed by the `y` roots of ``f`` when `x` moves
from ``x0`` to ``x1``.
INPUT:
- ``f`` -- a polynomial in two variables
- ``x0`` -- a complex number
- ``x1`` -- a complex number
OUTPUT:
A braid.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import braid_in_segment # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = x^2 + y^3
sage: x0 = CC(1,0)
sage: x1 = CC(1, 0.5)
sage: braid_in_segment(f, x0, x1) # optional - sirocco
s1
TESTS:
Check that :trac:`26503` is fixed::
sage: wp = QQ['t']([1, 1, 1]).roots(QQbar)[0][0]
sage: Kw.<wp> = NumberField(wp.minpoly(), embedding=wp)
sage: R.<x, y> = Kw[]
sage: z = -wp - 1
sage: f = y*(y + z)*x*(x - 1)*(x - y)*(x + z*y - 1)*(x + z*y + wp)
sage: from sage.schemes.curves import zariski_vankampen as zvk
sage: g = f.subs({x: x + 2*y})
sage: p1 = QQbar(sqrt(-1/3))
sage: p2 = QQbar(1/2+sqrt(-1/3)/2)
sage: B = zvk.braid_in_segment(g,CC(p1),CC(p2)) # optional - sirocco
sage: B.left_normal_form() # optional - sirocco
(1, s5)
"""
CC = ComplexField(64)
(x, y) = f.variables()
I = QQbar.gen()
X0 = QQ(x0.real()) + I * QQ(x0.imag())
X1 = QQ(x1.real()) + I * QQ(x1.imag())
F0 = QQbar[y](f(X0, y))
y0s = F0.roots(multiplicities=False)
strands = [followstrand(f, x0, x1, CC(a)) for a in y0s]
complexstrands = [[(a[0], CC(a[1], a[2])) for a in b] for b in strands]
centralbraid = braid_from_piecewise(complexstrands)
return centralbraid
def fundamental_group(f, simplified=True, projective=False):
r"""
Return a presentation of the fundamental group of the complement of
the algebraic set defined by the polynomial ``f``.
INPUT:
- ``f`` -- a polynomial in two variables, with coefficients in either
the rationals or a number field with a fixed embedding in `\QQbar`
- ``simplified`` -- boolean (default: ``True``); if set to ``True`` the
presentation will be simplified (see below)
- ``projective`` -- boolean (default: ``False``); if set to ``True``,
the fundamental group of the complement of the projective completion
of the curve will be computed, otherwise, the fundamental group of
the complement in the affine plane will be computed
If ``simplified`` is ``False``, the returned presentation has as
many generators as degree of the polynomial times the points in the
base used to create the segments that surround the discriminant. In
this case, the generators are granted to be meridians of the curve.
OUTPUT:
A presentation of the fundamental group of the complement of the
curve defined by ``f``.
EXAMPLES::
sage: from sage.schemes.curves.zariski_vankampen import fundamental_group # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = x^2 + y^3
sage: fundamental_group(f) # optional - sirocco
Finitely presented group < ... >
sage: fundamental_group(f, simplified=False) # optional - sirocco
Finitely presented group < ... >
::
sage: from sage.schemes.curves.zariski_vankampen import fundamental_group # optional - sirocco
sage: R.<x,y> = QQ[]
sage: f = y^3 + x^3
sage: fundamental_group(f) # optional - sirocco
Finitely presented group < ... >
It is also possible to have coefficients in a number field with a
fixed embedding in `\QQbar`::
sage: from sage.schemes.curves.zariski_vankampen import fundamental_group # optional - sirocco
sage: zeta = QQbar['x']('x^2+x+1').roots(multiplicities=False)[0]
sage: zeta
-0.50000000000000000? - 0.866025403784439?*I
sage: F = NumberField(zeta.minpoly(), 'zeta', embedding=zeta)
sage: F.inject_variables()
Defining zeta
sage: R.<x,y> = F[]
sage: f = y^3 + x^3 +zeta *x + 1
sage: fundamental_group(f) # optional - sirocco
Finitely presented group < x0 | >
"""
(x, y) = f.variables()
F = f.base_ring()
g = f.radical()
d = g.degree(y)
while not g.coefficient(y**d) in F or (projective and g.total_degree() > d):
g = g.subs({x: x + y})
d = g.degree(y)
disc = discrim(g)
segs = segments(disc)
vertices = list(set(flatten(segs)))
Faux = FreeGroup(d)
F = FreeGroup(d * len(vertices))
rels = []
if projective:
rels.append(prod(F.gen(i) for i in range(d)))
braidscomputed = braid_in_segment([(g, seg[0], seg[1]) for seg in segs])
for braidcomputed in braidscomputed:
seg = (braidcomputed[0][0][1], braidcomputed[0][0][2])
b = braidcomputed[1]
i = vertices.index(seg[0])
j = vertices.index(seg[1])
for k in range(d):
el1 = Faux([k + 1]) * b.inverse()
el2 = k + 1
w1 = F([sign(a) * d * i + a for a in el1.Tietze()])
w2 = F([d * j + el2])
rels.append(w1 / w2)
G = F / rels
if simplified:
return G.simplified()
else:
return G

BIN
cubos1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
cubos2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
cubos3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
cubos4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
cubos5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
cubos6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

44
diagramarudolforevkov.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

BIN
hiperbola.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

538
laberinto.ipynb Normal file

File diff suppressed because one or more lines are too long

BIN
laberinto0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

1016
laberinto1.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 68 KiB

BIN
monodtrenzas1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
monodtrenzas10.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
monodtrenzas10.webm Normal file

Binary file not shown.

BIN
monodtrenzas2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
monodtrenzas3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
monodtrenzas4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

BIN
monodtrenzas4.webm Normal file

Binary file not shown.

BIN
monodtrenzas5.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

BIN
monodtrenzas5.webm Normal file

Binary file not shown.

BIN
monodtrenzas6.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
monodtrenzas6.webm Normal file

Binary file not shown.

BIN
monodtrenzas7.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 KiB

BIN
monodtrenzas7.webm Normal file

Binary file not shown.

BIN
monodtrenzas8.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
monodtrenzas8.webm Normal file

Binary file not shown.

BIN
monodtrenzas9.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

BIN
monodtrenzas9.webm Normal file

Binary file not shown.

615
orevkov.svg Normal file
View File

@ -0,0 +1,615 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Created with matplotlib (http://matplotlib.org/) -->
<svg height="4440.85327pt" version="1.1" viewBox="0 0 5620.369759 4440.85327" width="5620.369759pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
*{stroke-linecap:butt;stroke-linejoin:round;}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 4440.85327
L 5620.369759 4440.85327
L 5620.369759 0
L 0 0
z
" style="fill:#ffffff;"/>
</g>
<g id="axes_1">
<g id="patch_2">
<path d="M 10.7 4430.15327
L 256.945871 4430.15327
L 256.945871 4170.75327
L 10.7 4170.75327
z
" style="fill:#ffffff;"/>
</g>
<g id="PathCollection_1">
<defs>
<path d="M 0 1.581139
C 0.419323 1.581139 0.821528 1.41454 1.118034 1.118034
C 1.41454 0.821528 1.581139 0.419323 1.581139 0
C 1.581139 -0.419323 1.41454 -0.821528 1.118034 -1.118034
C 0.821528 -1.41454 0.419323 -1.581139 0 -1.581139
C -0.419323 -1.581139 -0.821528 -1.41454 -1.118034 -1.118034
C -1.41454 -0.821528 -1.581139 -0.419323 -1.581139 0
C -1.581139 0.419323 -1.41454 0.821528 -1.118034 1.118034
C -0.821528 1.41454 -0.419323 1.581139 0 1.581139
z
" id="C0_0_0e0d49823b"/>
</defs>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="130.433069" xlink:href="#C0_0_0e0d49823b" y="4300.45327"/>
</g>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="181.724784" xlink:href="#C0_0_0e0d49823b" y="4300.45327"/>
</g>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="121.291114" xlink:href="#C0_0_0e0d49823b" y="4313.924997"/>
</g>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="121.291114" xlink:href="#C0_0_0e0d49823b" y="4286.981542"/>
</g>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="126.031718" xlink:href="#C0_0_0e0d49823b" y="4329.014981"/>
</g>
<g clip-path="url(#p16f2a2ec29)">
<use style="fill:#0000ff;" x="126.031718" xlink:href="#C0_0_0e0d49823b" y="4271.891558"/>
</g>
</g>
<g id="matplotlib.axis_1"/>
<g id="matplotlib.axis_2"/>
<g id="patch_3">
<path clip-path="url(#p16f2a2ec29)" d="M 46.866756 4196.561645
Q 46.785483 4192.419633 46.715177 4188.836531
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 45.754605 4190.855764
L 46.715177 4188.836531
L 47.75422 4190.816528
L 45.754605 4190.855764
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_4">
<path clip-path="url(#p16f2a2ec29)" d="M 78.054241 4187.664033
Q 78.135514 4191.806045 78.20582 4195.389147
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 79.166392 4193.369914
L 78.20582 4195.389147
L 77.166777 4193.40915
L 79.166392 4193.369914
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_5">
<path clip-path="url(#p16f2a2ec29)" d="M 109.404242 4187.048897
Q 109.485515 4191.190909 109.555821 4194.774011
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 110.516393 4192.754778
L 109.555821 4194.774011
L 108.516778 4192.794014
L 110.516393 4192.754778
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_6">
<path clip-path="url(#p16f2a2ec29)" d="M 140.754243 4186.433761
Q 140.835516 4190.575772 140.905822 4194.158875
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 141.866394 4192.139642
L 140.905822 4194.158875
L 139.866779 4192.178877
L 141.866394 4192.139642
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_7">
<path clip-path="url(#p16f2a2ec29)" d="M 172.104244 4185.818624
Q 172.185517 4189.960636 172.255823 4193.543738
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 173.216395 4191.524505
L 172.255823 4193.543738
L 171.216779 4191.563741
L 173.216395 4191.524505
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_8">
<path clip-path="url(#p16f2a2ec29)" d="M 82.784898 4338.653202
Q 81.543241 4334.700841 80.46913 4331.281799
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 80.114528 4333.489571
L 80.46913 4331.281799
L 82.022586 4332.890144
L 80.114528 4333.489571
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_9">
<path clip-path="url(#p16f2a2ec29)" d="M 151.936891 4300.45327
Q 156.0797 4300.45327 159.663492 4300.45327
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 157.663492 4299.45327
L 159.663492 4300.45327
L 157.663492 4301.45327
L 157.663492 4299.45327
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_10">
<path clip-path="url(#p16f2a2ec29)" d="M 176.121591 4367.183681
Q 179.807903 4365.293187 182.996797 4363.65779
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 180.760845 4363.680643
L 182.996797 4363.65779
L 181.673508 4365.460263
L 180.760845 4363.680643
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_11">
<path clip-path="url(#p16f2a2ec29)" d="M 243.422727 4300.45327
Q 247.565536 4300.45327 251.149328 4300.45327
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 249.149328 4299.45327
L 251.149328 4300.45327
L 249.149328 4301.45327
L 249.149328 4299.45327
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_12">
<path clip-path="url(#p16f2a2ec29)" d="M 176.121591 4233.722858
Q 179.807903 4235.613352 182.996797 4237.248749
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 181.673508 4235.446276
L 182.996797 4237.248749
L 180.760845 4237.225896
L 181.673508 4235.446276
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_13">
<path clip-path="url(#p16f2a2ec29)" d="M 46.866756 4404.344894
Q 46.785483 4408.486906 46.715177 4412.070008
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 47.75422 4410.090011
L 46.715177 4412.070008
L 45.754605 4410.050775
L 47.75422 4410.090011
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_14">
<path clip-path="url(#p16f2a2ec29)" d="M 78.054241 4413.242506
Q 78.135514 4409.100494 78.20582 4405.517392
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 77.166777 4407.497389
L 78.20582 4405.517392
L 79.166392 4407.536625
L 77.166777 4407.497389
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_15">
<path clip-path="url(#p16f2a2ec29)" d="M 109.404242 4413.857642
Q 109.485515 4409.71563 109.555821 4406.132528
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 108.516778 4408.112525
L 109.555821 4406.132528
L 110.516393 4408.151761
L 108.516778 4408.112525
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_16">
<path clip-path="url(#p16f2a2ec29)" d="M 140.754243 4414.472778
Q 140.835516 4410.330767 140.905822 4406.747664
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 139.866779 4408.727662
L 140.905822 4406.747664
L 141.866394 4408.766897
L 139.866779 4408.727662
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_17">
<path clip-path="url(#p16f2a2ec29)" d="M 172.104244 4415.087915
Q 172.185517 4410.945903 172.255823 4407.362801
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 171.216779 4409.342798
L 172.255823 4407.362801
L 173.216395 4409.382034
L 171.216779 4409.342798
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_18">
<path clip-path="url(#p16f2a2ec29)" d="M 82.784898 4262.253337
Q 81.543241 4266.205698 80.46913 4269.62474
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 82.022586 4268.016395
L 80.46913 4269.62474
L 80.114528 4267.416968
L 82.022586 4268.016395
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_19">
<path clip-path="url(#p16f2a2ec29)" d="M 21.274845 4326.394568
Q 25.407169 4326.689132 28.98189 4326.943949
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 27.058055 4325.804275
L 28.98189 4326.943949
L 26.915849 4327.799213
L 27.058055 4325.804275
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_20">
<path clip-path="url(#p16f2a2ec29)" d="M 129.353318 4286.342549
Q 131.679585 4289.770573 133.691953 4292.73603
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 133.396378 4290.519584
L 133.691953 4292.73603
L 131.741451 4291.642623
L 133.396378 4290.519584
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_21">
<path clip-path="url(#p16f2a2ec29)" d="M 121.481751 4291.684218
Q 123.808018 4295.112242 125.820387 4298.077699
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 125.524812 4295.861253
L 125.820387 4298.077699
L 123.869885 4296.984291
L 125.524812 4295.861253
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_22">
<path clip-path="url(#p16f2a2ec29)" d="M 20.339762 4261.394067
Q 24.472085 4261.099503 28.046807 4260.844686
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 25.980766 4259.989422
L 28.046807 4260.844686
L 26.122971 4261.98436
L 25.980766 4259.989422
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_23">
<path clip-path="url(#p16f2a2ec29)" d="M 21.274845 4274.511971
Q 25.407169 4274.217407 28.98189 4273.96259
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 26.915849 4273.107326
L 28.98189 4273.96259
L 27.058055 4275.102264
L 26.915849 4273.107326
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="patch_24">
<path clip-path="url(#p16f2a2ec29)" d="M 22.209928 4287.629875
Q 26.342252 4287.335311 29.916973 4287.080494
" style="fill:none;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
<path clip-path="url(#p16f2a2ec29)" d="M 27.850933 4286.22523
L 29.916973 4287.080494
L 27.993138 4288.220168
L 27.850933 4286.22523
z
" style="fill:#0000ff;stroke:#0000ff;stroke-linecap:round;stroke-width:0.5;"/>
</g>
<g id="line2d_1">
<path clip-path="url(#p16f2a2ec29)" d="M 247.564762 4175.741731
L 203.535502 4189.344726
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_2">
<path clip-path="url(#p16f2a2ec29)" d="M 247.564762 4425.164808
L 203.535502 4411.561814
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_3">
<path clip-path="url(#p16f2a2ec29)" d="M 156.078926 4281.881272
L 139.550716 4284.428264
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_4">
<path clip-path="url(#p16f2a2ec29)" d="M 15.435498 4193.035544
L 23.53623 4247.981654
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_5">
<path clip-path="url(#p16f2a2ec29)" d="M 15.435498 4193.035544
L 203.535502 4189.344726
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_6">
<path clip-path="url(#p16f2a2ec29)" d="M 139.550716 4316.478275
L 115.936017 4300.45327
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_7">
<path clip-path="url(#p16f2a2ec29)" d="M 139.550716 4316.478275
L 23.53623 4352.924885
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_8">
<path clip-path="url(#p16f2a2ec29)" d="M 156.078926 4281.881272
L 156.078926 4319.025267
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_9">
<path clip-path="url(#p16f2a2ec29)" d="M 156.078926 4319.025267
L 203.535502 4411.561814
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_10">
<path clip-path="url(#p16f2a2ec29)" d="M 247.564762 4175.741731
L 247.564762 4425.164808
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_11">
<path clip-path="url(#p16f2a2ec29)" d="M 203.535502 4189.344726
L 156.078926 4281.881272
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_12">
<path clip-path="url(#p16f2a2ec29)" d="M 15.435498 4407.870995
L 203.535502 4411.561814
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_13">
<path clip-path="url(#p16f2a2ec29)" d="M 23.53623 4247.981654
L 139.550716 4284.428264
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_14">
<path clip-path="url(#p16f2a2ec29)" d="M 156.078926 4319.025267
L 139.550716 4316.478275
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_15">
<path clip-path="url(#p16f2a2ec29)" d="M 15.435498 4407.870995
L 23.53623 4352.924885
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_16">
<path clip-path="url(#p16f2a2ec29)" d="M 23.53623 4352.924885
L 27.276563 4300.45327
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_17">
<path clip-path="url(#p16f2a2ec29)" d="M 139.550716 4284.428264
L 115.936017 4300.45327
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_18">
<path clip-path="url(#p16f2a2ec29)" d="M 23.53623 4247.981654
L 27.276563 4300.45327
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="line2d_19">
<path clip-path="url(#p16f2a2ec29)" d="M 115.936017 4300.45327
L 27.276563 4300.45327
" style="fill:none;stroke:#008000;stroke-linecap:square;"/>
</g>
<g id="text_1">
<!-- 1 -->
<defs>
<path d="M 12.40625 8.296875
L 28.515625 8.296875
L 28.515625 63.921875
L 10.984375 60.40625
L 10.984375 69.390625
L 28.421875 72.90625
L 38.28125 72.90625
L 38.28125 8.296875
L 54.390625 8.296875
L 54.390625 0
L 12.40625 0
z
" id="DejaVuSans-31"/>
</defs>
<g transform="translate(43.604248 4195.179782)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_2">
<!-- 2 -->
<defs>
<path d="M 19.1875 8.296875
L 53.609375 8.296875
L 53.609375 0
L 7.328125 0
L 7.328125 8.296875
Q 12.9375 14.109375 22.625 23.890625
Q 32.328125 33.6875 34.8125 36.53125
Q 39.546875 41.84375 41.421875 45.53125
Q 43.3125 49.21875 43.3125 52.78125
Q 43.3125 58.59375 39.234375 62.25
Q 35.15625 65.921875 28.609375 65.921875
Q 23.96875 65.921875 18.8125 64.3125
Q 13.671875 62.703125 7.8125 59.421875
L 7.8125 69.390625
Q 13.765625 71.78125 18.9375 73
Q 24.125 74.21875 28.421875 74.21875
Q 39.75 74.21875 46.484375 68.546875
Q 53.21875 62.890625 53.21875 53.421875
Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
z
" id="DejaVuSans-32"/>
</defs>
<g transform="translate(74.954249 4194.564646)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_3">
<!-- 3 -->
<defs>
<path d="M 40.578125 39.3125
Q 47.65625 37.796875 51.625 33
Q 55.609375 28.21875 55.609375 21.1875
Q 55.609375 10.40625 48.1875 4.484375
Q 40.765625 -1.421875 27.09375 -1.421875
Q 22.515625 -1.421875 17.65625 -0.515625
Q 12.796875 0.390625 7.625 2.203125
L 7.625 11.71875
Q 11.71875 9.328125 16.59375 8.109375
Q 21.484375 6.890625 26.8125 6.890625
Q 36.078125 6.890625 40.9375 10.546875
Q 45.796875 14.203125 45.796875 21.1875
Q 45.796875 27.640625 41.28125 31.265625
Q 36.765625 34.90625 28.71875 34.90625
L 20.21875 34.90625
L 20.21875 43.015625
L 29.109375 43.015625
Q 36.375 43.015625 40.234375 45.921875
Q 44.09375 48.828125 44.09375 54.296875
Q 44.09375 59.90625 40.109375 62.90625
Q 36.140625 65.921875 28.71875 65.921875
Q 24.65625 65.921875 20.015625 65.03125
Q 15.375 64.15625 9.8125 62.3125
L 9.8125 71.09375
Q 15.4375 72.65625 20.34375 73.4375
Q 25.25 74.21875 29.59375 74.21875
Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
z
" id="DejaVuSans-33"/>
</defs>
<g transform="translate(106.30425 4193.94951)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-33"/>
</g>
</g>
<g id="text_4">
<!-- 1 -->
<g transform="translate(137.654251 4193.334373)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_5">
<!-- 2 -->
<g transform="translate(169.004251 4192.719237)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_6">
<!-- 2 -->
<g transform="translate(78.362223 4337.460955)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_7">
<!-- 1 -->
<g transform="translate(152.897676 4303.212645)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_8">
<!-- 1 -->
<g transform="translate(176.625964 4368.052915)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_9">
<!-- 1 -->
<g transform="translate(244.383512 4303.212645)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_10">
<!-- 1 -->
<g transform="translate(176.625964 4238.372374)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_11">
<!-- 1 -->
<g transform="translate(43.604248 4411.245507)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_12">
<!-- 2 -->
<g transform="translate(74.954249 4411.860643)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_13">
<!-- 3 -->
<g transform="translate(106.30425 4412.475779)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-33"/>
</g>
</g>
<g id="text_14">
<!-- 1 -->
<g transform="translate(137.654251 4413.090916)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_15">
<!-- 2 -->
<g transform="translate(169.004251 4413.706052)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_16">
<!-- 2 -->
<g transform="translate(78.362223 4268.964334)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_17">
<!-- 2 -->
<g transform="translate(22.225146 4329.448452)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_18">
<!-- 1 -->
<g transform="translate(128.4979 4292.529307)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_19">
<!-- 3 -->
<g transform="translate(120.626334 4297.870976)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-33"/>
</g>
</g>
<g id="text_20">
<!-- 2 -->
<g transform="translate(21.290063 4263.858933)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-32"/>
</g>
</g>
<g id="text_21">
<!-- 1 -->
<g transform="translate(22.225146 4276.976837)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-31"/>
</g>
</g>
<g id="text_22">
<!-- 3 -->
<g transform="translate(23.16023 4290.094741)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-33"/>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="p16f2a2ec29">
<rect height="259.4" width="246.245871" x="10.7" y="4170.75327"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

BIN
output.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

View File

@ -83,7 +83,7 @@ div.output_wrapper {
border-radius: 25px;
color: white;
text-align: center;
background: #223d71;
background: #3333b3;
}
.reveal h1.title {
@ -110,7 +110,7 @@ div.output_wrapper {
.reveal h2 {
margin-top: 0 !important;
background: #223d71;
background: #3333b3;
margin-left: -16%;
margin-right: 0;
margin-bottom: 4%;
@ -155,7 +155,7 @@ div.output_wrapper {
margin-left: auto;
margin-right: auto;
display: block;
max-height: 350px;
max-height: 400px;
}
.reveal li {
@ -212,3 +212,54 @@ div.output_wrapper {
.reveal th {
font-size: 25px
}
.reveal div.thm {
margin-right: 5%;
margin-left:5%;
margin-top: 2%;
padding-left: 2%;
padding-right: 2%;
padding-top: 0%;
padding-bottom: 2%;
border-radius:15px;
background: #eaeaf3;
box-shadow: 5px 5px 10px grey;
}
.reveal div.thm h3 {
padding-top: 1%;
padding-bottom: 1%;
padding-right: 1%;
padding-left: 3%;
/* width: 100.8% !important; */
margin-right: -2.4%;
margin-left: -2.4%;
margin-bottom: 0;
border-radius: 15px 15px 0px 0px;
/* font-size: 1.9em; */
background: #3333b3;
color: white;
text-align: left;
}
.reveal div.thm p {
margin-top: 1%;
margin-bottom: 1%;
padding-top: 1%;
}
.reveal div.thm ul {
display: contents;
}
.reveal div.thm ul li {
padding-left: 3%;
padding-top: 0.5%;
padding-bottom: 0.5%;
}

View File

@ -117,11 +117,15 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
"slide_type": "slide"
}
},
"source": [
"**Ejemplo**: $y^2= 1-x^2$"
"## Ejemplo \n",
"\n",
"$y^2= x^2-1$\n",
"\n",
"![](hiperbola.png)"
]
},
{
@ -132,7 +136,720 @@
}
},
"source": [
"La proyección sobre el eje $x$ es $2:1$ excepto cuando $1-x^2=0$"
"La proyección sobre el eje $x$ es $2:1$ excepto en $x=\\pm 1$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Ejemplo\n",
"\n",
"![](supriemannelev-0.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Ejemplo\n",
"\n",
"<video data-autoplay src=\"supriemannelev.mp4\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Topología del encaje\n",
"\n",
"$C\\subseteq \\mathbb{C}^2$\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Codimensión 2: situación análoga a los nudos"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Uno de los invariantes principales es el grupo fundamental del complementario $\\pi_1(\\mathbb{C}^2\\setminus C)$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"![](monodtrenzas1.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"![](monodtrenzas2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"![](monodtrenzas3.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas4.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas5.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas6.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas7.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas8.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Lema</b>\n",
" </h3>\n",
" <p>\n",
" Esta construcción determina un morfismo de grupos $\\pi_1(\\mathbb{C}\\setminus \\Delta)\\longrightarrow B_d$.\n",
" </p>\n",
"</div>\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Definición</b>\n",
" </h3>\n",
" <p>\n",
" Este morfismo recibe el nombre de <i>monodromía de trenzas</i> de la curva.\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Se puede representar como una lista de trenzas correspondientes a una base geométrica de $\\pi_1(\\mathbb{C}\\setminus \\Delta)$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas9.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<video data-autoplay src=\"monodtrenzas10.webm\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Monodromía de trenzas\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Teorema</b> (Zariski-Van Kampen)\n",
" </h3>\n",
" <p>\n",
" El grupo fundamental del complementario $\\pi_1(\\mathbb{C}^2\\setminus C)$ es el cociente del grupo libre $F_d$ por la acción de la monodromía de trenzas.\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Teorema</b>\n",
" </h3>\n",
" <p>\n",
" La monodromía de trenzas determina completamente la topología del par $(\\mathbb{C}^2,C)$.\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Pares de Zariski\n",
"\n",
"La monodromía de trenzas es un objeto algebraico (morfismo de grupos) definido a partir de otro objeto algebraico (ideal en el anillo de polinomios)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Definición</b>\n",
" </h3>\n",
" <p>\n",
" Dos curvas algebraicas $C_1$ y $C_2$ forman un <i>par de Zariski aritmético</i> si\n",
" <ul>\n",
" <li class=\"fragment\">Los polinomios que las definen $f_1,f_2$ son conjugados de Galois.</li>\n",
" <li class=\"fragment\">Los grupos fundamentales $\\pi_1(\\mathbb{C}^2\\setminus C_1)$ y $\\pi_1(\\mathbb{C}^2\\setminus C_1)$ son no isomorfos.</li>\n",
" </ul>\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Pares de Zariski\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Teorema</b> (ACG_)\n",
" </h3>\n",
" <p>\n",
" Existen pares de Zariski aritméticos\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Esto implica que la monodromía de trenzas (o el grupo fundamental) no se puede calcular de manera puramente algebraica."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Se necesitan cálculos **numéricos**, pero **certificados**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo de la monodromía de trenzas\n",
"\n",
"Primer paso: elegir los caminos\n",
"\n",
"![](voronoi0.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo de la monodromía de trenzas\n",
"\n",
"Primer paso: elegir los caminos\n",
"\n",
"![](voronoi1.jpg)\n",
"\n",
"El *Diagrama de Voronoi* nos da segmentos que rodean los puntos del discriminante, acercándose lo menos posible."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo de la trenza sobre un segmento\n",
"\n",
"Mediante cambio de variable, podemos normalizar a $[0,1]$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"![](trenzasola.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo de la trenza sobre un segmento\n",
"\n",
"Mediante cambio de variable, podemos normalizar a $[0,1]$\n",
"\n",
"![](trenzapoligonal.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo de la trenza sobre un segmento\n",
"\n",
"Mediante cambio de variable, podemos normalizar a $[0,1]$\n",
"\n",
"![](trenzaentorno.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Aritmética intervalar\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Definición</b>\n",
" </h3>\n",
" <p>\n",
" Un <i>intervalo complejo</i> es un conjunto $$[r_0,r_1]+[i_0,i_1]\\cdot i:=\\{a+b\\cdot i \\mid a \\in [r_0,r_1], b\\in [i_0,i_1]\\}\\subseteq \\mathbb{C}$$\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Definición</b>\n",
" </h3>\n",
" <p>\n",
" Dado $Y\\subseteq \\mathbb{C}$, su <i>clausura intervalar</i> $[Y]$ es el menor intervalo que lo contiene.\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Se puede operar con intervalos tomando la clausura intervalar de las operaciones punto a punto."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Los intervalos con estas operaciones **no** forman un anillo (pero para ciertos efectos, se puede operar como si lo fuera)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Criterio del intervalo de Newton\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Teorema</b>\n",
" </h3>\n",
" <p>\n",
" Sea $Y$ un intervalo complejo, $y0\\in Y$. Sea $f: Y\\longrightarrow \\mathbb{C}$ una función holomorfa, tal que $0\\in [f'(Y)]$. Si\n",
" $$\n",
" N(f,y_0,Y):=y_0-\\frac{f(y_0)}{[f'(Y)]}\\subseteq Y\n",
" $$\n",
" entonces $f$ tiene un único cero en $Y$. Además, este cero está en $N(f,y_0,Y)$.\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Podemos usar este teorema para asegurar que tenemos un entorno alrededor de una raíz aproximada, que contiene a la raíz auténtica, pero sin tocar a las demás raíces."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Notar que, ya que estamos operando con intervalos, podemos usar intervalos en los propios coeficientes."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Ejemplo\n",
"\n",
"$$f = [0.9,1.1]\\cdot y^2-1-x$$\n",
"$$y_0=1$$\n",
"$$Y=[0.5,1.5]$$\n",
"$$x_0=0$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$N(f,y_0,Y)=1-\\frac{[0.9,1.1]-1}{2\\cdot[0.9,1.1][0.5,1.5]}=$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$=1-\\frac{[-0.1,0.1]}{[0.9,3.3]}\\approx [0.888,1.111]$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Ejemplo: extender $x$ a un intervalo\n",
"\n",
"$$f = [0.9,1.1]\\cdot y^2-1-x$$\n",
"$$y_0=1$$\n",
"$$Y=[0.5,1.5]$$\n",
"$$x=[0,0.25]$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$N(f,y_0,Y)=1-\\frac{[0.9,1.1]-1-[0,0.25]}{2\\cdot[0.9,1.1][0.5,1.5]}=$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$$=1-\\frac{[-0.35,0.1]}{[0.9,3.3]}\\approx [0.888,1.13888]$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos1.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos3.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos4.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos5.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cálculo numérico certificado de la trenza\n",
"\n",
"![](cubos6.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## SIROCCO: demostración"
]
},
{
@ -140,7 +857,184 @@
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
"source": [
"A.<x,y> = AffineSpace(QQ,2)\n",
"C = A.curve(y^2-x^3-x^2)\n",
"C.plot((x,-3,3),(y,-3,3))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"show(C.fundamental_group())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## SIROCCO: demostración"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"C2 = A.curve((x^2+y^2)^2+18*(x^2+y^2) - 27 -8*(x^3-3*x*y^2))\n",
"C2.plot((x,-3,3),(y,-3,3))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"show(C2.fundamental_group())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"Volviendo a las superficies de Riemann:\n",
"\n",
"![](diagramarudolfhiperbola2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"Volviendo a las superficies de Riemann:\n",
"\n",
"![](diagramarudolfhiperbola1.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"<div class=\"thm\">\n",
" <h3>\n",
" <b>Definición</b> \n",
" </h3>\n",
" <p>\n",
" Sea $f\\in\\mathbb{C}[x,y]$, su <i>diagrama de Rudolf</i> es el conjunto\n",
" $$\\{x\\in\\mathbb{C} \\mid \\exists y_0\\neq y_1, Re(y_0)=Re(y_1), f(x,y_0)=f(x,y_1)=0\\}$$\n",
" </p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Como conjunto de $\\mathbb{R}^2\\cong \\mathbb{C}$, es un conjunto semialgebraico"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- En general, son difíciles de calcular"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"Diagrama de Rudolf de $(4z^3+12z+3-w^2)^2-8w-48z+52$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"<img src=\"diagramarudolforevkov.svg\" style=\"max-height:450px !important; height:450px;\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"![](laberinto0.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Diagramas de Rudolf\n",
"\n",
"![](laberinto1.svg)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Muchas gracias"
]
}
],
"metadata": {

BIN
supriemannelev-0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
supriemannelev.avi Normal file

Binary file not shown.

BIN
supriemannelev.mp4 Normal file

Binary file not shown.

BIN
trenzaentorno.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
trenzapoligonal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
trenzasola.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
voronoi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
voronoi0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
voronoi1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB