Full text
Trabajo Fin de M´ aster M´ aster de Iniciaci´ on a la Investigaci´ on en Matem´ aticas 2011-2012 Funciones zeta y poliedros de Newton: Aspectos te´oricos y computacionales Autor: Juan Viu Sos Director: Prof. Enrique Artal Bartolo
´ Indice Introducci´on 3 1. Preliminares 6 1.1. Los n´umeros p-´adicos.................................. 6 1.2. ElpoliedrodeNewton................................. 9 1.3. Resoluci´on de singularidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2. La funci´on zeta de Igusa 19 2.1. Definici´on y relaciones con el poliedro de Newton. . . . . . . . . . . . . . . . . . . 19 2.2. F´ormula sobre las caras de Γ(f). ........................... 22 3. La funci´on zeta Topol´ogica 29 4. Anexo: Ejemplos de ZetaFunctions.sage 34 5. Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage 53
Introducci´on 3 Introducci´on Sea f∈Z[x1, . . . , xn] y pun n´umero primo. De manera cl´asica, para el estudio del n´umero de soluciones: Nk:={a∈Z/pZn|f(a)≡0 m´od pk} se asocia al polinomio fla serie de Poincar´e generadora: P(f, T ) = ∞ X k=0 NkTk Shafarevich conjetur´o que P(f, T ) es una funci´on racional en T. Igusa [Igu74] demostr´o esta conjetura mediante una relaci´on con la integral p-´adica: Zf(s):=ZZn p |f(x)|s p|dx|, s ∈Ccon Re(s)>0 donde |dx|denota la medida de Haar en Qn pnormalizada tal que Zn p(el anillo de enteros de Qn p) tiene medida 1. Pese a ser un problema puramente combinatorio, Igusa utiliz´o resoluciones encajadas de singularidades sobre el lugar de ceros f−1(0) ⊆Cnpara probar la igualdad P(p−(n+s)) = 1−p−sZf(s) 1−p−s viendo que Zf(s), la funci´on zeta de Igusa, es una funci´on racional en p−s. Este procedimiento abre una nueva v´ıa de an´alisis en la teor´ıa de singularidades. En este estudio, se observa que cada divisor excepcional en la resoluci´on encajada de f−1(0) da un candidato a polo de Zf(s), sin embargo se comprueba que muchos de ellos no lo son realmente. Fibraci´ on de Milnor en el origen para f(x, y) = x2−y3. Siguiendo a [Mil], supongamos que ftiene una singularidad aislada en el origen. Para un ε > 0 podemos definir la fibraci´on de Milnor de la funci´on holomorfa fen el origen como la C∞-fibraci´on localmente trivial f|Bε∩f−1(D∗ η):Bε∩f−1(D∗ η)→D∗ η donde Bεes la bola abierta centrada en el origen de radio ε,Dη={z∈C| |z|< η}yD∗ η=Dηr{0}con (0 < η ε). Para 0 <|t|< η, la fibra Ft=f−1(t) se llama la fibra de Milnor de fen el origen, y tiene el tipo de homotop´ıa de un ramillete de µesferas de dimensi´on n−1 donde a µse le llama el n´umero de Milnor de la singularidad. Si tomamos Sε=∂Bεla esfera de dimensi´on 2n−1, obtenemos un enlace como resultado de la intersecci´on K=Sε∩f−1(0). El par (Sε, K) determina la topolog´ıa local de la hipersuperficie f−1(0) en la singularidad, no dependiendo del ε > 0 si ´este es suficientemente peque˜no. La transformaci´on de monodrom´ıa h:Ft→Ftes un difeomorfismo bien definido (salvo isotop´ıa) de Ft, inducida por un giro peque˜no alrededor del
4´ Indice origen en Dη. La monodrom´ıa algebraica compleja de fen el origen es la acci´on que induce la monodrom´ıa en los grupos de homolog´ıa de la fibra, es decir, la aplicaci´on lineal correspondiente h∗:H•(Ft,C)→H•(Ft,C). En el caso de singularidades aisladas, el polinomio caracter´ıstico de h∗se calcula tambi´en en funci´on de la resoluci´on. De nuevo, cada divisor excepcional da un candidato a valor propio que puede no serlo realmente. Igusa dio una conjetura relacionando los polos de la integral Zf(s) con los valores propios de la monodrom´ıa compleja. Conjetura 1 (Monodrom´ıa, Igusa).Sea f∈K[x1, . . . , xn]no constante, para Kcuerpo de n´umeros contenido en C. Se tiene que, para casi toda compleci´on p-´adica Kpde K, si s0es un polo de Zf,Kp(s), entonces exp(2iπ Re(s0)) es valor propio de la acci´on de monodrom´ıa local de fen alg´un punto de f−1(0). Esto es cierto para el caso de curvas (n= 2) y fue probado por Loeser [Loe] mediante una conjetura m´as fuerte, escrita en t´erminos de polinomios de Bernstein. Conjetura 2 (Monodrom´ıa fuerte, Igusa).Sea f∈K[x1, . . . , xn]no constante, para Kcuerpo de n´umeros contenido en C. Se tiene que, para casi toda compleci´on p-´adica Kpde K, si s0es un polo de Zf,Kp(s), entonces Re(s0)es ra´ız del polinomio de Bernstein bf(s)de f. Para fpolinomio complejo, la funci´on zeta topol´ogica Ztop,f (s) fue introducida por Denef y Loeser (ver [DenLoe92]) como una cierta clase de l´ımite de funciones zeta de Igusa, pudiendo ser expresada en t´erminos de las multiplicidades Niyνi−1 de la componentes irreducibles Eien los divisores de π∗fyπ∗ωde una resoluci´on encajada πde f−1(0), siendo ωla n-forma diferencial can´onica en Cn. La funci´on zeta topol´ogica es un invariante anal´ıtico de la singularidad, pero no topol´ogico (se puede ver un contraejemplo en [ArCaLuMe01]). Estando relacionados los polos de la funci´on zeta de Igusa con los de la funci´on zeta topol´ogica, d´andonos adem´as informaci´on sobre una resoluci´on encajada, Denef y Loeser conjeturaron: Conjetura 3 (Monodrom´ıa, Topol´ogica).Sea f∈C[x1, . . . , xn]no constante. Si s0es polo de Ztop,f (s), entonces exp(2iπs0)es valor propio de la acci´on de monodrom´ıa local de fen alg´un punto de f−1(0). De manera an´aloga, se pueden definir las respectivas funciones zeta locales en el origen con f:(Cn,0) →(C,0) germen de funci´on anal´ıtica. C´alculo de funciones zeta en Sage Existen tres problemas a considerar a la hora de intentar probar o refutar la conjetura usando resoluciones de singularidades: C´alculo expl´ıcito de una resoluci´on encajada de la hipersuperficie f−1(0). Eliminaci´on de los candidatos a polos de Ztop,f (s) que no lo sean realmente. C´alculo expl´ıcito de los autovalores de la monodrom´ıa algebraica compleja (o del polinomio caracter´ıstico de la acci´on asociada a la monodrom´ıa) en funci´on de los datos de la resoluci´on.
Introducci´on 5 Estos c´alculos son costosos en general, sobre todo los relativos a encontrar resoluciones encajadas para dimensiones superiores n > 2 como se puede ver en demostraciones parciales de la conjetura dadas por [Veys] (caso n= 2) [ArCaLuMe02] (singularidades superaisladas) y [ArCaLuMe05] (polinomios cuasiordinarios). Sin embargo, existe una clase importante de polinomios, los no degenerados con respecto las caras de su poliedro de Newton (ver Definici´on 1.10), donde es posible calcular una resoluci´on encajada del respectivo lugar de ceros, ver [Var]. A partir de esto, Denef-Loeser [DenLoe92], Hoornaert [DenHoo] y Varchenko [Var] dan f´ormulas para las respectivas funciones zeta y la monodrom´ıa en el origen. Hoornaert [HooLoo] da un un programa escrito en Maple donde implementa estas f´ormulas. Sin embargo, nos encontramos con el problema de que Maple es un software privativo en el que se cambia constantemente de sintaxis de programaci´on, y en donde Hoornaert ha tenido que acudir a una libreria externa de an´alisis convexo para poder desarrollar su programa. Bas´andonos en este programa y en los trabajos citados anteriormente, se ha preparado un programa escrito en Sage para el c´alculo de la funci´on zeta de Igusa dado un primo p(abstracto o expl´ıcito), la funci´on zeta topol´ogica, y la monodrom´ıa en el origen de polinomios (o g´ermenes de funciones anal´ıticas en el origen) que cumplan tal condici´on de no degeneraci´on. Se da acceso adem´as a toda la informaci´on relativa al poliedro de Newton, sus caras, los conos asociados, particiones simpliciales,... El programa de Hoornaert fue modificado por Artal-Melle para introducir el caso en el que se calcula la funci´on zeta topol´ogica respecto a la n-forma diferencial algebraica ω=xω1 1· · · xωn ndx1∧ · · · ∧ dxn(ver [NemVe]), donde (ω1, . . . , ωn) son los pesos, y poder aplicarlo en el caso de los polinomios cuasiordinarios a funciones degeneradas mediante un proceso inductivo. Sage (http://www.sagemath.org) es un sistema algebraico computacional de c´odigo abierto escrito en Python que incorpora software libre ya conocido para c´alculo algebraico como GAP, Maxima ´o SINGULAR, aprovechando su potencial y permitiendo desarrollar nuevo c´odigo sobre ellos. En el desarrollo del programa ZetaFunctions.sage se ha aprovechado el potencial dado por las clases y m´etodos ya incorporados en su ´ultima versi´on (v5.2), como las clases geom´etricas Polyhedron ´o Cone, que resultaron muy ´utiles en el desarrollo del programa al estar ya implementadas sobre la librer´ıa externa utilizada por Hoornaert antes citada. Sin embargo, en el caso de la clase Polyhedron, se detect´o un error en el c´odigo fuente del m´etodo que devolv´ıa la dimen- si´on para las distintas caras del poliedro. Se cre´o una funci´on propia corregida (dim face), y se ha procedido al env´ıo del reporte de error con la nueva propuesta al centro de desarrollo de Sage. Tambi´en se han implementado m´etodos nuevos como descomposiciones simpliciales de conos. El objetivo principal de este trabajo es el poder implementar todos estos c´alculos en Sage, por lo que este c´odigo y sus m´etodos ser´an enviados al centro de desarrollo para que puedan aparecer en las versiones posteriores del programa. A lo largo del desarrollo te´orico del presente trabajo, despu´es de cada definici´on y resultados obtenidos, se a˜nade la parte de c´odigo en Sage correspondiente a la parte te´orica integrado en ZetaFunctions. No se incluir´an fuera del ap´endice las funciones del c´odigo relativas a salidas a pantalla de la informaci´on de cada objeto o m´etodos. La parte correspondiente al c´alculo de la funci´on zeta para la monodrom´ıa y el polinomio caracter´ıstico (para singularidades aisladas) se pueden encontrar en [Var]. Para la presentaci´on del c´odigo en L A T EX, se utiliz´o el m´odulo Pygments de Python, dise˜nado para mostrar c´odigo en distintos formatos (http://pygments.org). Todos los gr´aficos y dibujos son originales y fueron hechos con el programa open-source de gr´aficos vectoriales Inkscape (http://inkscape.org).
61 Preliminares 1. Preliminares En esta primera secci´on introduciremos los conceptos y herramientas b´asicos para definir las diferentes funciones zeta y los resultados implementados en el c´odigo. 1.1. Los n´umeros p-´adicos Sea pun n´umero primo. Antes de introducir la funci´on zeta de Igusa, debemos concretar el marco aritm´etico en el que surge: los n´umeros p-´adicos. Definici´on de Qpy propiedades. Definici´on 1.1. Definimos el orden p-´adico (o valuaci´on p-´adica) como la funci´on: ordp:Q−→ Z∪ {∞} x7−→ ordp(x) = ordppna b=ncon p-ab 07−→ ∞ Nota 1.1.Notar que nes el mayor entero que cumple x≡0 m´od pnpara x∈Z. Propiedad 1.1. Sean x, y ∈Q, es sencillo comprobar que el orden p-´adico cumple las siguientes propiedades: 1. ordp(xy) = ordp(x) + ordp(y). 2. ordp(x+y)≥m´ın{ordp(x),ordp(y)}. Definici´on 1.2. Sea x∈Q, definimos la norma p-´adica de acomo: |a|p= p−ordpxsi x6= 0 0 si x= 0 Proposici´on 1.1. |·|pinduce una ultram´etrica sobre Q. Demostraci´on Sean x, y ∈Q, se cumple a partir de las propiedades del orden p-´adico: 1. |0|p=p−∞ = 0. 2. |xy|p=p−ordp(xy)=p−ordp(x)p−ordp(y)=|x|p|y|p. 3. |x−y|p=p−ordp((−1)(y−x)) =p−ordp(−1)−ordp(y−x)=p−ordp(y−x)=|y−x|p. 4. |x+y|p=p−ordp(x+y)≤p−m´ın{ordp(x),ordp(y)}= m´ax{p−ordp(x), p−ordp(y)}= m´ax{|x|p,|y|p}. Nota 1.2. 1. A la propiedad 4 sobre la suma en la demostraci´on anterior se le llama la 4-desigualdad fuerte.
1.1 Los n´umeros p-´adicos 7 2. La 4-desigualdad fuerte en un espacio m´etrico (X, k · k) es equivalente a decir que ”todos los tri´angulos son is´osceles”. kxk<kyk. kx−yk ≤ m´ax{kxk,kyk} =kyk. kyk=ky−x+xk ≤ m´ax{kx−yk,kxk} =kx−yk(ya que, en otro caso kyk≤kxk). Luego kyk=kx−yk. 3. Consideremos la sucesi´on (pn)∞ n=1. Vemos que con respecto a la norma p-´adica: |pn|p= p−n−→ 0 cuando n→ ∞, converge a 0. Definici´on 1.3. Se define el cuerpo de los n´umeros p-´adicos Qpa la compleci´on de Qcon la norma |·|p. Llamaremos anillo de los enteros p-´adicos al subconjunto: Zp:={a∈Qp| |a|p≤1} Propiedad 1.2. Todo elemento 06=a∈Qptiene una representaci´on ´unica de la forma: a=pordp(a) ∞ X i=0 aipi con ai∈ {0,1, . . . , p −1}ya06= 0. Nota 1.3.Se tiene Z× p={a∈Zp| |a|p= 1}=Zp/pZpson las unidades de Zp. Uno de los resultados m´as importante sobre polinomios p-´adicos viene dado por el siguiente lema. Lema 1.1 (Hensel).Sea f∈Zp[x]. Si para cierto a0∈Zpse tiene f(a0)≡0 (mod p)yf0(a0)6≡ 0 (mod p), entonces existe un ´unico a∈Zptal que f(a)=0tal que a≡a0(mod p). Topolog´ıa, medida e integrales en Qp. Propiedad 1.3. A partir de la 4-desigualdad fuerte, se tienen las siguientes propiedades topol´ogicas: 1. Todo punto contenido en una bola en Qpes centro de la propia bola. 2. Toda bola en Qpes abierta y cerrada. 3. Para cualquier par de bolas en Qp, o bien son disjuntas, o bien una est´a contenida en la otra.
81 Preliminares El espacio m´etrico Qptiene una base de abiertos formada por elementos de la forma: a+pnZp=x∈Qp| |x−a|p≤1 pn con a∈Qpyn∈Z. Vamos a introducir una medida Borel en Qputilizando esta base de abiertos sobre la que definir integraci´on: la medida de Haar. Definici´on 1.4. Sea Gun grupo topol´ogico localmente compacto. Un a medida de Haar definida sobre Ges una medida Borel µque satisface: 1. µ(xE) = µ(E), para todo x∈Gy para todo medible-Borel E⊂G. 2. µ(U)>0 para todo abierto U⊆G. 3. µ(K)<+∞para todo compacto K⊆G. Definici´on 1.5. Llamaremos medida de Haar en Qpnormalizada sobre Zpa la medida definida sobre la base de abiertos que cumple: µHaar(a+pnZp) = 1 pn Propiedad 1.4. Sea Emedible-Borel de Qp. Se tiene: 1. Invarianza por traslaci´on: µHaar(x+E) = µHaar(E),∀x∈Qp. 2. µHaar(Zp) = 1. Nota 1.4. 1. De la misma manera, podemos generalizar la medida de Haar en Qn pnormalizada sobre Zn p mediante la medida producto. 2. Bajo signo de integraci´on, representaremos la medida de Haar normalizada con |dx|. Ejemplo 1.1. Sabemos que podemos poner las unidades de Zpcomo uni´on disjunta: Z× p= p−1 [ a=1 a+pZp Por lo que podemos obtener f´acilmente: µHaar(Z× p) = p−1 X a=1 Za+pZp |dx|= (p−1) ZpZp |dx|=p−1 p= 1 −p−1
1.2 El poliedro de Newton 9 1.2. El poliedro de Newton Definici´on 1.6. Sea f(x) = f(x1, . . . , xn) = Pω∈Nnaωxω1 1. . . xωn npolinomio definido sobre un anillo conmutativo R[x1, . . . , xn] tal que f(0) = 0. Llamaremos soporte de fal conjunto supp(f) = {ω∈Nn|aω6= 0} Definimos el poliedro de Newton global de f, Γgl(f), como la envolvente convexa de supp(f). Sea ahora f∈R[x1, . . . , xn]y tomemos R+={x∈R|x⩾0}, definimos el poliedro de Newton de f, Γ(f), como la envolvente convexa en (R+)ndel conjunto [ ω∈supp(f) ω+ (R+)n Nota 1.5.Es f´acil ver que Γ(f) = Γgl(f)+(R+)n. def support_points(f): """ Support of f: points of ZZ^n corresponding to the exponents of the monomial into ‘‘f‘‘. """ points =f.exponents() return points def newton_polyhedron(f): """ Construction of Newton’s Polyhedron Gamma(f) for the polynomial ‘‘f‘‘. """ P=Polyhedron(vertices =support_points(f), rays=VectorSpace(QQ,f.parent().ngens()).basis()) return P Definici´on 1.7. Llamaremos cara de Γ(f) (resp. Γgl(f)) a todo subconjunto convexo τque se pueda obtener mediante la intersecci´on de Γ(f) (resp. Γgl(f)) y un hiperplano Hde Rntal que alguno de los semiespacios definidos por Hcontiene a Γ(f) (resp. Γgl(f)). Nota 1.6.Estamos considerando al poliedro total (Γ(f) ´o Γgl(f)) como cara. Para toda cara distinta al vac´ıo o al total hablaremos de caras propias. def faces(P): """ Returns a LatticePoset of the faces in the polyhedron ‘‘P‘‘ with a relation of order (content between the faces). """ P_lattice =LatticePoset(P.face_lattice()) return P_lattice def proper_faces(P): """ Returns a list with the proper faces of the polyhedron ‘‘P‘‘ sorted in increasing order dimension. """ L=faces(P).list()[1:-1] return L
16 1 Preliminares def same_facet(lcone_gens, p, bcone_gens): """ Checks if ‘‘lcone_gens‘‘ (a cone respresented by their generators) and the fix point ‘‘p‘‘ belongs to the same facet of ‘‘bcone_gens‘‘. """ bool =False for face_cone in Cone(bcone_gens).facets(): rays_lcone =set(map(tuple,lcone_gens)) rays_face =set(map(tuple,primitive_vectors_cone(face_cone))) if ({tuple(p)}.union(rays_lcone)).issubset(rays_face): bool =True break return bool def simplicial_partition(cone): """ Returns a list with the subcones who forms the simplicial partition of ‘‘cone‘‘. """ L=[cone] if not cone.is_simplicial(): dict ={} F=Fan(L) list_subcones =[] #Ordered list of subcones by ascending dimension for ls in F.cone_lattice().level_sets()[1:-1]: list_subcones =list_subcones +ls for subcone in list_subcones: if subcone.element.is_simplicial(): dict[subcone] =[set(subcone.element.rays())] else: partition =[] fixpoint =subcone.element.rays()[0] for subsubcone in filter(lambda x: x<subcone, list_subcones): if not same_facet(subsubcone.element.rays(), fixpoint, \ subcone.element.rays()): for part in dict[subsubcone]: partition =partition +\ [part.union({fixpoint})] dict[subcone] =partition total_cone =list_subcones[-1] L=map(Cone,dict[total_cone]) return L Definici´on 1.16. Sean a1, . . . , arvectores en Znlinealmente independientes sobre R. Definimos la multiplicidad de a1, . . . , arcomo el ´ındice del ret´ıculo Za1+. . . +Za1en el grupo de puntos enteros del espacio vectorial real generado por a1, . . . , ar. Propiedad 1.6. Sean a1, . . . , ar∈Znlinealmente independientes sobre R. Se tiene: 1. La multiplicidad de a1, . . . , ares igual al n´umero de puntos enteros contenidos en el conjunto r X i=1 λiai|0≤λi<1 . 2. Sea A=a1|. . . |ar, la multiplicidad de a1, . . . , ares igual al producto de los elementos en la diagonal de la forma de Smith de A.
1.3 Resoluci´on de singularidades 17 def multiplicity(scone): """ Returns the multiplicity of a simple cone. """ L=primitive_vectors_cone(scone) A=matrix(ZZ, L) S=A.smith_form()[0] result = 1 for iin range(len(L)): result =result*S[i,i] return result def integral_vectors(scone): """ Returns a list of integral vectors contained in {Sum lambda_j*a_j | 0<= lambda_j <1, a_j basis of the simple cone}. """ origin =VectorSpace(QQ,scone.lattice_dim()).zero_vector() if scone.dim() == 0: integrals =[origin] else: cone_gens =primitive_vectors_cone(scone) ngens =len(cone_gens) A=transpose(matrix(ZZ, cone_gens)) D,U,V=A.smith_form() diag =D.diagonal() coords =mrange(diag, vector) #Aux function for escale the vectors in the list def escale(v): v=vector(QQ, v) for iin range(ngens): if diag[i] != 0: v[i] =v[i]/diag[i] else: v[i] = 0 return v #Aux function ’floor’ for vectors component by component def floor(v): for iin range(ngens): v[i] =v[i] -v[i].floor() return v #Now, we escale and we return to the canonical basis L=map(lambda v: V*v, map(escale, coords)) #Finally, we find the integral vectors of own region integrals =map(lambda v: matrix(QQ,A)*v, map(floor,L)) return integrals 1.3. Resoluci´on de singularidades Introduciremos nociones y notaciones b´asicas relativas a la resoluci´on de singularidades y resoluciones encajadas. Sea Xvariedad algebraica sobre el cuerpo Kalgebraicamente cerrado y con char K= 0. Denotemos por Sing(X) el conjunto de puntos singulares de X. Definici´on 1.17. Una resoluci´on de Xes un morfismo propio π:Y→Xdonde: (i) Y es una variedad lisa (es decir, Sing(Y) = ∅).
18 1 Preliminares (ii) La restricci´on π|Y\π−1(Sing(X)) :Y\π−1(Sing(X)) →X\Sing(X) es un isomorfismo biracional. Diremos que la resoluci´on es buena si adem´as cumple: (iii) Para todo p∈π−1(Sing(X)), existe una carta x:U∼ = −→ V p7−→ 0 con U⊆YyV⊆Kn, tal que U∩π−1(Sing(X)) = {xi1, . . . , xir= 0}para ciertos 0 < i1< . . . < ir≤n. Definici´on 1.18. Sea Xvariedad algebraica lisa, f:X→Kpolin´omica. Una resoluci´on encajada de fes un morfismo propio π:Y→Xdonde: (i) Y es una variedad lisa (es decir, Sing(Y) = ∅). (ii) La restricci´on π|Y\π−1(Sing(f−1(0))) :Y\π−1(Sing(f−1(0))) →X\Sing(f−1(0)) es un isomorfismo birracional. (iii) Para todo p∈π−1(Sing(X)), existe una carta x:U∼ = −→ V p7−→ 0 con U⊆YyV⊆Kn, sobre la cual π∗f=xN1 i1· · · xNr irucon u(0) 6= 0 y Ni≥0. Sea f∈C[x1, . . . , xn] un polinomio no nulo. Sea π:X→Cnuna resoluci´on de f, denotamos: (Ei)i∈Jlas componentes irreducibles de π−1(f−1(0)): π∗(f−1(0)) = r X i=1 NjEj con Njla multiplicidad con la que π∗fse anula en el punto gen´erico de Ej. ˚ E=Ei\Sj6=iEj, para i∈J. EI=Ti∈IEiy˚ EI=EI\Sj6∈IEj, para I⊂J. Para i∈Ifija, elegiremos una forma diferencial algebraica ωde grado n, definida sobre un entorno gen´erico del punto gen´erico π(Ei) sobre Cn, de tal manera que no se anula sobre este punto. Denotemos α(ω) la multiplicidad con la que π∗ωse anula en el punto gen´erico de Ei,α(ω) no depende de i. Denotamos: νi=α(ω)+1. Es decir, si ω= dx1∧ · · · ∧ dxn, entonces respecto a las carta coordenada centrada en el origen de (iii) π∗ω=xν1−1 i1· · · xνr−1 i1dx1∧ · · · ∧ dxn con νiasociada a la componente irreducible Ei. Respectivamente, si tenemos f:(Cn,0) →(C,0) un germen de funci´on anal´ıtica no nula, tomaremos un representante f:B→Cde la clase del germen definida sobre Bbola abierta centrada en el origen. De esta forma, consideraremos an´alogamente una resoluci´on πdel germen fcomo la resoluci´on π:X→Bdel representante f:B→C, con todas las notaciones anteriores. La existencia de la resoluci´on para cuerpos de caracter´ıstica 0 est´a garantizada por [Hiro].
19 2. La funci´on zeta de Igusa Sea pun cierto primo y denotemos como antes Qpal cuerpo de los n´umeros p-´adicos, Zpel anillo de los enteros p-´adicos y Fpal cuerpo finito de pelementos. 2.1. Definici´on y relaciones con el poliedro de Newton. Definici´on 2.1. Sea f(x) = f(x1, . . . , xn)∈Zp[x1, . . . , xn]. Definimos la funci´on zeta de Igusa asociada a fde la siguiente forma: Zf(s) = ZZn p |f(x)|s p|dx| ∈ Q(p−s), s ∈Ccon Re(s)>0 donde |dx|denota la medida de Haar en Qn pnormalizada tal que Zn ptiene medida 1. Nota 2.1.Denotaremos igualmente Zf(s) a la extensi´on meromorfa de la funci´on zeta de Igusa. Nota 2.2.Para f∈Zp[x1, . . . , xn] y τcara del poliedro de Newton Γ(f), denotaremos ¯ fτ(x) al polinomio asociado a la cara τcon coeficientes en Fp, es decir, reduciendo cada coeficiente aωde fτm´odulo pZp. Nota 2.3. 1. La f´ormula para la funci´on zeta de Igusa que estamos estudiando se da sobre familias de polinomios que cumplen condiciones de no degeneraci´on sobre K=Fp´o Qp. Los conjuntos de caras sobre los que se cumple esta condici´on depende del enfoque global (conjunto total de caras) o local (caras compactas del poliedro de Newton) de la funci´on zeta en el origen. 2. La condici´on de no degeneraci´on sobre Fpen una cara τes equivalente a que el sistema de ecuaciones en congruencias: fτ≡0 m´od p ∂fτ ∂xi≡0 m´od p, i = 1,2,3, . . . no tiene soluci´on en (Z× p)n. def solve_in_Fp_x(f,p): """ For f a integral polynomial, retruns a list [{a in (F_p^x)^d | f*(a)=0}, {vars of f*}] with f* being f with coefficients in F_p(f), for a given rime number ‘‘p‘‘. """ g=f.change_ring(GF(p)) vars =g.variables() nvars =g.nvariables() h=(GF(p)[vars])(g) if len(h.exponents()) == 1: sols =[] #If f_tau is a monomial else: Fp_x_nvars =list(Tuples(range(1,p), nvars)) #(Fp-0)^nvars if h== 0:return [Fp_x_nvars, vars] sols =filter(lambda a:h(tuple(a))==0,Fp_x_nvars) return [sols,vars]
20 2 La funci´on zeta de Igusa def is_degenerated(f_tau, p =None, method =’default’): """ Checks if the polynomial ‘‘f_tau‘‘ is degenerated over F_p, for p a given prime number ‘‘p‘‘.\n If ‘‘p = None‘‘, checks degeneration over CC and (equivalent to be degenerated over F_p with p>>0).\n For finite fields (‘‘p‘‘ is a given prime):\n - ‘‘method = ’default’‘‘ check the condition using evaluation over the (F_p^x)^n in the system of equations.\n - ‘‘method = ’ideals’‘‘ check the condition using ideals over the finite field. """ bool =False if type(p) != Integer: vars =f_tau.parent().gens() S=QQ[vars] I=S(f_tau).jacobian_ideal() +S*(S(f_tau)) bool =prod(S.gens()) not in I.radical() else: if method == ’ideals’: S=GF(p)[vars] I=S(f_tau).jacobian_ideal() +S*(f_tau) for xi in vars: I=I+S*(xi^(p-1)-1)#xi unity in Fp iff xi^{(p-1)-1}=0 bool =1not in I#True if I in NOT the ring (ie, sist. has solution) else: [candidates, vars]=solve_in_Fp_x(f_tau,p) if vars == []: bool =True else: S=GF(p)[vars] g=f_tau.change_ring(GF(p)) for xi in S.gens(): df_tau =S(g).derivative(xi) candidates =filter(lambda a: df_tau(tuple(a)) == 0, candidates) if len(candidates) != 0: bool =True break return bool Propiedad 2.1. Sea 06=f∈Z[x1, . . . , xn]con f(0) = 0. 1. Si fes no degenerado sobre Qpcon respecto a todas las caras de su poliedro de Newton entonces , si psuficiente grande (p0), fes no degenerado sobre Fpcon respecto a todas las caras de su poliedro de Newton. 2. Si fes no degenerado sobre Ccon respecto a todas las caras de su poliedro de Newton entonces fes no degenerado sobre Fpcon respecto a todas las caras de su poliedro de Newton, para casi todo primo p(es decir, para todo primo excepto en un conjunto finito). Ahora, introduciremos una serie de resultados clave en la f´ormula que se da para la funci´on zeta de Igusa bajo las condiciones de no degeneraci´on que hemos visto para los polinomios. Propiedad 2.2. Sea f∈Zp[x1, . . . , xn]ya∈Zn p. Supongamos que el sistema de congruencias f≡0 m´od p ∂f ∂xi≡0 m´od p, i = 1,2,3, . . .
2.1 Definici´on y relaciones con el poliedro de Newton. 21 no tiene soluci´on en el coset a+ (pZp)n. Entonces, para s∈Ctal que Re(s)>0, se tiene que: Za+(pZp)n |f(x)|s p|dx|= p−nsi f(a)6≡ 0 m´od p p−n(p−1) p−(s+1) 1−p−(s+1) si f(a)≡0 m´od p donde |dx|denota la medida de Haar en Qn pnormalizada tal que Zn ptiene medida 1. Demostraci´on Se puede encontrar en [DenHoo] una demostraci´on elemental de esta propiedad usando el Lema de Hensel. Corolario 2.1. Sea f∈Zp[x1, . . . , xn]ya∈Zn p. Denotemos por ¯ fel polinomio sobre Fpobtenido reduciendo los coeficientes de fm´odulo pZpy sea N= #{a∈(F× p)n|¯ f(a) = 0}. Supongamos que el sistema de congruencias f≡0 m´od p ∂f ∂xi≡0 m´od p, i = 1,2,3, . . . no tiene soluci´on en (Z× p)n. Entonces, para s∈Ctal que Re(s)>0, se tiene que: Z(Z× p)n |f(x)|s p|dx|=p−n(p−1)n−pN ps−1 ps+1 −1 donde |dx|denota la medida de Haar en Qn pnormalizada tal que Zn ptiene medida 1. Demostraci´on Podemos dar una partici´on en cosets del dominio de integraci´on: (Z× p)n=[ a∈{1,...,p−1}n a+ (pZp)n Por lo que: Z(Z× p)n |f(x)|s p|dx|=X a∈{1,...,p−1}n f(a)6≡0 m´od pZa+(pZp)n |f(x)|s p|dx| +X a∈{1,...,p−1}n f(a)≡0 m´od pZa+(pZp)n |f(x)|s p|dx| De esta forma, se cumplen las hip´otesis de la Propiedad 2.2 para cada a∈ {1, . . . , p −1}ny contando entonces aquellos en los que f(a)≡0 m´od p: Z(Z× p)n |f(x)|s p|dx|= ((p−1)n−N)p−n+Np−n(p−1) p−(s+1) 1−p−(s+1) =p−n (p−1)n−N1−p−s 1−p−(s+1) !
22 2 La funci´on zeta de Igusa 2.2. F´ormula sobre las caras de Γ(f). Vamos a dar finalmente la f´ormula para la funci´on zeta de Igusa para polinomios que sean no degenerados sobre Fpcon respecto a todas las caras de su poliedro de Newton (caso global), o con respecto a sus caras compactas (caso local en el origen). def is_all_degenerated(f,P, p =None, local =False, method =’default’): """ Checks if own polynomial ‘‘f‘‘ is degenerated over F_p (‘‘p‘‘ prime) with respect the faces of the polyhedron ‘‘P‘‘.\n If ‘‘p = None‘‘, checks degeneration over CC and (equivalent to be degenerated over F_p with p>>0).\n ‘‘local = True‘‘ checks degeneration for local case (only with respect the compact faces).\n For finite fields (‘‘p‘‘ is a given prime):\n - ‘‘method = ’default’‘‘ check the condition using evaluation over the (F_p^x)^n in the system of equations.\n - ‘‘method = ’ideals’‘‘ check the condition using ideals over the finite field. """ bool =False if local == True: faces_set =compact_faces(P) else: faces_set =faces(P)[1:] for tau in faces_set: f_tau =ftau(f,tau) if is_degenerated(f_tau, p, method) == True: bool =True print "The formula for Igusa Zeta function is not valid:" if type(p) != Integer: print "The polynomial is degenerated at least with respect "\ "to the face tau = {" +face_info_output(tau) +"} "\ "over the complex numbers!" else:print "The polynomial is degenerated at least with respect to the face tau = "\ "{" +face_info_output(tau) +"} over GF(" +str(p) +")!" break return bool Primero, vamos a introducir las funciones con las que se expresar´a la f´ormula para la funci´on zeta de Igusa, en relaci´on con las caras del poliedro de Newton, los conos duales asociados como partici´on de (R+)ny los puntos enteros contenidos en ´estos. Definici´on 2.2. Para k= (k1, . . . , kn)∈Rn, consideramos la suma de componentes: σ(k) = n X i=1 ki def sigma(v, weights =None): """ Returns the pondered sum of the components in vector. """ if weights == None: result =sum(v) else: result =vector(v).dot_product(vector(weights)) return result
2.2 F´ormula sobre las caras de Γ(f). 23 Definici´on 2.3. Sea τcara de Γ(f), pprimo y s∈Ctal que Re(s)>0. Consideraremos las siguientes expresiones: ·Nτ:= #{a∈(F× p)n|¯ fτ(a) = 0} ·Lτ(s):=p−n(p−1)n−pNτ ps−1 ps+1 −1 ·S∆τ(s):=X k∈Nn∩∆τ p−σ(k)−m(k)s Notar que estamos tomando tambi´en τ= Γ(f). def Ntau(f,tau,p): """ Returns the number Ntau = #{a in (F_p^x)^d | f*_tau(a)=0} with f*_tau being f_tau with coefficients in F_p(f_tau) for tau face. """ n=f.parent().ngens() f_tau =ftau(f,tau) if type(p) != Integer: print "You must to give a ’Dictionary’ with the number of solutions in GF(" +str(p) +\ ")^" +str(n) +" associated to each face." else: [sols,vars]=solve_in_Fp_x(f_tau,p) nsols =len(sols)*(p-1)^(n -len(vars)) return nsols def Ltau(f,tau,p,abs_Ntau,s): """ Returns a list [L_tau, N_tau] in terms of variable ‘‘s‘.\n ‘‘abs_Ntau‘‘ is the corresponding Ntau’s values for abstract prime ‘‘p‘‘. """ n=f.parent().ngens() if type(p) != Integer: N_tau =abs_Ntau else: N_tau =Ntau(f,tau,p) result =p^(-n)*((p-1)^n-p*N_tau*((p^s-1)/(p^(s+1)-1))) result =factor(result) return [result, N_tau] def Lgamma(f,p,abs_Ngamma,s): """ Returns the value Ntau for the total polyhedron in terms of variable ‘‘s‘.\n ‘‘abs_Ngamma‘‘ is the corresponding Ngamma value for abstract prime ‘‘p‘‘. """ n=f.parent().ngens() if type(p) != Integer: N_gamma =abs_Ngamma else: [sols,vars]=solve_in_Fp_x(f,p) N_gamma =len(sols)*(p-1)^(n -len(vars)) result =p^(-n)*((p-1)^n-p*N_gamma*((p^s-1)/(p^(s+1)-1))) return result Nota 2.4.Para calcular S∆τ≡S∆τ(s), consideraremos una partici´on de ∆τen conos simpliciales racionales (notar que estamos tomando tambi´en los subconos simpliciales maximales que aparecen
24 2 La funci´on zeta de Igusa como intersecci´on de los conos de mayor dimensi´on, rellenando de esta manera todo el interior de ∆τ). De esta forma, sobre cada cono de la partici´on: S∆τ=XS∆icon S∆i=X k∈Nn∩∆i p−σ(k)−m(k)s Propiedad 2.3. En las condiciones anteriores, sea ∆iun cono simplicial estrictamente generado por a1, . . . , ae∈Nnlinealmente independientes. Entonces: S∆i=Phpσ(h)+m(h)s (pσ(a1)+m(a1)s−1) · · · (pσ(ae)+m(ae)s−1) donde hrecorre los puntos enteros de {Pr i=1 λiai|0≤λi<1}. def Stau(f,P,tau,p, weights,s): """ Returns a list [S_tau, cone_info] with ‘‘cone_info‘‘ containing a string of information about the cones, simplicial partition, multiplicity and integral points.\n Value S_tau is in terms of variable ‘‘s‘‘. """ c=cone_from_face(tau) dim_cone =c.dim() F=simplicial_partition(c) result = 0 for scone in F: num = 0 den = 1 for hin integral_vectors(scone): num =num +p^(sigma(h, weights) +m(h,P)*s) for ain primitive_vectors_cone(scone): den =den*(p^(sigma(a, weights) +m(a,P)*s) - 1) result =factor(simplify(expand(result +num/den))) info =cone_info_output(c,F)+"\n"+"multiplicities = " +str(map(multiplicity,F)) +\ ", integral points = " +str(map(integral_vectors,F)) return [result, info] Demostraci´on Fijemos xτen la cara τ, se tiene que m(k) = k·xτpara todo k∈∆τ. Luego: S∆i=X k∈Nn∩∆i p−σ(k)−k·xτs Consideremos dos casos: ∆icono simple. Esto es equivalente a que Nn∩∆i=N>0a1+. . . +N>0ae Puesto que a1, . . . , aelinealmente independientes: S∆i=X λ1,...,λe∈N>0 p−σ(λ1a1+...+λeae)−(λ1a1+...+λeae)·xτs = ∞ X λ1=1 (p−σ(a1)−a1·xτs)λ1· · · ∞ X λe=1 (p−σ(ae)−ae·xτs)λe
2.2 F´ormula sobre las caras de Γ(f). 25 Ya que estamos considerando Re(s)>0 y p > 1, tenemos que |p−σ(aj)−aj·xτs|<1 para j= 1, . . . , e, por lo que las series geom´etricas convergen y: S∆i=p−σ(a1)−a1·xτs 1−p−σ(a1)−a1·xτs· · · p−σ(ae)−ae·xτs 1−p−σ(ae)−ae·xτs =1 (pσ(a1)+a1·xτs−1) · · · (pσ(ae)+ae·xτs−1) Yaj·xτ=m(aj) ya que aj∈¯ ∆τ={a∈(R+).|F(a)⊇τ}, para todo j= 1, . . . , e. Caso general. Consideremos el conjunto: Zn∩ { e X j=1 µjaj|0< µj≤1}(1) En el caso general, podemos poner: Nn∩∆i= ∅ [(g+Na1+. . . +Nae) con grecorriendo el conjunto (1). Luego: S∆i= X g p−σ(g)−g·xτs X λ1,...,λe∈N>0 p−σ(λ1a1+...+λeae)−(λ1a1+...+λeae)·xτs Y como Re(s)>0, tenemos: S∆i= X g p−σ(g)−g·xτs pσ(a1+...+ae)+(a1+...+ae)·xτs (pσ(a1)+a1·xτs−1) · · · (pσ(ae)+ae·xτs−1) =Pgpσ(a1+...+ae−g)+(a1+...+ae−g)·xτs (pσ(a1)+a1·xτs−1) · · · (pσ(ae)+ae·xτs−1) con grecorriendo el conjunto (1). Los elementos ajy (a1+. . . +ae−g) pertenecen a ¯ ∆τ, luego aj·xτ=m(aj) y (a1+. . . +ae−g)·xτ=m(a1+. . . +ae−g). De esta forma, reescribiendo h=a1+. . . +ae−g: S∆i=Phpσ(h)+m(h)s (pσ(a1)+m(a1)s−1) · · · (pσ(ae)+m(ae)s−1) donde hrecorre Zn∩ {Pr i=1 λiai|0≤λi<1}. Teorema 2.1. Sea pprimo y f∈Zp[x1, . . . , xn]polinomio no degenerado sobre Fpcon respecto a todas las caras de su poliedro de Newton Γ(f). Se tiene que: Zf(s) = LΓ(f)(s) + X τcara propia de Γ(f) Lτ(s)S∆τ(s) para s∈Ccon Re(s)>0.
32 3 La funci´on zeta Topol´ogica caras de su poliedro de Newton global Γgl(f), entonces: ·Z(1) top,f (s) = X τv´ertice de Γ(f) J(τ, s) + s s+ 1X τcara de Γ(f) dim τ≥1 (−1)dim τ(dim τ)! Vol(τ)J(τ, s) ·Z(d) top,f (s) = X τcara de Γ(f) d|m(∆τ) (−1)dim τ(dim τ)! Vol(τ)J(τ, s),si d > 1. Nota 3.5.De forma similar, para f:(Cn,0) →(C,0) un germen de funci´on anal´ıtica no degenerada sobre Ccon respecto a todas las caras del poliedro de Newton, entonces tenemos f´ormulas an´alogas para Z(1) top,f yZ(d) top,f con d > 1 pero considerando ´unicamente las caras compactas de Γ(f) en los respectivos sumatorios. def is_global_degenerated(f, p =None, method =’default’): """ Checks if own polynome ‘‘f‘‘ over F_p with respect all the faces of the Global Newton’s Polyhedron. If p = None, checks degeneration over CC and (equivalent to be degenerated over F_p with p>>0). For finite fields (‘‘p‘‘ is a given prime): - ‘‘method = ’default’‘‘ check the condition using evaluation over the (F_p^x)^n in the system of equations - ‘‘method = ’ideals’‘‘ check the condition using ideals over the finite field. """ Q=f.newton_polytope() #Global Newton Polyhedron of f bool =False for tau in faces(Q)[1:]: f_tau =ftau(f,tau) if is_degenerated(f_tau, p, method) == True: bool =True print "The formula for Topological Zeta function is not valid:" if type(p) != Integer: print "The polynomial is degenerated at least with respect "\ "to the face tau = {" +face_info_output(tau) +\ "} over the complex numbers!" else:print "The polynomial is degenerated at least with respect to the face tau "\ "= {" +face_info_output(tau) +"} over GF(" +str(p) +")!" break return bool def face_divisors(d,faces_set,P): """ Returns a list of faces in ‘‘faces_set‘‘ such that d divides m(Delta_tau) = gcd{m(a)| a in Delta_tau and ZZ^n}. """ if d==1:return faces_set L_faces =list() dim_total =P.dim() for tau in faces_set: c=cone_from_face(tau) F=simplicial_partition(c) L_vectors =list() #We need to evaluate m over the basis of the cone and the integral points views above. for scone in F: L_vectors =L_vectors +integral_vectors(scone) +primitive_vectors_cone(scone) l=gcd(map(lambda i: m(i,P), L_vectors)) if d.divides(l): L_faces.append(tau) return L_faces
33 def topological_zeta(f, d = 1, local =False, weights =None, info =False): """ The Topological Zeta Function Z_{top, f}^(d) for ‘‘d‘‘>=1, in terms of variable ‘‘s‘‘.\n ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ s=var(’s’) P=newton_polyhedron(f) result =NaN if is_global_degenerated(f) == False: result = 0 if local == True: faces_set =compact_faces(P) else: faces_set =proper_faces(P) if d== 1: total_face =faces(P)[-1] dim_gamma =dim_face(total_face) vol_gamma =face_volume(f,total_face) result =(s/(s+1))*((-1)^dim_gamma)*vol_gamma if info == True:print "Gamma: total polyhedron\n"+"J_gamma = 1 , "\ "dim_Gamma!*Vol(Gamma) = " +str(vol_gamma) +"\n\n" faces_set =face_divisors(d,faces_set,P) for tau in faces_set: [J_tau, cone_info] =Jtau(tau,P,weights,s) dim_tau =dim_face(tau) vol_tau =face_volume(f,tau) if info == True: i=proper_faces(P).index(tau) print "tau" +str(i) +":"+face_info_output(tau) +"\n"+cone_info +"\n"+\ "J_tau = " +str(J_tau) +" , dim_tau!*Vol(tau) = " +str(vol_tau) +"\n\n" if d== 1: if dim_tau == 0: term =J_tau else: term =(s/(s+1))*((-1)^dim_tau)*vol_tau*J_tau else: term =((-1)^dim_tau)*vol_tau*J_tau result =simplify(expand(result +term)) if result != 0: result =factor(result) return result Demostraci´on Se puede encontrar en [DenLoe92] usando las resoluciones encajadas introducidas por [Var].
34 4 Anexo: Ejemplos de ZetaFunctions.sage 4. Anexo: Ejemplos de ZetaFunctions.sage A modo de comparativa con el programa original de Hoornaert en Maple, se incluyen varios ejemplos sacados de la literatura y que ya fueron analizados en [HooLoo]. Ejemplos para la Funcion Zeta de Igusa Ejemplo 3: x2−y2+z3 R.<x,y,z>=QQ[] zex3 =ZetaFunctions(x^2-y^2+z^3) zex3.give_info_newton(faces =True) Newton’s polyhedron of z^3 + x^2 - y^2: support points = [(0, 0, 3), (2, 0, 0), (0, 2, 0)] vertices = [(0, 0, 3), (0, 2, 0), (2, 0, 0)] number of proper faces = 13 Facet 1: y >= 0 Facet 2: z >= 0 Facet 3: x >= 0 Facet 4: 3*x + 3*y + 2*z - 6 >= 0 Information about faces: tau0: dim 0, vertices = [(0, 0, 3)], rays = [] tau1: dim 0, vertices = [(0, 2, 0)], rays = [] tau2: dim 0, vertices = [(2, 0, 0)], rays = [] tau3: dim 1, vertices = [(0, 0, 3)], rays = [(0, 0, 1)] tau4: dim 1, vertices = [(0, 0, 3), (0, 2, 0)], rays = [] tau5: dim 1, vertices = [(0, 2, 0)], rays = [(0, 1, 0)] tau6: dim 1, vertices = [(0, 0, 3), (2, 0, 0)], rays = [] tau7: dim 1, vertices = [(0, 2, 0), (2, 0, 0)], rays = [] tau8: dim 1, vertices = [(2, 0, 0)], rays = [(1, 0, 0)] tau9: dim 2, vertices = [(0, 0, 3), (2, 0, 0)], rays = [(0, 0, 1), (1, 0, 0)] tau10: dim 2, vertices = [(0, 2, 0), (2, 0, 0)], rays = [(0, 1, 0), (1, 0, 0)] tau11: dim 2, vertices = [(0, 0, 3), (0, 2, 0)], rays = [(0, 0, 1), (0, 1, 0)] tau12: dim 2, vertices = [(0, 0, 3), (0, 2, 0), (2, 0, 0)], rays = []
35 zex3.newton_plot() zex3.cones_plot() p= 3: zex3.igusa_zeta(3) 2*(3^(2*s + 4) - 3^(s + 1) + 2)*3^(2*s)/((3^(s + 1) - 1)*(3^(3*s + 4) - 1)) parbitrario, sin informacin sobre las caras: zex3.igusa_zeta() (N_Gamma - N_tau10 - N_tau11 - N_tau12 + N_tau4 + N_tau6 + N_tau7 - N_tau9 + p^(7*s + 12) - p^(7*s + 11) - p^(7*s + 9) + p^(7*s + 8) - p^(6*s + 11) + p^(6*s + 10) + p^(6*s + 8) - p^(6*s + 7) + p^(5*s + 9) - p^(5*s + 8) - p^(5*s + 7) + p^(5*s + 6) - p^(4*s + 8) + 2*p^(4*s + 7) - p^(4*s + 6) + p^(3*s + 5) - 2*p^(3*s + 4) + p^(3*s + 3) - p^(2*s + 5) + p^(2*s + 4) + p^(2*s + 3) - p^(2*s + 2) - p^s*N_Gamma + p^s*N_tau10 + p^s*N_tau11 + p^s*N_tau12 - p^s*N_tau4 - p^s*N_tau6 - p^s*N_tau7 + p^s*N_tau9 - N_Gamma*p - N_Gamma*p^(7*s + 9) + N_Gamma*p^(7*s + 8) + N_Gamma*p^(6*s + 9) - N_Gamma*p^(6*s + 8) + N_Gamma*p^(s + 1) - N_tau10*p^(7*s + 8) + N_tau10*p^(6*s + 8) - N_tau11*p^(7*s + 8) + N_tau11*p^(6*s + 8) + N_tau12*p - N_tau12*p^(s + 1) - N_tau7*p^(5*s + 6) + N_tau7*p^(4*s + 6) - N_tau7*p^(3*s + 3) + N_tau7*p^(2*s + 3) - N_tau9*p^(7*s + 8) + N_tau9*p^(6*s + 8))/((p^(s + 1) - 1)*(p^(3*s + 4) - 1)*(p^(3*s + 4) + 1)*(p - 1)*p^2)
36 4 Anexo: Ejemplos de ZetaFunctions.sage parbitrario, con numero de soluciones sobre las caras dNtau3 ={ x^2-y^2+z^3 : (p-1)*(p-3), -y^2+z^3 : (p-1)^2, \ x^2+z^3 : (p-1)^2, x^2-y^2 :2*(p-1)^2 } zex3.igusa_zeta(dict_Ntau =dNtau3) (p - 1)*(p + p^(2*s + 4) - p^(s + 1) - 1)*p^(2*s)/((p^(s + 1) - 1)*(p^(3*s + 4) - 1)) Ejemplo 4: (x−y)2+z zex4 =ZetaFunctions((x -y)^2+z) p= 7: zex4.igusa_zeta(7) The formula for Igusa Zeta function is not valid: The polynomial is degenerated at least with respect to the face tau = {dim 1, vertices = [(0, 2, 0), (2, 0, 0)], rays = []} over GF(7)! NaN parbitrario: zex4.igusa_zeta() The formula for Igusa Zeta function is not valid: The polynomial is degenerated at least with respect to the face tau = {dim 1, vertices = [(0, 2, 0), (2, 0, 0)], rays = []} over the complex numbers! NaN Ejemplo 5: x2+yz +z2 zex5 =ZetaFunctions(x^2+y*z+z^2) p= 3 mod 4, podemos dar soluciones sobre las caras: dNtau5 ={ x^2+y*z+z^2 : (p-1)^2, y*z+z^2 : (p-1)^2,\ x^2+y*z : (p-1)^2, x^2+z^2 :0} zex5.igusa_zeta(dict_Ntau =dNtau5, info =True) Gamma: total polyhedron L_gamma = -((p - 1)^2*(p^s - 1)*p/(p^(s + 1) - 1) - (p - 1)^3)/p^3 tau0: dim 0, vertices = [(0, 0, 2)], rays = [] generators of cone = [(0, 1, 0), (1, 0, 0), (1, 1, 1)], partition into simplicial cones = [[(0, 1, 0), (1, 0, 0), (1, 1, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]]
37 N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = 1/((p^(2*s + 3) - 1)*(p - 1)^2) tau1: dim 0, vertices = [(0, 1, 1)], rays = [] generators of cone = [(1, 0, 0), (1, 0, 2), (1, 1, 1)], partition into simplicial cones = [[(1, 0, 0), (1, 0, 2), (1, 1, 1)]] multiplicities = [2], integral points = [[(0, 0, 0), (1, 0, 1)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = (p^(s + 2) + 1)/((p^(2*s + 3) - 1)^2*(p - 1)) tau2: dim 0, vertices = [(2, 0, 0)], rays = [] generators of cone = [(0, 1, 0), (0, 0, 1), (1, 0, 2), (1, 1, 1)], partition into simplicial cones = [[(1, 0, 2), (0, 1, 0)], [(1, 0, 2), (0, 0, 1), (0, 1, 0)], [(1, 0, 2), (1, 1, 1), (0, 1, 0)]] multiplicities = [1, 1, 1], integral points = [[(0, 0, 0)], [(0, 0, 0)], [(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = (p^(s + 2) - 1)*(p^(s + 2) + 1)/((p^(2*s + 3) - 1)^2*(p - 1)^2) tau3: dim 1, vertices = [(0, 0, 2)], rays = [(0, 0, 1)] generators of cone = [(0, 1, 0), (1, 0, 0)], partition into simplicial cones = [[(0, 1, 0), (1, 0, 0)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = (p - 1)^(-2) tau4: dim 1, vertices = [(0, 0, 2), (0, 1, 1)], rays = [] generators of cone = [(1, 0, 0), (1, 1, 1)], partition into simplicial cones = [[(1, 0, 0), (1, 1, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = (p - 1)^2, L_tau = (p - 1)^2*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^3) , S_tau = 1/((p^(2*s + 3) - 1)*(p - 1)) tau5: dim 1, vertices = [(0, 1, 1)], rays = [(0, 1, 0)] generators of cone = [(1, 0, 0), (1, 0, 2)], partition into simplicial cones = [[(1, 0, 0), (1, 0, 2)]] multiplicities = [2], integral points = [[(0, 0, 0), (1, 0, 1)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = (p^(s + 2) + 1)/((p^(2*s + 3) - 1)*(p - 1)) tau6: dim 1, vertices = [(0, 0, 2), (2, 0, 0)], rays = [] generators of cone = [(0, 1, 0), (1, 1, 1)], partition into simplicial cones = [[(0, 1, 0), (1, 1, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = 1/((p^(2*s + 3) - 1)*(p - 1))
38 4 Anexo: Ejemplos de ZetaFunctions.sage tau7: dim 1, vertices = [(2, 0, 0)], rays = [(0, 1, 0)] generators of cone = [(0, 0, 1), (1, 0, 2)], partition into simplicial cones = [[(0, 0, 1), (1, 0, 2)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = 1/((p^(2*s + 3) - 1)*(p - 1)) tau8: dim 1, vertices = [(0, 1, 1), (2, 0, 0)], rays = [] generators of cone = [(1, 0, 2), (1, 1, 1)], partition into simplicial cones = [[(1, 0, 2), (1, 1, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = (p - 1)^2, L_tau = (p - 1)^2*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^3) , S_tau = (p^(2*s + 3) - 1)^(-2) tau9: dim 1, vertices = [(2, 0, 0)], rays = [(1, 0, 0)] generators of cone = [(0, 1, 0), (0, 0, 1)], partition into simplicial cones = [[(0, 1, 0), (0, 0, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = (p - 1)^(-2) tau10: dim 2, vertices = [(0, 0, 2), (2, 0, 0)], rays = [(0, 0, 1), (1, 0, 0)] generators of cone = [(0, 1, 0)], partition into simplicial cones = [[(0, 1, 0)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = 1/(p - 1) tau11: dim 2, vertices = [(0, 0, 2), (0, 1, 1)], rays = [(0, 0, 1), (0, 1, 0)] generators of cone = [(1, 0, 0)], partition into simplicial cones = [[(1, 0, 0)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = (p - 1)^2, L_tau = (p - 1)^2*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^3) , S_tau = 1/(p - 1) tau12: dim 2, vertices = [(2, 0, 0)], rays = [(0, 1, 0), (1, 0, 0)] generators of cone = [(0, 0, 1)], partition into simplicial cones = [[(0, 0, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = 0, L_tau = (p - 1)^3/p^3 , S_tau = 1/(p - 1) tau13: dim 2, vertices = [(0, 1, 1), (2, 0, 0)], rays = [(0, 1, 0)] generators of cone = [(1, 0, 2)], partition into simplicial cones = [[(1, 0, 2)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = (p - 1)^2, L_tau = (p - 1)^2*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^3) , S_tau = 1/(p^(2*s + 3) - 1)
39 tau14: dim 2, vertices = [(0, 0, 2), (0, 1, 1), (2, 0, 0)], rays = [] generators of cone = [(1, 1, 1)], partition into simplicial cones = [[(1, 1, 1)]] multiplicities = [1], integral points = [[(0, 0, 0)]] N_tau = (p - 1)^2, L_tau = (p - 1)^2*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^3) , S_tau = 1/(p^(2*s + 3) - 1) (p^(s + 3) - 1)*(p - 1)*p^(2*s)/((p^(s + 1) - 1)*(p^(2*s + 3) - 1)) p= 1 mod 4: dNtau5bis ={ x^2+y*z+z^2 : (p-1)*(p-3), y*z+z^2 : (p-1)^2, \ x^2+y*z : (p-1)^2, x^2+z^2 :2*(p-1)^2 } zex5.igusa_zeta(dict_Ntau =dNtau5bis) (p^(s + 3) - 1)*(p - 1)*p^(2*s)/((p^(s + 1) - 1)*(p^(2*s + 3) - 1)) Ejemplo 6: x2∗z+y2∗z+u3 S.<x,y,z,u>=QQ[] zex6 =ZetaFunctions(x^2*z+y^2*z+u^3) p= 1 mod 4 con soluciones sobre las caras: dNtau6 ={ x^2*z+y^2*z+u^3 : (p-1)^2*(p-3), x^2*z+u^3 : (p-1)^3, \ y^2*z+u^3: (p-1)^3, x^2*z+y^2*z:2*(p-1)^3} zex6.igusa_zeta(dict_Ntau =dNtau6) (p - 1)*(p^(4*s + 8) - 3*p^(3*s + 5) + 2*p^(3*s + 4) + 3*p^(2*s + 5) - 6*p^(2*s + 4) + 3*p^(2*s + 3) + 2*p^(s + 4) - 3*p^(s + 3) + 1)*p^(3*s)/((p^(s + 1) - 1)*(p^(3*s + 4) - 1)^2) Local con p= 1 mod 4 con soluciones sobre las caras: zex6.igusa_zeta(local =True, dict_Ntau =dNtau6) (p - 1)*(p^(4*s + 8) - 3*p^(3*s + 5) + 2*p^(3*s + 4) + 3*p^(2*s + 5) - 6*p^(2*s + 4) + 3*p^(2*s + 3) + 2*p^(s + 4) - 3*p^(s + 3) + 1)/((p^(s + 1) - 1)*(p^(3*s + 4) - 1)^2*p^4) Local con p= 3 mod 4 con soluciones sobre las caras: dNtau6bis ={ x^2*z+y^2*z+u^3 : (p-1)^3, x^2*z+u^3 : (p-1)^3, \ y^2*z+u^3: (p-1)^3, x^2*z+y^2*z:0} zex6.igusa_zeta(local =True, dict_Ntau =dNtau6bis, info =True)
40 4 Anexo: Ejemplos de ZetaFunctions.sage tau0: dim 0, vertices = [(0, 0, 0, 3)], rays = [] generators of cone = [(0, 1, 0, 0), (0, 0, 3, 1), (1, 0, 0, 0), (0, 0, 1, 0), (3, 3, 0, 2)], partition into simplicial cones = [[(1, 0, 0, 0), (0, 0, 3, 1), (0, 1, 0, 0)], [(0, 1, 0, 0), (1, 0, 0, 0), (0, 0, 3, 1), (0, 0, 1, 0)], [(3, 3, 0, 2), (1, 0, 0, 0), (0, 0, 3, 1), (0, 1, 0, 0)]] multiplicities = [1, 1, 6], integral points = [[(0, 0, 0, 0)], [(0, 0, 0, 0)], [(0, 0, 0, 0), (3, 3, 1, 2), (2, 2, 2, 2), (2, 2, 0, 1), (1, 1, 1, 1), (1, 1, 2, 1)]] N_tau = 0, L_tau = (p - 1)^4/p^4 , S_tau = (p^(6*s + 10) + p^(6*s + 9) - p^(6*s + 8) + 2*p^(3*s + 6) - p^(3*s + 5) - p^(3*s + 4) - 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)^3) tau1: dim 0, vertices = [(0, 2, 1, 0)], rays = [] generators of cone = [(0, 0, 0, 1), (0, 0, 3, 1), (1, 0, 0, 0), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 0, 0, 1), (0, 0, 3, 1), (1, 0, 0, 0), (3, 3, 0, 2)]] multiplicities = [9], integral points = [[(0, 0, 0, 0), (1, 1, 0, 1), (2, 2, 0, 2), (0, 0, 1, 1), (1, 1, 1, 1), (2, 2, 1, 2), (0, 0, 2, 1), (1, 1, 2, 2), (2, 2, 2, 2)]] N_tau = 0, L_tau = (p - 1)^4/p^4 , S_tau = (p^(6*s + 8) + p^(5*s + 7) + 2*p^(4*s + 6) + p^(3*s + 4) + 2*p^(2*s + 3) + p^(s + 2) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)^2) tau2: dim 0, vertices = [(2, 0, 1, 0)], rays = [] generators of cone = [(0, 1, 0, 0), (0, 0, 0, 1), (0, 0, 3, 1), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 1, 0, 0), (0, 0, 0, 1), (0, 0, 3, 1), (3, 3, 0, 2)]] multiplicities = [9], integral points = [[(0, 0, 0, 0), (1, 1, 0, 1), (2, 2, 0, 2), (0, 0, 1, 1), (1, 1, 1, 1), (2, 2, 1, 2), (0, 0, 2, 1), (1, 1, 2, 2), (2, 2, 2, 2)]] N_tau = 0, L_tau = (p - 1)^4/p^4 , S_tau = (p^(6*s + 8) + p^(5*s + 7) + 2*p^(4*s + 6) + p^(3*s + 4) + 2*p^(2*s + 3) + p^(s + 2) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)^2) tau11: dim 1, vertices = [(0, 0, 0, 3), (0, 2, 1, 0)], rays = [] generators of cone = [(0, 0, 3, 1), (1, 0, 0, 0), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 0, 3, 1), (1, 0, 0, 0), (3, 3, 0, 2)]] multiplicities = [3], integral points = [[(0, 0, 0, 0), (1, 1, 1, 1), (2, 2, 2, 2)]] N_tau = (p - 1)^3, L_tau = (p - 1)^3*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^4) , S_tau = (p^(6*s + 8) + p^(3*s + 4) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)) tau17: dim 1, vertices = [(0, 0, 0, 3), (2, 0, 1, 0)], rays = [] generators of cone = [(0, 1, 0, 0), (0, 0, 3, 1), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 1, 0, 0), (0, 0, 3, 1), (3, 3, 0, 2)]] multiplicities = [3], integral points = [[(0, 0, 0, 0), (1, 1, 1, 1), (2, 2, 2, 2)]] N_tau = (p - 1)^3, L_tau = (p - 1)^3*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) -
41 1)*p^4) , S_tau = (p^(6*s + 8) + p^(3*s + 4) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)) tau20: dim 1, vertices = [(0, 2, 1, 0), (2, 0, 1, 0)], rays = [] generators of cone = [(0, 0, 0, 1), (0, 0, 3, 1), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 0, 0, 1), (0, 0, 3, 1), (3, 3, 0, 2)]] multiplicities = [9], integral points = [[(0, 0, 0, 0), (0, 0, 1, 1), (0, 0, 2, 1), (1, 1, 0, 1), (1, 1, 1, 1), (1, 1, 2, 2), (2, 2, 0, 2), (2, 2, 1, 2), (2, 2, 2, 2)]] N_tau = 0, L_tau = (p - 1)^4/p^4 , S_tau = (p^(6*s + 8) + p^(5*s + 7) + 2*p^(4*s + 6) + p^(3*s + 4) + 2*p^(2*s + 3) + p^(s + 2) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)*(p - 1)) tau22: dim 2, vertices = [(0, 0, 0, 3), (0, 2, 1, 0), (2, 0, 1, 0)], rays = [] generators of cone = [(0, 0, 3, 1), (3, 3, 0, 2)], partition into simplicial cones = [[(0, 0, 3, 1), (3, 3, 0, 2)]] multiplicities = [3], integral points = [[(0, 0, 0, 0), (1, 1, 1, 1), (2, 2, 2, 2)]] N_tau = (p - 1)^3, L_tau = (p - 1)^3*(p^(s + 2) - 2*p^(s + 1) + 1)/((p^(s + 1) - 1)*p^4) , S_tau = (p^(6*s + 8) + p^(3*s + 4) + 1)/((p^(3*s + 4) - 1)^2*(p^(3*s + 4) + 1)) (p^(s + 2) + 1)*(p - 1)*(p^(3*s + 6) - p^(2*s + 4) - p^(2*s + 3) + p^(s + 3) + p^(s + 2) - 1)/((p^(s + 1) - 1)*(p^(3*s + 4) - 1)*(p^(3*s + 4) + 1)*p^4) Ejemplos para la Funcion Zeta Topolgica Ejemplo 10: x2+yz zex10 =ZetaFunctions(R(x^2+y*z)) zex10.give_info_newton() Newton’s polyhedron of x^2 + y*z: support points = [(2, 0, 0), (0, 1, 1)] vertices = [(0, 1, 1), (2, 0, 0)] number of proper faces = 13 Facet 1: x >= 0 Facet 2: y >= 0 Facet 3: z >= 0 Facet 4: x + 2*z - 2 >= 0 Facet 5: x + 2*y - 2 >= 0 zex10.newton_plot()
48 4 Anexo: Ejemplos de ZetaFunctions.sage vertices = [(0, 0, 0, 1, 1, 1), (0, 0, 1, 1, 1, 0), (1, 1, 0, 0, 0, 1), (1, 1, 1, 0, 0, 0)], rays = []} over the complex numbers! NaN Ejemplo 15: xy3+xy2+x2y R2.<x,y>=QQ[] zex15 =ZetaFunctions(x*y^3+x*y^2+x^2*y) (Existe un problema en Sage a la hora de representar poliedros con rayos) zex15.newton_plot() zex15.cones_plot() Local: zex15.give_expected_pole_info(local =True) The candidate poles of the (local) topological zeta function (with d = 1) of x*y^3 + x^2*y + x*y^2 in function of s are:
49 -2/3 with expected order: 1 The responsible face of maximal dimension is ‘‘tau_0‘‘ = minimal face who intersecs with the diagonal of ambient space: tau4: dim 1, vertices = [(1, 2), (2, 1)], rays = [] generators of cone = [(1, 1)], partition into simplicial cones = [[(1, 1)]] -1 with expected order: 1 The responsible face(s) of maximal dimension is/are: tau1: dim 0, vertices = [(2, 1)], rays = [] generators of cone = [(0, 1), (1, 1)], partition into simplicial cones = [[(0, 1), (1, 1)]] tau0: dim 0, vertices = [(1, 2)], rays = [] generators of cone = [(1, 0), (1, 1)], partition into simplicial cones = [[(1, 0), (1, 1)]] zex15.topological_zeta(local =True, info =True) tau0: dim 0, vertices = [(1, 2)], rays = [] generators of cone = [(1, 0), (1, 1)], partition into simplicial cones = [[(1, 0), (1, 1)]] multiplicities = [1], integral points = [[(0, 0)]] J_tau = 1/((s + 1)*(3*s + 2)) , dim_tau!*Vol(tau) = 1 tau1: dim 0, vertices = [(2, 1)], rays = [] generators of cone = [(0, 1), (1, 1)], partition into simplicial cones = [[(0, 1), (1, 1)]] multiplicities = [1], integral points = [[(0, 0)]] J_tau = 1/((s + 1)*(3*s + 2)) , dim_tau!*Vol(tau) = 1 tau4: dim 1, vertices = [(1, 2), (2, 1)], rays = [] generators of cone = [(1, 1)], partition into simplicial cones = [[(1, 1)]] multiplicities = [1], integral points = [[(0, 0)]] J_tau = 1/(3*s + 2) , dim_tau!*Vol(tau) = 1 -(s - 2)/((s + 1)*(3*s + 2)) Ejemplo 19: x1x2x2 3x4+x1x2 2x3x4+x2 1x2x3x2 4 T.<x_1,x_2,x_3,x_4>=QQ[] zex19 =ZetaFunctions(x_1*x_2*x_3^2*x_4 +x_1*x_2^2*x_3*x_4 +x_1^2*x_2*x_3*x_4^2) zex19.give_info_newton()
50 4 Anexo: Ejemplos de ZetaFunctions.sage Newton’s polyhedron of x_1^2*x_2*x_3*x_4^2 + x_1*x_2^2*x_3*x_4 + x_1*x_2*x_3^2*x_4: support points = [(2, 1, 1, 2), (1, 2, 1, 1), (1, 1, 2, 1)] vertices = [(1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 2)] number of proper faces = 33 Facet 1: x_2 - 1 >= 0 Facet 2: x_3 - 1 >= 0 Facet 3: x_1 - 1 >= 0 Facet 4: x_4 - 1 >= 0 Facet 5: x_2 + x_3 + x_4 - 4 >= 0 Facet 6: x_1 + x_2 + x_3 - 4 >= 0 zex19.give_expected_pole_info() The candidate poles of the (local) topological zeta function (with d = 1) of x_1^2*x_2*x_3*x_4^2 + x_1*x_2^2*x_3*x_4 + x_1*x_2*x_3^2*x_4 in function of s are: -3/4 with expected order: 2 The responsible face of maximal dimension is ‘‘tau_0‘‘ = minimal face who intersecs with the diagonal of ambient space: tau26: dim 2, vertices = [(1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 2)], rays = [] generators of cone = [(0, 1, 1, 1), (1, 1, 1, 0)], partition into simplicial cones = [[(0, 1, 1, 1), (1, 1, 1, 0)]] -1 with expected order: 3 The responsible face(s) of maximal dimension is/are: tau5: dim 1, vertices = [(1, 1, 2, 1)], rays = [(0, 0, 1, 0)] generators of cone = [(0, 1, 0, 0), (1, 0, 0, 0), (0, 0, 0, 1)], partition into simplicial cones = [[(0, 1, 0, 0), (1, 0, 0, 0), (0, 0, 0, 1)]] tau9: dim 1, vertices = [(1, 2, 1, 1)], rays = [(0, 1, 0, 0)] generators of cone = [(0, 0, 1, 0), (1, 0, 0, 0), (0, 0, 0, 1)], partition into simplicial cones = [[(0, 0, 1, 0), (1, 0, 0, 0), (0, 0, 0, 1)]] zex19.topological_zeta() (s^3 - 5*s^2 + 6*s + 9)/((s + 1)^3*(4*s + 3)^2) Ejemplo 21: x2 1+x3 2x3 4+x3 3x3 5 T2.<x_1,x_2,x_3,x_4,x_5>=QQ[] zex21 =ZetaFunctions(x_1^2+x_2^3*x_4^3+x_3^3*x_5^3) zex21.give_info_newton()
51 Newton’s polyhedron of x_2^3*x_4^3 + x_3^3*x_5^3 + x_1^2: support points = [(0, 3, 0, 3, 0), (0, 0, 3, 0, 3), (2, 0, 0, 0, 0)] vertices = [(0, 0, 3, 0, 3), (0, 3, 0, 3, 0), (2, 0, 0, 0, 0)] number of proper faces = 85 Facet 1: x_2 >= 0 Facet 2: x_4 >= 0 Facet 3: x_3 >= 0 Facet 4: x_5 >= 0 Facet 5: x_1 >= 0 Facet 6: 3*x_1 + 2*x_3 + 2*x_4 - 6 >= 0 Facet 7: 3*x_1 + 2*x_4 + 2*x_5 - 6 >= 0 Facet 8: 3*x_1 + 2*x_2 + 2*x_5 - 6 >= 0 Facet 9: 3*x_1 + 2*x_2 + 2*x_3 - 6 >= 0 zex21.give_expected_pole_info() The candidate poles of the (local) topological zeta function (with d = 1) of x_2^3*x_4^3 + x_3^3*x_5^3 + x_1^2 in function of s are: -7/6 with expected order: 3 The responsible face of maximal dimension is ‘‘tau_0‘‘ = minimal face who intersecs with the diagonal of ambient space: tau57: dim 2, vertices = [(0, 0, 3, 0, 3), (0, 3, 0, 3, 0), (2, 0, 0, 0, 0)], rays = [] generators of cone = [(3, 0, 2, 2, 0), (3, 0, 0, 2, 2), (3, 2, 0, 0, 2), (3, 2, 2, 0, 0)], partition into simplicial cones = [[(3, 0, 2, 2, 0), (3, 2, 0, 0, 2)], [(3, 0, 0, 2, 2), (3, 2, 0, 0, 2), (3, 0, 2, 2, 0)], [(3, 2, 0, 0, 2), (3, 2, 2, 0, 0), (3, 0, 2, 2, 0)]] -1 with expected order: 1 (If all Vol(tau) are 0, where tau runs through the selected faces that are no vertices, then the expected order of -1 is 0). zex21.topological_zeta() (108*s^3 + 456*s^2 + 647*s + 343)/((s + 1)*(6*s + 7)^3) Ejemplos para la Funcion Zeta de la Monodromia en el origen zexmon1 =ZetaFunctions(R2(y^7+x^2*y^5+x^5*y^3)) zexmon1.monodromy_zeta(char =True) The characteristic polynomial of the monodromy is (T - 1)^3*(T^6 + T^5 + T^4 + T^3 + T^2 + T + 1)*(T^18 + T^17 + T^16 + T^15 + T^14 + T^13 + T^12 + T^11 + T^10 + T^9 + T^8 + T^7 + T^6 + T^5 + T^4 + T^3 + T^2 + T + 1) 1/((t^7 - 1)*(t^19 - 1))
52 4 Anexo: Ejemplos de ZetaFunctions.sage zexmon2 =ZetaFunctions(R(x*y+z^3)) zexmon2.monodromy_zeta(char =True) The characteristic polynomial of the monodromy is T^2 + T + 1 -t^3 + 1 zexmon3 =ZetaFunctions(R((3*x+5*z)*(x+2*z)+y^3)) zexmon3.monodromy_zeta(char =True) The characteristic polynomial of the monodromy is T^2 + T + 1 -t^3 + 1 zexmon4 =ZetaFunctions(R(x*(y+x)+x^2*z+z^3)) zexmon4.monodromy_zeta(char =True) The characteristic polynomial of the monodromy is T^2 + T + 1 -t^3 + 1 zexmon4 =ZetaFunctions(R(x*y*(x+y)+z^4)) zexmon4.monodromy_zeta(char =True) The characteristic polynomial of the monodromy is (T + 1)^2*(T^2 + 1)^2*(T^2 - T + 1)*(T^4 - T^2 + 1) -(t^4 - 1)*(t^12 - 1)/(t^3 - 1)
53 5. Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage class ZetaFunctions(object): def __init__(self, poly): #Polynome self._f =poly #Newton’s polyhedron self._Gammaf =newton_polyhedron(poly) def give_info_facets(self): """ Prints a relation of facets in Newton’s polyhedron and their inequalities. """ give_all_facets_info(self._f,self._Gammaf) def give_info_newton(self, faces =False, cones =False): """ Prints information about the the Newton’s polyhedron of ‘‘f‘‘:\n - Support points of f. - Vertices of Newton’s polyhedron - Numer of proper faces - Inequations defining facets ‘‘faces = True‘‘ prints information about each face of polyhedron. ‘‘cones = True‘‘ prints information about each cone associated to faces of polyhedron.\n """ print "Newton’s polyhedron of " +str(self._f) +":" print "\t"+"support points = " +str(support_points(self._f)) print "\t"+"vertices = " +str(map(tuple,self._Gammaf.vertices())) print "\t"+"number of proper faces = " +str(len(proper_faces(self._Gammaf))) give_all_facets_info(self._f,self._Gammaf) if faces or cones: print "Information about faces:" faces_set =proper_faces(self._Gammaf) for tau in faces_set: face_info, cone_info =str(), str() i=faces_set.index(tau) if faces: face_info =face_info_output(tau) +"\n" if cones: cone_info =cone_info_output(cone_from_face(tau)) +"\n" print "tau" +str(i) +":"+face_info +cone_info def newton_plot(self): """ Plot Newton’s polyhedron (for n = 2 , 3). """ show(self._Gammaf.plot()) def cones_plot(self): """ Plot the Fan of cones associated to Newton’s polyhedron (for n = 2 , 3). (Cones can be no simplicial). """ F=fan_all_cones(self._Gammaf) show(F.plot()) def give_expected_pole_info(self,d = 1, local =False, weights =None): """ Prints information about the candidate real poles for the topological zeta function of ‘‘f‘‘: the orders and responsible faces of highest dimension. ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n
54 5 Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n """ give_expected_pole_info(self._f,d, local, weights) def igusa_zeta(self,p=None, dict_Ntau ={}, local =False, weights =None, info =False): """ The Igusa’s Zeta Function por ‘‘p‘‘ prime (given or abstract), in terms of variable ‘‘s‘‘.\n For the abstract case (‘‘p = None‘‘), you must to give a dictionary ‘‘dist_Ntau‘‘ where the polynomes ftau for the faces of the Newton Polyhedron are the keys and the abstract value N_tau (depending of var p) as associated item. If ftau for face ‘‘tauk‘‘ is not in the dictionary, program introduces a new variable ‘‘N_tauk‘‘.\n ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ return igusa_zeta(self._f, p, dict_Ntau, local, weights, info) def topological_zeta(self,d= 1, local =False, weights =None, info =False): """ The Topological Zeta Function Z_{top, f}^(d) for ‘‘d‘‘>=1, in terms of variable ‘‘s‘‘.\n ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ return topological_zeta(self._f, d, local, weights, info) def monodromy_zeta(self, weights =None, char =False, info =False): """ The Monodromy Zeta Function in the origin, in terms of variable ‘‘s‘‘.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘char = True‘‘ prints the characteriristic polynomial of the monodromy (only if ‘‘f‘‘ has an isolated singularity in the origin).\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ return monodromy_zeta(self._f, weights, char, info) ###------------------------FUNCIONES AUXILIARES------------------------### ##---NEWTON’S POLYHEDRON def support_points(f): """ Support of f: points of ZZ^n corresponding to the exponents of the monomial into ‘‘f‘‘. """ points =f.exponents() return points def newton_polyhedron(f): """ Construction of Newton’s Polyhedron Gamma(f) for the polynomial ‘‘f‘‘. """ P=Polyhedron(vertices =support_points(f), rays=VectorSpace(QQ,f.parent().ngens()).basis()) return P ##--- FACES def faces(P):
55 """ Returns a LatticePoset of the faces in the polyhedron ‘‘P‘‘ with a relation of order (content between the faces). """ P_lattice =LatticePoset(P.face_lattice()) return P_lattice def proper_faces(P): """ Returns a list with the proper faces of the polyhedron ‘‘P‘‘ sorted in increasing order dimension. """ L=faces(P).list()[1:-1] return L #-- Informations about faces def face_Vinfo(tau): """ Returns a list containing the descriptions of the face in terms of vertices and rays. """ return tau.element.ambient_Vrepresentation() def face_Hinfo(tau): """ Returns a list containing the descriptions of the face in terms of the inequalities of the facets who intersects into the face. """ return tau.element.ambient_Hrepresentation() def contains_a_ray(tau): """ Checks if the face contains some ray. """ bool =False Vrep =face_Vinfo(tau) for ein Vrep: if e.is_ray() == True: bool =True break return bool def compact_faces(P): """ Returns a list with the compact faces of the polyhedron ‘‘P‘‘ sorted in increasing order dimension. """ pfaces =proper_faces(P) return filter(lambda i: not contains_a_ray(i), pfaces) def vertices(tau): """ Returns a list with the vertices of the face. """ L=map(lambda i:i.vector(),filter(lambda j:j.is_vertex(),face_Vinfo(tau))) return L def rays(tau): """ Returns a list with the rays of the face.
56 5 Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage """ L=map(lambda i:i.vector(),filter(lambda j:j.is_ray(),face_Vinfo(tau))) return L def translate_points(points_list): """ Returns a list of points taking the first point in the original list how the origin and rewriting the other points in terms of new origin. """ origin =points_list[0] L=map(lambda v:v-origin, points_list) return L def dim_face(tau): """ Gives the dimension of the face. """ vertices_tau =vertices(tau) rays_tau =rays(tau) if len(vertices_tau) ==0and len(vertices_tau) == 0: dim_tau = -1 else: v_list =translate_points(vertices_tau) dim_tau =matrix(v_list +rays_tau).rank() return dim_tau def facets(P): """ Returns a list of facets ((n-1)-dimensional faces) of the polyhedron ‘‘P‘‘. """ dim =P.dim() L=filter(lambda i: dim_face(i) == dim-1, proper_faces(P)) return L def facet_info(f, facet): """ Returns a string with the inequation of the facet write in form a_1*x_1 + a_2*x_2 + ... + a_n*x_n + b >= 0. """ rep =face_Hinfo(facet)[0] message =str(vector(rep.A()).dot_product(vector(f.parent().gens())) +rep.b()) message =message +" >= 0" return message def give_all_facets_info(f,P): """ Prints a relation of facets in ‘‘P‘‘ and their inequalities. """ i= 1 for facet in facets(P): print "\tFacet " +str(i) +":"+facet_info(f, facet) i=i+ 1 def face_info_output(tau): """ Returns a string containing a descrition of vertices and rays in face. """ info ="dim " +str(dim_face(tau)) +", vertices = " +str(vertices(tau)) +\ ", rays = " +str(rays(tau)) return info
57 #-- Relations Polyhedron-points def point_in_face(point,tau): """ Checks if point belongs to the face. """ bool =Polyhedron(vertices =vertices(tau), rays =rays(tau)).contains(point) return bool def support_points_in_face(f, tau): """ Returns a list of support points of ‘‘f‘‘ contained in the face. """ L=filter(lambda i: point_in_face(i,tau),support_points(f)) return L ##---CONES, FANES AND SIMPLE CONES def prim(v): """ Returns the primitivitation of an integral vector. """ return v/gcd(v) def primitive_vectors(tau): """ Returns a list of primitive vectors of a face (normal vectors of the hyperplanes who defines the face, components are relatively primes). """ L=map(lambda i:prim(i.A()),face_Hinfo(tau)) return L def cone_from_face(tau): """ Construction of the dual cone of the face. In particular, for the total face it gives a cone generated by the zero vector. """ gens =primitive_vectors(tau) if len(gens) == 0: cone =Cone([vertices(tau)[0].parent()(0)]) else: cone =Cone(gens) return cone def primitive_vectors_cone(cone): """ Returns a list of primitive vectors (rays generators) of cone. """ L=map(lambda i:prim(i.sparse_vector()),cone.rays()) return L def all_cones(P): """ Returns a list with all the cones generated by the faces of ‘‘P‘‘. """ L=map(cone_from_face, faces(P)[1:]) return L def fan_all_cones(P): """ Fan of all cones of a Polyhedron.
64 5 Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage F=simplicial_partition(c) result = 1 for scone in filter(lambda i: i.dim()==dim_cone, F): mult =multiplicity(scone) den =SR(1) for ain primitive_vectors_cone(scone): den =den*(m(a,P)*s+sigma(a,weights =None)) if den.degree(s) == 1: M=factor(simplify(s*den.subs(s=1/s))) result =result*(1-t^(M.subs(s=0)/mult)) return result def face_volume(f,tau): """ Returns the value Vol(tau)*(dim tau)!, for a face tau.\n The points of the face tau are contained in RR^dim and Vol(tau) is defined as follows: Let omega[tau] be the volume form on Aff(tau) such that the parallelopiped spanned by a lattice basis of ZZ^n intersect (aff tau)_0 has volume 1. Then Vol(tau) is the volume of tau intersection the Global Newton Polyhedron with respect to omega[tau]. """ n=f.parent().ngens() dim_tau =dim_face(tau) result = 0 if dim_tau != 0: tau_in_global =Polyhedron(vertices =support_points_in_face(f,tau)) vertices_in_global =map(vector,tau_in_global.vertices()) trans_vertices =translate_points(vertices_in_global) if matrix(ZZ,trans_vertices).rank() == dim_tau: V=QQ^n basis_aff =V.submodule(trans_vertices).intersection(ZZ^n).basis() W=V.submodule_with_basis(basis_aff) coords_list =map(W.coordinate_vector, trans_vertices) p=PointConfiguration(coords_list) result =p.volume() # Returns dimtau!*n-volumen de tau else: result = 1 return result def face_divisors(d,faces_set,P): """ Returns a list of faces in ‘‘faces_set‘‘ such that d divides m(Delta_tau) = gcd{m(a)| a in Delta_tau and ZZ^n}. """ if d==1:return faces_set L_faces =list() dim_total =P.dim() for tau in faces_set: c=cone_from_face(tau) F=simplicial_partition(c) L_vectors =list() #We need to evaluate m over the basis of the cone and the integral points views above. for scone in F: L_vectors =L_vectors +integral_vectors(scone) +primitive_vectors_cone(scone) l=gcd(map(lambda i: m(i,P), L_vectors)) if d.divides(l): L_faces.append(tau) return L_faces def is_global_degenerated(f, p =None, method =’default’): """ Checks if own polynome ‘‘f‘‘ over F_p with respect all the faces of the Global Newton’s
65 Polyhedron. If p = None, checks degeneration over CC and (equivalent to be degenerated over F_p with p>>0). For finite fields (‘‘p‘‘ is a given prime): - ‘‘method = ’default’‘‘ check the condition using evaluation over the (F_p^x)^n in the system of equations - ‘‘method = ’ideals’‘‘ check the condition using ideals over the finite field. """ Q=f.newton_polytope() #Global Newton Polyhedron of f bool =False for tau in faces(Q)[1:]: f_tau =ftau(f,tau) if is_degenerated(f_tau, p, method) == True: bool =True print "The formula for Topological Zeta function is not valid:" if type(p) != Integer: print "The polynomial is degenerated at least with respect "\ "to the face tau = {" +face_info_output(tau) +\ "} over the complex numbers!" else:print "The polynomial is degenerated at least with respect to the face tau "\ "= {" +face_info_output(tau) +"} over GF(" +str(p) +")!" break return bool #-- Topological Zeta Function of f, Z_{top, f}^(d) for d>=1 and Monodromy Zeta: def topological_zeta(f, d = 1, local =False, weights =None, info =False): """ The Topological Zeta Function Z_{top, f}^(d) for ‘‘d‘‘>=1, in terms of variable ‘‘s‘‘.\n ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ s=var(’s’) P=newton_polyhedron(f) result =NaN if is_global_degenerated(f) == False: result = 0 if local == True: faces_set =compact_faces(P) else: faces_set =proper_faces(P) if d== 1: total_face =faces(P)[-1] dim_gamma =dim_face(total_face) vol_gamma =face_volume(f,total_face) result =(s/(s+1))*((-1)^dim_gamma)*vol_gamma if info == True:print "Gamma: total polyhedron\n"+"J_gamma = 1 , "\ "dim_Gamma!*Vol(Gamma) = " +str(vol_gamma) +"\n\n" faces_set =face_divisors(d,faces_set,P) for tau in faces_set: [J_tau, cone_info] =Jtau(tau,P,weights,s) dim_tau =dim_face(tau) vol_tau =face_volume(f,tau) if info == True: i=proper_faces(P).index(tau) print "tau" +str(i) +":"+face_info_output(tau) +"\n"+cone_info +"\n"+\ "J_tau = " +str(J_tau) +" , dim_tau!*Vol(tau) = " +str(vol_tau) +"\n\n" if d== 1: if dim_tau == 0: term =J_tau else: term =(s/(s+1))*((-1)^dim_tau)*vol_tau*J_tau
66 5 Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage else: term =((-1)^dim_tau)*vol_tau*J_tau result =simplify(expand(result +term)) if result != 0: result =factor(result) return result def monodromy_zeta(f, weights =None, char =False, info =False): """ The Monodromy Zeta Function in the origin, in terms of variable ‘‘s‘‘.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n ‘‘char = True‘‘ prints the characteriristic polynomial of the monodromy (only if ‘‘f‘‘ has an isolated singularity in the origin).\n ‘‘info = True‘‘ gives information of face tau, cone of tau (all), L_tau, S_tau in the process. """ n=f.parent().ngens() t=var(’t’) P=newton_polyhedron(f) result = 1 i= 0 for tau in compact_faces(P): zeta_tau =Mtau(tau,P,t) dim_tau =dim_face(tau) vol_tau =face_volume(f,tau) if info == True: print "tau" +str(i) +":"+str(face_Vinfo(tau)) +"\n"+"M_tau = " +\ str(zeta_tau) +" , dim_tau!*Vol(tau) = " +str(vol_tau) +"\n\n" i=i+ 1 result =result*zeta_tau^((-1)^(dim_tau)*vol_tau) if char == True: result_aux =copy(result) T=var(’T’) mu =(-1)^(n - 1)*(result_aux.numerator().degree(t) -\ result_aux.denominator().degree(t) - 1) factor(result_aux) aux =result_aux.subs(t = 1/T) char =factor(simplify(expand(T^mu*(T/(T - 1)*aux)^((-1)^(n - 1))))) print "The characteristic polynomial of the monodromy is " +str(char) +\ "\n" return result # -- INFORMATION ABOUT POLES IN TOPOLOGICAL ZETA def dict_info_poles(f,d = 1, weights =None, local =False): """ Returns a dictionary where the keys are the candidate real poles of the chosen zeta function. Items are lists containing, by order:\n 1.- The list of perpendicular vectors to the facets that are responsible for the candidate real pole.\n 2.- A list of the faces of maximal dimension that are responsible for the expected order.\n 3.- The expected order.\n 4.- Boolean: for the candidate pole -1 the factor L_tau or s/(s+1) can contribute to the order. If this is is the case, we increase the expected order due to the S_Delta_tau by 1 and this record gets the value ‘‘True‘‘. In all other cases we don’t increase this expected order and this record gets the value ‘‘False‘‘. """ P=newton_polyhedron(f) if local == True: faces_set =compact_faces(P)
67 else: faces_set =proper_faces(P) faces_set =face_divisors(d,faces_set,P) dict_poles ={} all_prim_vect =set([]) for tau in faces_set: all_prim_vect =all_prim_vect.union(set(map(tuple, \ primitive_vectors(tau)))) valid_prim_vect =filter(lambda v: m(v,P)!=0, all_prim_vect) for vin valid_prim_vect: realpole = -sigma(v,weights)/m(v,P) #We initialize a list of attributes if the pole is not detected yet if dict_poles.get(realpole) == None: dict_poles[realpole] =[set([v]), [], 0,False] else: dict_poles[realpole][0].add(v) #We calculate the maximal expected of each pole and the faces of higher dimension #responsibles of this order poles_set =dict_poles.keys() #If d=1, we have the face tau_0 #(tau_0 is the smallest face who contains the intersecion between diagonal and polyhedron) if d== 1: max_pole =max(poles_set) for tau in faces_set: gens_cone =map(tuple,primitive_vectors(tau)) if set(gens_cone) == dict_poles[max_pole][0]: dict_poles[max_pole][1]=[tau] dict_poles[max_pole][2]=rank(matrix(gens_cone)) dict_poles[max_pole][3]=False break poles_set.remove(max_pole) for pole in poles_set: maxorder = 0 responsible_faces =set([]) for tau in faces_set: prim_vect =primitive_vectors(tau) interscone =set(map(tuple, prim_vect)).intersection(dict_poles[pole][0]) if len(interscone) != 0: diminters =matrix(QQ, list(interscone)).rank() if diminters >maxorder: maxorder =diminters responsible_faces.add(tau) elif diminters == maxorder: responsible_faces.add(tau) #We find the maximal elements in set of responsible faces max_faces =set(responsible_faces) for face in responsible_faces: if face in max_faces: if len(filter(lambda i: face<i, max_faces)): max_faces.remove(face) dict_poles[pole][1]=list(max_faces) #Max order of pole is max dim of the asociated cones dict_poles[pole][2]=maxorder #We convert the set of vectors into a list dict_poles[pole][0]=map(vector, dict_poles[pole][0]) #Special pole -1 has sometimes a larger order if -1 in dict_poles.keys(): faces_minus_one =dict_poles[-1][1] if max(map(lambda tau: len(support_points_in_face(f,tau)), faces_minus_one)) > 1: dict_poles[-1][2]=dict_poles[-1][2]+ 1 dict_poles[-1][3]=True return dict_poles
68 5 Ap´endice: C´odigo completo de ZetaFunctions.sage para Sage def give_expected_pole_info(f,d = 1, local =False, weights =None): """ Prints information about the candidate real poles for the topological zeta function of ‘‘f‘‘: the orders and responsible faces of highest dimension. ‘‘local = True‘‘ calcules the local (in the origin) Topological Zeta Function.\n ‘‘weights‘‘ is a list of weights if you want to considerate some ponderation.\n """ dict_poles =dict_info_poles(f,d, weights, local) P=newton_polyhedron(f) if local == True: faces_set =compact_faces(P) else: faces_set =proper_faces(P) faces_set =face_divisors(d,faces_set,P) n_supp_by_face =map(lambda tau: len(support_points_in_face(f,tau)), faces_set) if dict_poles == {}: if (d==1and max(n_supp_by_face) ==1)or d!=1: print "There will be no poles for the (local) topological zeta function " +\ "(with d = " +str(d) +")of"+str(f) +".\n" else: print "The candidate poles of the (local) topological zeta function (with d = " +\ str(d) +")of"+str(f) +" in function of s are:\n" print "-1 with expected order: 1" print "(If all Vol(tau) are 0, where tau runs through the selected faces " +\ "that are no vertices, then the expected order of -1 is 0)\n" else: poles_set =dict_poles.keys() #We reconstruct the list of all faces accessing to element some_face =dict_poles[poles_set[0]][1][0] list_all_faces =some_face.parent().list()[1:-1] if d== 1: print "The candidate poles of the (local) topological zeta function (with d = " +\ str(d) +")of"+str(f) +" in function of s are:\n" max_pole =max(poles_set) print str(max_pole) +" with expected order: " +str(dict_poles[max_pole][2]) if max_pole == -1: if dict_poles[-1][3]== True: print "(If all the Vol(tau) of the faces tau that are no vertices and " +\ "contained in Gamma are 0, then the expected order of -1 is " +\ str(dict_poles[-1][3]-1)+")." tau_0 =dict_poles[max_pole][1][0] print "The responsible face of maximal dimension is ‘‘tau_0‘‘ = minimal face " +\ "who intersecs with the diagonal of ambient space:" i=list_all_faces.index(tau_0) print "\t tau" +str(i) +":"+face_info_output(tau_0) +"\n\t"+\ cone_info_output(cone_from_face(tau_0)) +"\n" poles_set.remove(max_pole) if -1 not in poles_set: print "-1 with expected order: 1" print "(If all Vol(tau) are 0, where tau runs through the selected faces that " +\ "are no vertices, then the expected order of -1 is 0).\n" elif local == True: print "The candidate poles of the local topological zeta function (with d = " +\ str(d) +")of"+str(f) +" in function of s are:\n" if max(n_supp_by_face) >1and -1 not in poles_set: print "-1 with expected order: 1" print "(If all Vol(tau) are 0, where tau runs through the selected faces that " +\ "are no vertices, then the expected order of -1 is 0).\n" for pole in poles_set: print str(pole) +" with expected order: " +str(dict_poles[pole][2]) if dict_poles[pole][3]== True:
69 print "(If all the Vol(tau) of the faces that are no vertices and contained" print "one or more of the faces below are 0, then the expected order of -1 is " +\ str(dict_poles[pole][3]-1)+")." print "The responsible face(s) of maximal dimension is/are:" for tau in dict_poles[pole][1]: i=list_all_faces.index(tau) print "\t tau" +str(i) +":"+face_info_output(tau) +"\n\t"+\ cone_info_output(cone_from_face(tau)) +"\n"
70 Referencias Referencias [ArCaLuMe01] E. Artal Bartolo, P. Cassou-Nogu`es, I. Luengo, A. Melle Hern´andez: Denef–Loeser zeta function is not a topological invariant, J. London Math. Soc. (2001) [ArCaLuMe02] E. Artal Bartolo, P. Cassou-Nogu`es, I. Luengo, A. Melle Hern´andez: Monodromy conjecture for some surface singularities, Ann. Scient. Ec. Norm. Sup. 35 (2002), 605–640. [ArCaLuMe05] E. Artal Bartolo, P. Cassou-Nogu`es, I. Luengo, A. Melle Hern´andez: Quasiordinary power series and their zeta functions, Mem. Amer. Math. Soc. 178 no 841, 2005. [BriKno] E. Brieskorn, H. Knorrer: Plane Algebraic Curves, Birkhauser,(1986). [Den] J. Denef: Report on Igusa’s zeta function, Asterisque 201-203 (1991), 359 386. [DenHoo] J. Denef and K. Hoornaert: Newton polyhedra and Igusa’s local zeta function, J. Number Theory 89 (2001), no. 1, 31–64. [DenLoe92] J. Denef and F. Loeser: Caract´eristiques d’Euler-Poincar´e, Fonctions Zˆeta Locales et Modifications Analytiques, J. Amer. Math. Soc. 5(4), pp. 705-720, 1992. [DenLoe98] J. Denef and F. Loeser: Motivic Igusa zeta functions, J. Alg. Geom. 7, 1998, 505–537. [Hiro] H. Hironaka , Resolution of singularities of an algebraic variety over a field of characteristic zero. I, Ann. Of Math. (2) 79 (1): 109–203, and part II, pp. 205–326 (1964). [HooLoo] K. Hoornaert and D. Loots: Computer program written in Maple for the calculation of Igusa’s local zeta function.http://www.wis.kuleuven.ac.be/algebra/kathleen.htm, 2000. [Igu74] J. I. Igusa: Complex powers and asymptotic expansions, I, J. Reine Angew. Math. 268/269 (1974), 110-130; II, 278/279 (1975), 307-321. [Igu78] J. I. Igusa: Lectures on Forms of Higher Degree, Tata Inst. Fund. Research,Springer- Verlag, Heidelberg/New York/Berlin, 1978. [Loe] F. Loeser: Fonctions d’Igusa p-adiques et polynˆomes de Bernstein, Amer. J. Math. 110 (1) (1988) 1–21. [Mil] J. Milnor: Singular Points of Complex Hypersurfaces. Ann. of Math. Study 61, Princeton University Press (1968). [NemVe] A. N´emethi, W. Veys: Generalized monodromy conjecture in dimension two. Geom. Topol. 16 (2012), no. 1, 155–217. [Rock] R. Tyrrell Rockafellar: Convex Analysis, Princeton Univ. Press, Princeton, NJ, 1970. [Var] A. N. Varchenko: Zeta-function monodromy Newton’s of and diagram, Invent. Math.37 (1976), 253-262. [Veys] W. Veys: Determination of the poles of the topological zeta function for curves, Manuscripta Math. 87 (1995), 435–448.