Gröbnerbasen und Triangulierungen

173 days ago by trabandt

Beispiel: Twisted Cubic

Gröbnerbasis und Gröbnerfächer

A= Matrix([[0,1,2,3],[3,2,1,0]]) show(A) point([(A[0,i],A[1,i]) for i in range(4)], size=20).show(figsize=3, aspect_ratio=1.0) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 1 & 2 & 3 \\ 3 & 2 & 1 & 0 \end{array}\right)
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 1 & 2 & 3 \\ 3 & 2 & 1 & 0 \end{array}\right)
R.<t_0,t_1,t_2,t_3> = PolynomialRing(QQ,4) IA=ToricIdeal(A, names='t_0,t_1,t_2,t_3') IA.gens() 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left[- t_{1} t_{2} + t_{0} t_{3}, - t_{1}^{2} + t_{0} t_{2}, t_{2}^{2} -  t_{1} t_{3}\right]
\newcommand{\Bold}[1]{\mathbf{#1}}\left[- t_{1} t_{2} + t_{0} t_{3}, - t_{1}^{2} + t_{0} t_{2}, t_{2}^{2} -  t_{1} t_{3}\right]

 

Bild: Claudio Rocchini  bei Wikipedia

GF=IA.groebner_fan() for gewicht in GF.weight_vectors(): print ("Gewichtsvektor: "), gewicht Q= R.change_ring(order=TermOrder(Matrix([gewicht,[1,0,0,0],[0,1,0,0],[0,0,1,0]]))); #print Q.term_order().weights() J = IA.change_ring(Q); print "Gröbner-Basis: ", (J.groebner_basis()) print "Initialideal: ", Ideal(f.lm() for f in J.groebner_basis()).groebner_basis() print "" 
       
Gewichtsvektor:  (1, 1, 2, 4)
Gröbner-Basis:   [t_0*t_3 - t_1*t_2, t_1*t_3 - t_2^2, t_0*t_2 - t_1^2]
Initialideal:    [t_0*t_3, t_1*t_3, t_0*t_2]

Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]

Gewichtsvektor:  (1, 1, 3, 2)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_0^2*t_3 - t_1^3, t_0*t_2 - t_1^2,
t_1*t_2 - t_0*t_3]
Initialideal:    [t_2^2, t_0^2*t_3, t_0*t_2, t_1*t_2]

Gewichtsvektor:  (3, 4, 8, 3)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_1^3 - t_0^2*t_3, t_1*t_2 - t_0*t_3,
t_0*t_2 - t_1^2]
Initialideal:    [t_2^2, t_1^3, t_1*t_2, t_0*t_2]

Gewichtsvektor:  (1, 2, 2, 1)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^2 - t_1*t_3]
Initialideal:    [t_1^2, t_1*t_2, t_2^2]

Gewichtsvektor:  (2, 3, 2, 5)
Gröbner-Basis:   [t_1*t_3 - t_2^2, t_0*t_3 - t_1*t_2, t_1^2 - t_0*t_2]
Initialideal:    [t_1*t_3, t_0*t_3, t_1^2]

Gewichtsvektor:  (2, 5, 2, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_0*t_3^2 - t_2^3, t_1*t_3 - t_2^2,
t_1*t_2 - t_0*t_3]
Initialideal:    [t_1^2, t_0*t_3^2, t_1*t_3, t_1*t_2]

Gewichtsvektor:  (3, 8, 4, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^3 - t_0*t_3^2,
t_1*t_3 - t_2^2]
Initialideal:    [t_1^2, t_1*t_2, t_2^3, t_1*t_3]
Gewichtsvektor:  (1, 1, 2, 4)
Gröbner-Basis:   [t_0*t_3 - t_1*t_2, t_1*t_3 - t_2^2, t_0*t_2 - t_1^2]
Initialideal:    [t_0*t_3, t_1*t_3, t_0*t_2]

Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]

Gewichtsvektor:  (1, 1, 3, 2)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_0^2*t_3 - t_1^3, t_0*t_2 - t_1^2, t_1*t_2 - t_0*t_3]
Initialideal:    [t_2^2, t_0^2*t_3, t_0*t_2, t_1*t_2]

Gewichtsvektor:  (3, 4, 8, 3)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_1^3 - t_0^2*t_3, t_1*t_2 - t_0*t_3, t_0*t_2 - t_1^2]
Initialideal:    [t_2^2, t_1^3, t_1*t_2, t_0*t_2]

