Numeric |
Symbolic |
---|---|
fast | usually slower |
approximate | exact |
well suited for simulations/DE/root finding | well suited for algebraic/geometric problems |
sensible to unstability | always stable |
not certified | certified |
bertini/PHCpack... | CoCoA/Singular/Macaulay/Magma... |
not good for exact problems | hopeless for certain problems |
Can we get the best of both worlds?
Let $C = V(f), f\in \mathbb{C}[x,y]$ be a plane affine curve. We are interested in the topology of the pair $(\mathbb{C}^2, C)$.
This has several ingredients:
So the complexity lies on the embedding. In particular, we will focus on the complement $\mathbb{C}^2\setminus C$. Its main invariant is the fundamental group.
The fundamental group $\pi_1(\mathbb{C}^2\setminus C)$ is given by the quotient of the free group $F_d$ by the action of the braid monodromy.
The topology of the pair is determined by the braid monodromy.
So our problem can be reduced to compute the braids corresponding to the loops around the points of the discriminant.
Two curves $C_1= V(f_1), C_2=V(f_2)$ form a weak arithmetic Zariski pair if these two conditions hold:
There exist weak arithmetic Zariski pairs. In particular it means that we cannot use only algebraic methods to study the embedded topology.
But maybe there is hope for the fundamental group:
$\pi_1^{alg}(\mathbb{C}^2\setminus C)$ is isomorphic to the profinite completion of $\pi_1(\mathbb{C}^2\setminus C)$.
Nope:
Two curves $C_1= V(f_1), C_2=V(f_2)$ form an arithmetic Zariski pair if:
There exist arithmetic Zariski pairs. So we cannot use purely algebraic methods to compute the fundamental group either.
The paths in the base plane can be given by the Voronoi diagram of the discriminant.
The problem can be reduced to compute the crossings of a braid over a segment. Without loss of generality, we can assume it goes from $0$ to $1$.
The idea is to aproximate the braid with a piecewise linear one. In order to do that we have to find aproximate roots and continue them.
But we need to ensure that it is topologically correct. That is, that we don't miss any crossing, or jump from one strand to another.
$\mathbb{R}_{int} := \{[a,b] \mid a,b \in\mathbb{R}, a\leq b\}$
Pseudoinverses:
$\mathbb{C}_{int} := \{A + i\cdot B \mid A, B \in \mathbb{R}_{int}\}$
$$[X] = \bigcap_{X\subseteq Y \in \mathbb{C}_{int}} Y$$Let $Y\in\mathbb{C}_{int}, y_0 \in Y$. Let $f:Y\to \mathbb{C}$ be a holomorphic function. Assume that $0 \notin [f'(Y)]$, and
$$N(f, y_0, Y):= y_0-\frac{f(y_0)}{[f'(Y)]} \subseteq Y.$$Then there exists a unique zero of $f$ in $Y$. Moreover, this zero lives in $N(f,y_0,Y)$
We can use this theorem to ensure that we have a tubular neighborhood of our piecewise linear braid that contains the actual braid.
note that using intervals allows us to compute with irrational numbers, even transcendental!
So the braid will lie inside the interval around $y_0$ for $x \in [0,0.25]$.
load("my_library.pyx")
load("ZVK.py")
Compiling ./my_library.pyx...
R.<x,y> = QQ[]
f = y^2 - x^3 - x^2
implicit_plot(f, (x, -3, 3), (y, -3, 3))
fundamental_group(f)
Finitely presented group < x0 | >
f = (x^2+y^2)^2+18*(x^2+y^2) - 27 -8*(x^3-3*x*y^2)
implicit_plot(f,(x,-3,3), (y,-3,3))
fundamental_group(f)
Finitely presented group < x0, x1, x2 | x0*x2*x0^-1*x2^-1*x0^-1*x2, x2*x1*x2*x1^-1*x2^-1*x1^-1, x1^-1*x0*x1*x0*x1^-1*x0^-1 >
f = (x^2 - 1)*(x - 1)^2 + (y^2 - 1)^2
implicit_plot(f, (x, -3, 3), (y, -3, 3))
fundamental_group(f)
Finitely presented group < x0 | >
f = (x^2 + y^2)^2 - 2*x^2 + 2*y^2
implicit_plot(f, (x,-2, 2), (y, -2, 2))
fundamental_group(f)
Finitely presented group < x0 | >
f = x^4 - x^2*y + y^3
implicit_plot(f, (x,-2, 2), (y, -2, 2))
fundamental_group(f)
Finitely presented group < x0 | >
f = (x^2 + y^2)^2 - x^3 + 3*x*y^2
implicit_plot(f, (x, -3, 3), (y, -3, 3))
fundamental_group(f)
Finitely presented group < x0 | >
a = QQ[x](x^5-1).roots(QQbar)[-1][0]
a
0.3090169943749474? + 0.9510565162951536?*I
F = NumberField(a.minpoly(), 'a', embedding = a)
F.inject_variables()
F
Defining a
Number Field in a with defining polynomial x^4 + x^3 + x^2 + x + 1
R.<x,y> = F[]
f = x^4 + a*y^4 - 2*x^2*y^2
fundamental_group(f)
Finitely presented group < x0, x1, x3, x4 | x1*x3*x4*x0*x1^-1*x0^-1*x4^-1*x3^-1, x4*x0*x1*x3^-1*x1^-1*x0^-1*x4^-1*x3, x4^-1*x3^-1*x0*x1*x3*x4*x1^-1*x0^-1 >
from notebook.services.config import ConfigManager
cm = ConfigManager()
cm.update('livereveal', {
'theme': 'custom',
'transition': 'none',
'start_slideshow_at': 'first',
})
{u'start_slideshow_at': 'first', u'theme': 'custom', u'transition': 'none'}