Gewichtsvektor:  (1, 2, 2, 1)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^2 - t_1*t_3]
Initialideal:    [t_1^2, t_1*t_2, t_2^2]

Gewichtsvektor:  (2, 3, 2, 5)
Gröbner-Basis:   [t_1*t_3 - t_2^2, t_0*t_3 - t_1*t_2, t_1^2 - t_0*t_2]
Initialideal:    [t_1*t_3, t_0*t_3, t_1^2]

Gewichtsvektor:  (2, 5, 2, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_0*t_3^2 - t_2^3, t_1*t_3 - t_2^2, t_1*t_2 - t_0*t_3]
Initialideal:    [t_1^2, t_0*t_3^2, t_1*t_3, t_1*t_2]

Gewichtsvektor:  (3, 8, 4, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^3 - t_0*t_3^2, t_1*t_3 - t_2^2]
Initialideal:    [t_1^2, t_1*t_2, t_2^3, t_1*t_3]
GF.number_of_reduced_groebner_bases() 
       
\newcommand{\Bold}[1]{\mathbf{#1}}8
\newcommand{\Bold}[1]{\mathbf{#1}}8
GF.render3d().show() 
       
show(GF.render(polyfill=false, scale_colors=true, larger=true)) 
       

Initialkomplex

print "tor. Ideal: ",IA.gens(); gewicht = GF.weight_vectors()[1] print "Gewichtsvektor: ", gewicht Q= R.change_ring(order=TermOrder(Matrix([gewicht,[1,0,0,0],[0,1,0,0],[0,0,1,0]]))); #print Q.term_order().weights() J = IA.change_ring(Q); print "Gröbner-Basis: ", J.groebner_basis() print "Initialideal: ", Ideal(f.lm() for f in J.groebner_basis()).groebner_basis() print "Rad(in_w(I_A)): ", Ideal(f.lm() for f in J.groebner_basis()).radical().groebner_basis() print "" 
       
tor. Ideal:      [-t_1*t_2 + t_0*t_3, -t_1^2 + t_0*t_2, t_2^2 - t_1*t_3]
Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]
tor. Ideal:      [-t_1*t_2 + t_0*t_3, -t_1^2 + t_0*t_2, t_2^2 - t_1*t_3]
Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]

Triangulierungen

Twisted Cubic

p=PointConfiguration([[0,3],[1,2],[2,1],[3,0]]) p.triangulations_list() 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left[\verb|(<0,1>,|\phantom{x}\verb|<1,2>,|\phantom{x}\verb|<2,3>)|, \verb|(<0,2>,|\phantom{x}\verb|<2,3>)|, \verb|(<0,1>,|\phantom{x}\verb|<1,3>)|, \verb|(<0,3>)|\right]
\newcommand{\Bold}[1]{\mathbf{#1}}\left[\verb|(<0,1>,|\phantom{x}\verb|<1,2>,|\phantom{x}\verb|<2,3>)|, \verb|(<0,2>,|\phantom{x}\verb|<2,3>)|, \verb|(<0,1>,|\phantom{x}\verb|<1,3>)|, \verb|(<0,3>)|\right]
show(A) grapharray=[] for triangulierung in p.triangulations_list(): grapharray.append(triangulierung.fan((0,0)).plot()) show(graphics_array([grapharray[0:2],grapharray[2:4]])) 
       
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 1 & 2 & 3 \\ 3 & 2 & 1 & 0 \end{array}\right)
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrr} 0 & 1 & 2 & 3 \\ 3 & 2 & 1 & 0 \end{array}\right)
GF=IA.groebner_fan() for gewicht in GF.weight_vectors(): print ("Gewichtsvektor: "), gewicht Q= R.change_ring(order=TermOrder(Matrix([gewicht,[1,0,0,0],[0,1,0,0],[0,0,1,0]]))); #print Q.term_order().weights() J = IA.change_ring(Q); print "Gröbner-Basis: ", (J.groebner_basis()) print "Initialideal: ", Ideal(f.lm() for f in J.groebner_basis()).groebner_basis() print "Rad(in_w(I_A)): ", Ideal(f.lm() for f in J.groebner_basis()).radical().groebner_basis() print "" 
       
Gewichtsvektor:  (1, 1, 2, 4)
Gröbner-Basis:   [t_0*t_3 - t_1*t_2, t_1*t_3 - t_2^2, t_0*t_2 - t_1^2]
Initialideal:    [t_0*t_3, t_1*t_3, t_0*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_1*t_3, t_0*t_2]

Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]

Gewichtsvektor:  (1, 1, 3, 2)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_0^2*t_3 - t_1^3, t_0*t_2 - t_1^2,
t_1*t_2 - t_0*t_3]
Initialideal:    [t_2^2, t_0^2*t_3, t_0*t_2, t_1*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]

Gewichtsvektor:  (3, 4, 8, 3)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_1^3 - t_0^2*t_3, t_1*t_2 - t_0*t_3,
t_0*t_2 - t_1^2]
Initialideal:    [t_2^2, t_1^3, t_1*t_2, t_0*t_2]
Rad(in_w(I_A)):  [t_2, t_1]

Gewichtsvektor:  (1, 2, 2, 1)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^2 - t_1*t_3]
Initialideal:    [t_1^2, t_1*t_2, t_2^2]
Rad(in_w(I_A)):  [t_1, t_2]

Gewichtsvektor:  (2, 3, 2, 5)
Gröbner-Basis:   [t_1*t_3 - t_2^2, t_0*t_3 - t_1*t_2, t_1^2 - t_0*t_2]
Initialideal:    [t_1*t_3, t_0*t_3, t_1^2]
Rad(in_w(I_A)):  [t_0*t_3, t_1]

Gewichtsvektor:  (2, 5, 2, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_0*t_3^2 - t_2^3, t_1*t_3 - t_2^2,
t_1*t_2 - t_0*t_3]
Initialideal:    [t_1^2, t_0*t_3^2, t_1*t_3, t_1*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_1]

Gewichtsvektor:  (3, 8, 4, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^3 - t_0*t_3^2,
t_1*t_3 - t_2^2]
Initialideal:    [t_1^2, t_1*t_2, t_2^3, t_1*t_3]
Rad(in_w(I_A)):  [t_1, t_2]
Gewichtsvektor:  (1, 1, 2, 4)
Gröbner-Basis:   [t_0*t_3 - t_1*t_2, t_1*t_3 - t_2^2, t_0*t_2 - t_1^2]
Initialideal:    [t_0*t_3, t_1*t_3, t_0*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_1*t_3, t_0*t_2]

Gewichtsvektor:  (5, 2, 3, 2)
Gröbner-Basis:   [t_0*t_2 - t_1^2, t_0*t_3 - t_1*t_2, t_2^2 - t_1*t_3]
Initialideal:    [t_0*t_2, t_0*t_3, t_2^2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]

Gewichtsvektor:  (1, 1, 3, 2)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_0^2*t_3 - t_1^3, t_0*t_2 - t_1^2, t_1*t_2 - t_0*t_3]
Initialideal:    [t_2^2, t_0^2*t_3, t_0*t_2, t_1*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_2]

Gewichtsvektor:  (3, 4, 8, 3)
Gröbner-Basis:   [t_2^2 - t_1*t_3, t_1^3 - t_0^2*t_3, t_1*t_2 - t_0*t_3, t_0*t_2 - t_1^2]
Initialideal:    [t_2^2, t_1^3, t_1*t_2, t_0*t_2]
Rad(in_w(I_A)):  [t_2, t_1]

Gewichtsvektor:  (1, 2, 2, 1)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^2 - t_1*t_3]
Initialideal:    [t_1^2, t_1*t_2, t_2^2]
Rad(in_w(I_A)):  [t_1, t_2]

Gewichtsvektor:  (2, 3, 2, 5)
Gröbner-Basis:   [t_1*t_3 - t_2^2, t_0*t_3 - t_1*t_2, t_1^2 - t_0*t_2]
Initialideal:    [t_1*t_3, t_0*t_3, t_1^2]
Rad(in_w(I_A)):  [t_0*t_3, t_1]

Gewichtsvektor:  (2, 5, 2, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_0*t_3^2 - t_2^3, t_1*t_3 - t_2^2, t_1*t_2 - t_0*t_3]
Initialideal:    [t_1^2, t_0*t_3^2, t_1*t_3, t_1*t_2]
Rad(in_w(I_A)):  [t_0*t_3, t_1]

Gewichtsvektor:  (3, 8, 4, 3)
Gröbner-Basis:   [t_1^2 - t_0*t_2, t_1*t_2 - t_0*t_3, t_2^3 - t_0*t_3^2, t_1*t_3 - t_2^2]
Initialideal:    [t_1^2, t_1*t_2, t_2^3, t_1*t_3]
Rad(in_w(I_A)):  [t_1, t_2]