passagemath-singular 10.6.31rc3__cp314-cp314-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-singular might be problematic. Click here for more details.
- PySingular.cpython-314-darwin.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +490 -0
- passagemath_singular-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
- passagemath_singular.dylibs/libSingular-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libcddgmp.0.dylib +0 -0
- passagemath_singular.dylibs/libfactory-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libflint.21.0.dylib +0 -0
- passagemath_singular.dylibs/libgf2x.3.dylib +0 -0
- passagemath_singular.dylibs/libgfortran.5.dylib +0 -0
- passagemath_singular.dylibs/libgmp.10.dylib +0 -0
- passagemath_singular.dylibs/libgsl.28.dylib +0 -0
- passagemath_singular.dylibs/libmpfr.6.dylib +0 -0
- passagemath_singular.dylibs/libntl.44.dylib +0 -0
- passagemath_singular.dylibs/libomalloc-0.9.6.dylib +0 -0
- passagemath_singular.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- passagemath_singular.dylibs/libpolys-4.4.1.dylib +0 -0
- passagemath_singular.dylibs/libquadmath.0.dylib +0 -0
- passagemath_singular.dylibs/libreadline.8.2.dylib +0 -0
- passagemath_singular.dylibs/libsingular_resources-4.4.1.dylib +0 -0
- sage/algebras/all__sagemath_singular.py +3 -0
- sage/algebras/fusion_rings/all.py +19 -0
- sage/algebras/fusion_rings/f_matrix.py +2448 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.cpython-314-darwin.so +0 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.pxd +5 -0
- sage/algebras/fusion_rings/fast_parallel_fmats_methods.pyx +538 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.cpython-314-darwin.so +0 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pxd +3 -0
- sage/algebras/fusion_rings/fast_parallel_fusion_ring_braid_repn.pyx +331 -0
- sage/algebras/fusion_rings/fusion_double.py +899 -0
- sage/algebras/fusion_rings/fusion_ring.py +1580 -0
- sage/algebras/fusion_rings/poly_tup_engine.cpython-314-darwin.so +0 -0
- sage/algebras/fusion_rings/poly_tup_engine.pxd +24 -0
- sage/algebras/fusion_rings/poly_tup_engine.pyx +579 -0
- sage/algebras/fusion_rings/shm_managers.cpython-314-darwin.so +0 -0
- sage/algebras/fusion_rings/shm_managers.pxd +24 -0
- sage/algebras/fusion_rings/shm_managers.pyx +780 -0
- sage/algebras/letterplace/all.py +1 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.cpython-314-darwin.so +0 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.pxd +18 -0
- sage/algebras/letterplace/free_algebra_element_letterplace.pyx +755 -0
- sage/algebras/letterplace/free_algebra_letterplace.cpython-314-darwin.so +0 -0
- sage/algebras/letterplace/free_algebra_letterplace.pxd +35 -0
- sage/algebras/letterplace/free_algebra_letterplace.pyx +914 -0
- sage/algebras/letterplace/letterplace_ideal.cpython-314-darwin.so +0 -0
- sage/algebras/letterplace/letterplace_ideal.pyx +408 -0
- sage/algebras/quatalg/all.py +2 -0
- sage/algebras/quatalg/quaternion_algebra.py +4778 -0
- sage/algebras/quatalg/quaternion_algebra_cython.cpython-314-darwin.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-darwin.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_element.pxd +29 -0
- sage/algebras/quatalg/quaternion_algebra_element.pyx +2176 -0
- sage/all__sagemath_singular.py +11 -0
- sage/ext_data/all__sagemath_singular.py +1 -0
- sage/ext_data/singular/function_field/core.lib +98 -0
- sage/interfaces/all__sagemath_singular.py +1 -0
- sage/interfaces/singular.py +2835 -0
- sage/libs/all__sagemath_singular.py +1 -0
- sage/libs/singular/__init__.py +1 -0
- sage/libs/singular/decl.pxd +1168 -0
- sage/libs/singular/function.cpython-314-darwin.so +0 -0
- sage/libs/singular/function.pxd +87 -0
- sage/libs/singular/function.pyx +1901 -0
- sage/libs/singular/function_factory.py +61 -0
- sage/libs/singular/groebner_strategy.cpython-314-darwin.so +0 -0
- sage/libs/singular/groebner_strategy.pxd +22 -0
- sage/libs/singular/groebner_strategy.pyx +582 -0
- sage/libs/singular/option.cpython-314-darwin.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-darwin.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-314-darwin.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-314-darwin.so +0 -0
- sage/libs/singular/singular.pxd +72 -0
- sage/libs/singular/singular.pyx +1944 -0
- sage/libs/singular/standard_options.py +145 -0
- sage/matrix/all__sagemath_singular.py +1 -0
- sage/matrix/matrix_mpolynomial_dense.cpython-314-darwin.so +0 -0
- sage/matrix/matrix_mpolynomial_dense.pxd +7 -0
- sage/matrix/matrix_mpolynomial_dense.pyx +615 -0
- sage/rings/all__sagemath_singular.py +1 -0
- sage/rings/function_field/all__sagemath_singular.py +1 -0
- sage/rings/function_field/derivations_polymod.py +911 -0
- sage/rings/function_field/element_polymod.cpython-314-darwin.so +0 -0
- sage/rings/function_field/element_polymod.pyx +406 -0
- sage/rings/function_field/function_field_polymod.py +2611 -0
- sage/rings/function_field/ideal_polymod.py +1775 -0
- sage/rings/function_field/order_polymod.py +1475 -0
- sage/rings/function_field/place_polymod.py +681 -0
- sage/rings/polynomial/all__sagemath_singular.py +1 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.cpython-314-darwin.so +0 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.pxd +5 -0
- sage/rings/polynomial/multi_polynomial_ideal_libsingular.pyx +339 -0
- sage/rings/polynomial/multi_polynomial_libsingular.cpython-314-darwin.so +0 -0
- sage/rings/polynomial/multi_polynomial_libsingular.pxd +30 -0
- sage/rings/polynomial/multi_polynomial_libsingular.pyx +6277 -0
- sage/rings/polynomial/plural.cpython-314-darwin.so +0 -0
- sage/rings/polynomial/plural.pxd +48 -0
- sage/rings/polynomial/plural.pyx +3171 -0
- sage/symbolic/all__sagemath_singular.py +1 -0
- sage/symbolic/comparison_impl.pxi +428 -0
- sage/symbolic/constants_c_impl.pxi +178 -0
- sage/symbolic/expression.cpython-314-darwin.so +0 -0
- sage/symbolic/expression.pxd +7 -0
- sage/symbolic/expression.pyx +14200 -0
- sage/symbolic/getitem_impl.pxi +202 -0
- sage/symbolic/pynac.pxi +572 -0
- sage/symbolic/pynac_constant_impl.pxi +133 -0
- sage/symbolic/pynac_function_impl.pxi +206 -0
- sage/symbolic/pynac_impl.pxi +2576 -0
- sage/symbolic/pynac_wrap.h +124 -0
- sage/symbolic/series_impl.pxi +272 -0
- sage/symbolic/substitution_map_impl.pxi +94 -0
- sage_wheels/bin/ESingular +0 -0
- sage_wheels/bin/Singular +0 -0
- sage_wheels/bin/TSingular +0 -0
- sage_wheels/lib/singular/MOD/cohomo.la +41 -0
- sage_wheels/lib/singular/MOD/cohomo.so +0 -0
- sage_wheels/lib/singular/MOD/customstd.la +41 -0
- sage_wheels/lib/singular/MOD/customstd.so +0 -0
- sage_wheels/lib/singular/MOD/freealgebra.la +41 -0
- sage_wheels/lib/singular/MOD/freealgebra.so +0 -0
- sage_wheels/lib/singular/MOD/gfanlib.la +41 -0
- sage_wheels/lib/singular/MOD/gfanlib.so +0 -0
- sage_wheels/lib/singular/MOD/gitfan.la +41 -0
- sage_wheels/lib/singular/MOD/gitfan.so +0 -0
- sage_wheels/lib/singular/MOD/interval.la +41 -0
- sage_wheels/lib/singular/MOD/interval.so +0 -0
- sage_wheels/lib/singular/MOD/loctriv.la +41 -0
- sage_wheels/lib/singular/MOD/loctriv.so +0 -0
- sage_wheels/lib/singular/MOD/machinelearning.la +41 -0
- sage_wheels/lib/singular/MOD/machinelearning.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldGeneral.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldIndep.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldQ.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldQ.so +0 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldZp.la +41 -0
- sage_wheels/lib/singular/MOD/p_Procs_FieldZp.so +0 -0
- sage_wheels/lib/singular/MOD/partialgb.la +41 -0
- sage_wheels/lib/singular/MOD/partialgb.so +0 -0
- sage_wheels/lib/singular/MOD/pyobject.la +41 -0
- sage_wheels/lib/singular/MOD/pyobject.so +0 -0
- sage_wheels/lib/singular/MOD/singmathic.la +41 -0
- sage_wheels/lib/singular/MOD/singmathic.so +0 -0
- sage_wheels/lib/singular/MOD/sispasm.la +41 -0
- sage_wheels/lib/singular/MOD/sispasm.so +0 -0
- sage_wheels/lib/singular/MOD/subsets.la +41 -0
- sage_wheels/lib/singular/MOD/subsets.so +0 -0
- sage_wheels/lib/singular/MOD/systhreads.la +41 -0
- sage_wheels/lib/singular/MOD/systhreads.so +0 -0
- sage_wheels/lib/singular/MOD/syzextra.la +41 -0
- sage_wheels/lib/singular/MOD/syzextra.so +0 -0
- sage_wheels/libexec/singular/MOD/change_cost +0 -0
- sage_wheels/libexec/singular/MOD/singularsurf +11 -0
- sage_wheels/libexec/singular/MOD/singularsurf_jupyter +9 -0
- sage_wheels/libexec/singular/MOD/singularsurf_win +10 -0
- sage_wheels/libexec/singular/MOD/solve_IP +0 -0
- sage_wheels/libexec/singular/MOD/surfex +16 -0
- sage_wheels/libexec/singular/MOD/toric_ideal +0 -0
- sage_wheels/share/factory/gftables/10201 +342 -0
- sage_wheels/share/factory/gftables/1024 +37 -0
- sage_wheels/share/factory/gftables/10609 +356 -0
- sage_wheels/share/factory/gftables/11449 +384 -0
- sage_wheels/share/factory/gftables/11881 +398 -0
- sage_wheels/share/factory/gftables/121 +6 -0
- sage_wheels/share/factory/gftables/12167 +408 -0
- sage_wheels/share/factory/gftables/125 +7 -0
- sage_wheels/share/factory/gftables/12769 +428 -0
- sage_wheels/share/factory/gftables/128 +7 -0
- sage_wheels/share/factory/gftables/1331 +47 -0
- sage_wheels/share/factory/gftables/1369 +48 -0
- sage_wheels/share/factory/gftables/14641 +490 -0
- sage_wheels/share/factory/gftables/15625 +523 -0
- sage_wheels/share/factory/gftables/16 +3 -0
- sage_wheels/share/factory/gftables/16129 +540 -0
- sage_wheels/share/factory/gftables/16384 +549 -0
- sage_wheels/share/factory/gftables/16807 +563 -0
- sage_wheels/share/factory/gftables/1681 +58 -0
- sage_wheels/share/factory/gftables/169 +8 -0
- sage_wheels/share/factory/gftables/17161 +574 -0
- sage_wheels/share/factory/gftables/1849 +64 -0
- sage_wheels/share/factory/gftables/18769 +628 -0
- sage_wheels/share/factory/gftables/19321 +646 -0
- sage_wheels/share/factory/gftables/19683 +659 -0
- sage_wheels/share/factory/gftables/2048 +71 -0
- sage_wheels/share/factory/gftables/2187 +75 -0
- sage_wheels/share/factory/gftables/2197 +76 -0
- sage_wheels/share/factory/gftables/2209 +76 -0
- sage_wheels/share/factory/gftables/22201 +742 -0
- sage_wheels/share/factory/gftables/22801 +762 -0
- sage_wheels/share/factory/gftables/2401 +82 -0
- sage_wheels/share/factory/gftables/243 +11 -0
- sage_wheels/share/factory/gftables/24389 +815 -0
- sage_wheels/share/factory/gftables/24649 +824 -0
- sage_wheels/share/factory/gftables/25 +3 -0
- sage_wheels/share/factory/gftables/256 +11 -0
- sage_wheels/share/factory/gftables/26569 +888 -0
- sage_wheels/share/factory/gftables/27 +3 -0
- sage_wheels/share/factory/gftables/27889 +932 -0
- sage_wheels/share/factory/gftables/2809 +96 -0
- sage_wheels/share/factory/gftables/28561 +954 -0
- sage_wheels/share/factory/gftables/289 +12 -0
- sage_wheels/share/factory/gftables/29791 +995 -0
- sage_wheels/share/factory/gftables/29929 +1000 -0
- sage_wheels/share/factory/gftables/3125 +107 -0
- sage_wheels/share/factory/gftables/32 +4 -0
- sage_wheels/share/factory/gftables/32041 +1070 -0
- sage_wheels/share/factory/gftables/32761 +1094 -0
- sage_wheels/share/factory/gftables/32768 +1095 -0
- sage_wheels/share/factory/gftables/343 +14 -0
- sage_wheels/share/factory/gftables/3481 +118 -0
- sage_wheels/share/factory/gftables/361 +14 -0
- sage_wheels/share/factory/gftables/36481 +1218 -0
- sage_wheels/share/factory/gftables/3721 +126 -0
- sage_wheels/share/factory/gftables/37249 +1244 -0
- sage_wheels/share/factory/gftables/38809 +1296 -0
- sage_wheels/share/factory/gftables/39601 +1322 -0
- sage_wheels/share/factory/gftables/4 +3 -0
- sage_wheels/share/factory/gftables/4096 +139 -0
- sage_wheels/share/factory/gftables/44521 +1486 -0
- sage_wheels/share/factory/gftables/4489 +152 -0
- sage_wheels/share/factory/gftables/49 +4 -0
- sage_wheels/share/factory/gftables/4913 +166 -0
- sage_wheels/share/factory/gftables/49729 +1660 -0
- sage_wheels/share/factory/gftables/5041 +170 -0
- sage_wheels/share/factory/gftables/50653 +1691 -0
- sage_wheels/share/factory/gftables/512 +20 -0
- sage_wheels/share/factory/gftables/51529 +1720 -0
- sage_wheels/share/factory/gftables/52441 +1750 -0
- sage_wheels/share/factory/gftables/529 +20 -0
- sage_wheels/share/factory/gftables/5329 +180 -0
- sage_wheels/share/factory/gftables/54289 +1812 -0
- sage_wheels/share/factory/gftables/57121 +1906 -0
- sage_wheels/share/factory/gftables/58081 +1938 -0
- sage_wheels/share/factory/gftables/59049 +1971 -0
- sage_wheels/share/factory/gftables/6241 +210 -0
- sage_wheels/share/factory/gftables/625 +23 -0
- sage_wheels/share/factory/gftables/63001 +2102 -0
- sage_wheels/share/factory/gftables/64 +5 -0
- sage_wheels/share/factory/gftables/6561 +221 -0
- sage_wheels/share/factory/gftables/6859 +231 -0
- sage_wheels/share/factory/gftables/6889 +232 -0
- sage_wheels/share/factory/gftables/729 +27 -0
- sage_wheels/share/factory/gftables/7921 +266 -0
- sage_wheels/share/factory/gftables/8 +3 -0
- sage_wheels/share/factory/gftables/81 +5 -0
- sage_wheels/share/factory/gftables/8192 +276 -0
- sage_wheels/share/factory/gftables/841 +30 -0
- sage_wheels/share/factory/gftables/9 +3 -0
- sage_wheels/share/factory/gftables/9409 +316 -0
- sage_wheels/share/factory/gftables/961 +34 -0
- sage_wheels/share/info/singular.info +191898 -0
- sage_wheels/share/singular/LIB/GND.lib +1359 -0
- sage_wheels/share/singular/LIB/JMBTest.lib +976 -0
- sage_wheels/share/singular/LIB/JMSConst.lib +1363 -0
- sage_wheels/share/singular/LIB/KVequiv.lib +699 -0
- sage_wheels/share/singular/LIB/SingularityDBM.lib +491 -0
- sage_wheels/share/singular/LIB/VecField.lib +1542 -0
- sage_wheels/share/singular/LIB/absfact.lib +959 -0
- sage_wheels/share/singular/LIB/ainvar.lib +730 -0
- sage_wheels/share/singular/LIB/aksaka.lib +419 -0
- sage_wheels/share/singular/LIB/alexpoly.lib +2542 -0
- sage_wheels/share/singular/LIB/algebra.lib +1193 -0
- sage_wheels/share/singular/LIB/all.lib +136 -0
- sage_wheels/share/singular/LIB/arcpoint.lib +514 -0
- sage_wheels/share/singular/LIB/arnold.lib +4553 -0
- sage_wheels/share/singular/LIB/arnoldclassify.lib +2058 -0
- sage_wheels/share/singular/LIB/arr.lib +3486 -0
- sage_wheels/share/singular/LIB/assprimeszerodim.lib +755 -0
- sage_wheels/share/singular/LIB/autgradalg.lib +3361 -0
- sage_wheels/share/singular/LIB/bfun.lib +1964 -0
- sage_wheels/share/singular/LIB/bimodules.lib +774 -0
- sage_wheels/share/singular/LIB/brillnoether.lib +226 -0
- sage_wheels/share/singular/LIB/brnoeth.lib +5017 -0
- sage_wheels/share/singular/LIB/central.lib +2169 -0
- sage_wheels/share/singular/LIB/chern.lib +4162 -0
- sage_wheels/share/singular/LIB/cimonom.lib +571 -0
- sage_wheels/share/singular/LIB/cisimplicial.lib +1835 -0
- sage_wheels/share/singular/LIB/classify.lib +3239 -0
- sage_wheels/share/singular/LIB/classify2.lib +1462 -0
- sage_wheels/share/singular/LIB/classifyMapGerms.lib +1515 -0
- sage_wheels/share/singular/LIB/classify_aeq.lib +3253 -0
- sage_wheels/share/singular/LIB/classifyceq.lib +2092 -0
- sage_wheels/share/singular/LIB/classifyci.lib +1133 -0
- sage_wheels/share/singular/LIB/combinat.lib +91 -0
- sage_wheels/share/singular/LIB/compregb.lib +276 -0
- sage_wheels/share/singular/LIB/control.lib +1636 -0
- sage_wheels/share/singular/LIB/crypto.lib +3795 -0
- sage_wheels/share/singular/LIB/curveInv.lib +667 -0
- sage_wheels/share/singular/LIB/curvepar.lib +1817 -0
- sage_wheels/share/singular/LIB/customstd.lib +100 -0
- sage_wheels/share/singular/LIB/deRham.lib +5979 -0
- sage_wheels/share/singular/LIB/decodegb.lib +2134 -0
- sage_wheels/share/singular/LIB/decomp.lib +1655 -0
- sage_wheels/share/singular/LIB/deflation.lib +872 -0
- sage_wheels/share/singular/LIB/deform.lib +925 -0
- sage_wheels/share/singular/LIB/difform.lib +3055 -0
- sage_wheels/share/singular/LIB/divisors.lib +750 -0
- sage_wheels/share/singular/LIB/dmod.lib +5817 -0
- sage_wheels/share/singular/LIB/dmodapp.lib +3269 -0
- sage_wheels/share/singular/LIB/dmodideal.lib +1211 -0
- sage_wheels/share/singular/LIB/dmodloc.lib +2645 -0
- sage_wheels/share/singular/LIB/dmodvar.lib +818 -0
- sage_wheels/share/singular/LIB/dummy.lib +17 -0
- sage_wheels/share/singular/LIB/elim.lib +1009 -0
- sage_wheels/share/singular/LIB/ellipticcovers.lib +548 -0
- sage_wheels/share/singular/LIB/enumpoints.lib +146 -0
- sage_wheels/share/singular/LIB/equising.lib +2127 -0
- sage_wheels/share/singular/LIB/ffmodstd.lib +2384 -0
- sage_wheels/share/singular/LIB/ffsolve.lib +1289 -0
- sage_wheels/share/singular/LIB/findifs.lib +778 -0
- sage_wheels/share/singular/LIB/finitediff.lib +1768 -0
- sage_wheels/share/singular/LIB/finvar.lib +7989 -0
- sage_wheels/share/singular/LIB/fpadim.lib +2429 -0
- sage_wheels/share/singular/LIB/fpalgebras.lib +1666 -0
- sage_wheels/share/singular/LIB/fpaprops.lib +1462 -0
- sage_wheels/share/singular/LIB/freegb.lib +3853 -0
- sage_wheels/share/singular/LIB/general.lib +1350 -0
- sage_wheels/share/singular/LIB/gfan.lib +1768 -0
- sage_wheels/share/singular/LIB/gitfan.lib +3130 -0
- sage_wheels/share/singular/LIB/gkdim.lib +99 -0
- sage_wheels/share/singular/LIB/gmspoly.lib +589 -0
- sage_wheels/share/singular/LIB/gmssing.lib +1739 -0
- sage_wheels/share/singular/LIB/goettsche.lib +909 -0
- sage_wheels/share/singular/LIB/graal.lib +1366 -0
- sage_wheels/share/singular/LIB/gradedModules.lib +2541 -0
- sage_wheels/share/singular/LIB/graphics.lib +360 -0
- sage_wheels/share/singular/LIB/grobcov.lib +7706 -0
- sage_wheels/share/singular/LIB/groups.lib +1123 -0
- sage_wheels/share/singular/LIB/grwalk.lib +507 -0
- sage_wheels/share/singular/LIB/hdepth.lib +194 -0
- sage_wheels/share/singular/LIB/help.cnf +57 -0
- sage_wheels/share/singular/LIB/hess.lib +1946 -0
- sage_wheels/share/singular/LIB/hnoether.lib +4292 -0
- sage_wheels/share/singular/LIB/hodge.lib +400 -0
- sage_wheels/share/singular/LIB/homolog.lib +1965 -0
- sage_wheels/share/singular/LIB/hyperel.lib +975 -0
- sage_wheels/share/singular/LIB/inout.lib +679 -0
- sage_wheels/share/singular/LIB/integralbasis.lib +6224 -0
- sage_wheels/share/singular/LIB/interval.lib +1418 -0
- sage_wheels/share/singular/LIB/intprog.lib +778 -0
- sage_wheels/share/singular/LIB/invar.lib +443 -0
- sage_wheels/share/singular/LIB/involut.lib +980 -0
- sage_wheels/share/singular/LIB/jacobson.lib +1215 -0
- sage_wheels/share/singular/LIB/kskernel.lib +534 -0
- sage_wheels/share/singular/LIB/latex.lib +3146 -0
- sage_wheels/share/singular/LIB/lejeune.lib +651 -0
- sage_wheels/share/singular/LIB/linalg.lib +2040 -0
- sage_wheels/share/singular/LIB/locnormal.lib +212 -0
- sage_wheels/share/singular/LIB/lrcalc.lib +526 -0
- sage_wheels/share/singular/LIB/makedbm.lib +294 -0
- sage_wheels/share/singular/LIB/mathml.lib +813 -0
- sage_wheels/share/singular/LIB/matrix.lib +1372 -0
- sage_wheels/share/singular/LIB/maxlike.lib +1132 -0
- sage_wheels/share/singular/LIB/methods.lib +212 -0
- sage_wheels/share/singular/LIB/moddiq.lib +322 -0
- sage_wheels/share/singular/LIB/modfinduni.lib +181 -0
- sage_wheels/share/singular/LIB/modnormal.lib +218 -0
- sage_wheels/share/singular/LIB/modprimdec.lib +1278 -0
- sage_wheels/share/singular/LIB/modquotient.lib +269 -0
- sage_wheels/share/singular/LIB/modstd.lib +1024 -0
- sage_wheels/share/singular/LIB/modular.lib +545 -0
- sage_wheels/share/singular/LIB/modules.lib +2561 -0
- sage_wheels/share/singular/LIB/modwalk.lib +609 -0
- sage_wheels/share/singular/LIB/mondromy.lib +1016 -0
- sage_wheels/share/singular/LIB/monomialideal.lib +3851 -0
- sage_wheels/share/singular/LIB/mprimdec.lib +2353 -0
- sage_wheels/share/singular/LIB/mregular.lib +1863 -0
- sage_wheels/share/singular/LIB/multigrading.lib +5629 -0
- sage_wheels/share/singular/LIB/ncHilb.lib +777 -0
- sage_wheels/share/singular/LIB/ncModslimgb.lib +791 -0
- sage_wheels/share/singular/LIB/ncalg.lib +16311 -0
- sage_wheels/share/singular/LIB/ncall.lib +31 -0
- sage_wheels/share/singular/LIB/ncdecomp.lib +468 -0
- sage_wheels/share/singular/LIB/ncfactor.lib +13371 -0
- sage_wheels/share/singular/LIB/ncfrac.lib +1023 -0
- sage_wheels/share/singular/LIB/nchilbert.lib +448 -0
- sage_wheels/share/singular/LIB/nchomolog.lib +759 -0
- sage_wheels/share/singular/LIB/ncloc.lib +361 -0
- sage_wheels/share/singular/LIB/ncpreim.lib +795 -0
- sage_wheels/share/singular/LIB/ncrat.lib +2849 -0
- sage_wheels/share/singular/LIB/nctools.lib +1887 -0
- sage_wheels/share/singular/LIB/nets.lib +1456 -0
- sage_wheels/share/singular/LIB/nfmodstd.lib +1000 -0
- sage_wheels/share/singular/LIB/nfmodsyz.lib +732 -0
- sage_wheels/share/singular/LIB/noether.lib +1106 -0
- sage_wheels/share/singular/LIB/normal.lib +8700 -0
- sage_wheels/share/singular/LIB/normaliz.lib +2226 -0
- sage_wheels/share/singular/LIB/ntsolve.lib +362 -0
- sage_wheels/share/singular/LIB/numerAlg.lib +560 -0
- sage_wheels/share/singular/LIB/numerDecom.lib +2261 -0
- sage_wheels/share/singular/LIB/olga.lib +1933 -0
- sage_wheels/share/singular/LIB/orbitparam.lib +351 -0
- sage_wheels/share/singular/LIB/parallel.lib +319 -0
- sage_wheels/share/singular/LIB/paraplanecurves.lib +3110 -0
- sage_wheels/share/singular/LIB/perron.lib +202 -0
- sage_wheels/share/singular/LIB/pfd.lib +2223 -0
- sage_wheels/share/singular/LIB/phindex.lib +642 -0
- sage_wheels/share/singular/LIB/pointid.lib +673 -0
- sage_wheels/share/singular/LIB/polybori.lib +1430 -0
- sage_wheels/share/singular/LIB/polyclass.lib +525 -0
- sage_wheels/share/singular/LIB/polylib.lib +1174 -0
- sage_wheels/share/singular/LIB/polymake.lib +1902 -0
- sage_wheels/share/singular/LIB/presolve.lib +1533 -0
- sage_wheels/share/singular/LIB/primdec.lib +9576 -0
- sage_wheels/share/singular/LIB/primdecint.lib +1782 -0
- sage_wheels/share/singular/LIB/primitiv.lib +401 -0
- sage_wheels/share/singular/LIB/puiseuxexpansions.lib +1631 -0
- sage_wheels/share/singular/LIB/purityfiltration.lib +960 -0
- sage_wheels/share/singular/LIB/qhmoduli.lib +1561 -0
- sage_wheels/share/singular/LIB/qmatrix.lib +293 -0
- sage_wheels/share/singular/LIB/random.lib +455 -0
- sage_wheels/share/singular/LIB/ratgb.lib +489 -0
- sage_wheels/share/singular/LIB/realclassify.lib +5759 -0
- sage_wheels/share/singular/LIB/realizationMatroids.lib +772 -0
- sage_wheels/share/singular/LIB/realrad.lib +1197 -0
- sage_wheels/share/singular/LIB/recover.lib +2628 -0
- sage_wheels/share/singular/LIB/redcgs.lib +3984 -0
- sage_wheels/share/singular/LIB/reesclos.lib +465 -0
- sage_wheels/share/singular/LIB/resbinomial.lib +2802 -0
- sage_wheels/share/singular/LIB/resgraph.lib +789 -0
- sage_wheels/share/singular/LIB/resjung.lib +820 -0
- sage_wheels/share/singular/LIB/resolve.lib +5110 -0
- sage_wheels/share/singular/LIB/resources.lib +170 -0
- sage_wheels/share/singular/LIB/reszeta.lib +5473 -0
- sage_wheels/share/singular/LIB/ring.lib +1328 -0
- sage_wheels/share/singular/LIB/ringgb.lib +343 -0
- sage_wheels/share/singular/LIB/rinvar.lib +1153 -0
- sage_wheels/share/singular/LIB/rootisolation.lib +1481 -0
- sage_wheels/share/singular/LIB/rootsmr.lib +709 -0
- sage_wheels/share/singular/LIB/rootsur.lib +886 -0
- sage_wheels/share/singular/LIB/rstandard.lib +607 -0
- sage_wheels/share/singular/LIB/rwalk.lib +336 -0
- sage_wheels/share/singular/LIB/sagbi.lib +1353 -0
- sage_wheels/share/singular/LIB/sagbiNormaliz.lib +1622 -0
- sage_wheels/share/singular/LIB/sagbiNormaliz0.lib +1498 -0
- sage_wheels/share/singular/LIB/sagbigrob.lib +449 -0
- sage_wheels/share/singular/LIB/schreyer.lib +321 -0
- sage_wheels/share/singular/LIB/schubert.lib +2551 -0
- sage_wheels/share/singular/LIB/sets.lib +524 -0
- sage_wheels/share/singular/LIB/sheafcoh.lib +1663 -0
- sage_wheels/share/singular/LIB/signcond.lib +437 -0
- sage_wheels/share/singular/LIB/sing.lib +1094 -0
- sage_wheels/share/singular/LIB/sing4ti2.lib +419 -0
- sage_wheels/share/singular/LIB/solve.lib +2243 -0
- sage_wheels/share/singular/LIB/spcurve.lib +1077 -0
- sage_wheels/share/singular/LIB/spectrum.lib +62 -0
- sage_wheels/share/singular/LIB/sresext.lib +757 -0
- sage_wheels/share/singular/LIB/ssi.lib +143 -0
- sage_wheels/share/singular/LIB/standard.lib +2769 -0
- sage_wheels/share/singular/LIB/stanleyreisner.lib +473 -0
- sage_wheels/share/singular/LIB/stdmodule.lib +547 -0
- sage_wheels/share/singular/LIB/stratify.lib +1070 -0
- sage_wheels/share/singular/LIB/surf.lib +506 -0
- sage_wheels/share/singular/LIB/surf_jupyter.lib +223 -0
- sage_wheels/share/singular/LIB/surfacesignature.lib +522 -0
- sage_wheels/share/singular/LIB/surfex.lib +1462 -0
- sage_wheels/share/singular/LIB/swalk.lib +877 -0
- sage_wheels/share/singular/LIB/symodstd.lib +1570 -0
- sage_wheels/share/singular/LIB/systhreads.lib +74 -0
- sage_wheels/share/singular/LIB/tasks.lib +1324 -0
- sage_wheels/share/singular/LIB/tateProdCplxNegGrad.lib +2412 -0
- sage_wheels/share/singular/LIB/teachstd.lib +858 -0
- sage_wheels/share/singular/LIB/template.lib +116 -0
- sage_wheels/share/singular/LIB/toric.lib +1119 -0
- sage_wheels/share/singular/LIB/transformation.lib +116 -0
- sage_wheels/share/singular/LIB/triang.lib +1197 -0
- sage_wheels/share/singular/LIB/tropical.lib +8741 -0
- sage_wheels/share/singular/LIB/tropicalEllipticCovers.lib +2922 -0
- sage_wheels/share/singular/LIB/tropicalNewton.lib +1128 -0
- sage_wheels/share/singular/LIB/tst.lib +1108 -0
- sage_wheels/share/singular/LIB/weierstr.lib +241 -0
- sage_wheels/share/singular/LIB/zeroset.lib +1478 -0
- sage_wheels/share/singular/emacs/.emacs-general +184 -0
- sage_wheels/share/singular/emacs/.emacs-singular +234 -0
- sage_wheels/share/singular/emacs/COPYING +44 -0
- sage_wheels/share/singular/emacs/cmd-cmpl.el +241 -0
- sage_wheels/share/singular/emacs/ex-cmpl.el +1681 -0
- sage_wheels/share/singular/emacs/hlp-cmpl.el +4318 -0
- sage_wheels/share/singular/emacs/lib-cmpl.el +179 -0
- sage_wheels/share/singular/emacs/singular.el +4273 -0
- sage_wheels/share/singular/emacs/singular.xpm +39 -0
- sage_wheels/share/singular/singular.idx +5002 -0
|
@@ -0,0 +1,1739 @@
|
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version gmssing.lib 4.4.0.6 Oct_2024 "; // $Id: 2d9b016b71a2ea1e767406d2c6a0b4cd92baa1da $
|
|
3
|
+
category="Singularities";
|
|
4
|
+
|
|
5
|
+
info="
|
|
6
|
+
LIBRARY: gmssing.lib Gauss-Manin System of Isolated Singularities
|
|
7
|
+
|
|
8
|
+
AUTHOR: Mathias Schulze, mschulze at mathematik.uni-kl.de
|
|
9
|
+
|
|
10
|
+
OVERVIEW:
|
|
11
|
+
A library for computing invariants related to the Gauss-Manin system of an
|
|
12
|
+
isolated hypersurface singularity.
|
|
13
|
+
|
|
14
|
+
REFERENCES:
|
|
15
|
+
[Sch01] M. Schulze: Algorithms for the Gauss-Manin connection. J. Symb. Comp.
|
|
16
|
+
32,5 (2001), 549-564.
|
|
17
|
+
[Sch02] M. Schulze: The differential structure of the Brieskorn lattice.
|
|
18
|
+
In: A.M. Cohen et al.: Mathematical Software - ICMS 2002.
|
|
19
|
+
World Scientific (2002).
|
|
20
|
+
[Sch03] M. Schulze: Monodromy of Hypersurface Singularities.
|
|
21
|
+
Acta Appl. Math. 75 (2003), 3-13.
|
|
22
|
+
[Sch04] M. Schulze: A normal form algorithm for the Brieskorn lattice.
|
|
23
|
+
J. Symb. Comp. 38,4 (2004), 1207-1225.
|
|
24
|
+
|
|
25
|
+
PROCEDURES:
|
|
26
|
+
gmsring(t,s); Gauss-Manin system of t with variable s
|
|
27
|
+
gmsnf(p,K); Gauss-Manin normal form of p
|
|
28
|
+
gmscoeffs(p,K); Gauss-Manin basis representation of p
|
|
29
|
+
bernstein(t); Bernstein-Sato polynomial of t
|
|
30
|
+
monodromy(t); Jordan data of complex monodromy of t
|
|
31
|
+
spectrum(t); singularity spectrum of t
|
|
32
|
+
sppairs(t); spectral pairs of t
|
|
33
|
+
vfilt(t); V-filtration of t on Brieskorn lattice
|
|
34
|
+
vwfilt(t); weighted V-filtration of t on Brieskorn lattice
|
|
35
|
+
tmatrix(t); matrix of t w.r.t. good basis of Brieskorn lattice
|
|
36
|
+
endvfilt(V); endomorphism V-filtration on Jacobian algebra
|
|
37
|
+
sppnf(a,w[,m]); spectral pairs normal form of (a,w[,m])
|
|
38
|
+
sppprint(spp); print spectral pairs spp
|
|
39
|
+
spadd(sp1,sp2); sum of spectra sp1 and sp2
|
|
40
|
+
spsub(sp1,sp2); difference of spectra sp1 and sp2
|
|
41
|
+
spmul(sp0,k); linear combination of spectra sp
|
|
42
|
+
spissemicont(sp[,opt]); semicontinuity test of spectrum sp
|
|
43
|
+
spsemicont(sp0,sp[,opt]); semicontinuous combinations of spectra sp0 in sp
|
|
44
|
+
spmilnor(sp); Milnor number of spectrum sp
|
|
45
|
+
spgeomgenus(sp); geometrical genus of spectrum sp
|
|
46
|
+
spgamma(sp); gamma invariant of spectrum sp
|
|
47
|
+
|
|
48
|
+
SEE ALSO: mondromy_lib, spectrum_lib, gmspoly_lib, dmod_lib
|
|
49
|
+
|
|
50
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
51
|
+
mixed Hodge structure; V-filtration; weight filtration;
|
|
52
|
+
Bernstein-Sato polynomial; monodromy; spectrum; spectral pairs;
|
|
53
|
+
good basis
|
|
54
|
+
";
|
|
55
|
+
|
|
56
|
+
LIB "linalg.lib";
|
|
57
|
+
|
|
58
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
59
|
+
|
|
60
|
+
static proc stdtrans(ideal I)
|
|
61
|
+
{
|
|
62
|
+
def @R=basering;
|
|
63
|
+
|
|
64
|
+
string os=ordstr(@R);
|
|
65
|
+
int j=find(os,",C");
|
|
66
|
+
if(j==0)
|
|
67
|
+
{
|
|
68
|
+
j=find(os,"C,");
|
|
69
|
+
}
|
|
70
|
+
if(j==0)
|
|
71
|
+
{
|
|
72
|
+
j=find(os,",c");
|
|
73
|
+
}
|
|
74
|
+
if(j==0)
|
|
75
|
+
{
|
|
76
|
+
j=find(os,"c,");
|
|
77
|
+
}
|
|
78
|
+
if(j>0)
|
|
79
|
+
{
|
|
80
|
+
os[j..j+1]=" ";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
ring @S = create_ring(ring_list(@R)[1], "(gmspoly,"+varstr(@R)+")", "(c,dp(1),"+os+")", "no_minpoly");
|
|
84
|
+
|
|
85
|
+
ideal I=homog(imap(@R,I),gmspoly);
|
|
86
|
+
module M=transpose(transpose(I)+freemodule(ncols(I)));
|
|
87
|
+
M=std(M);
|
|
88
|
+
|
|
89
|
+
setring(@R);
|
|
90
|
+
execute("map h=@S,1,"+varstr(@R)+";");
|
|
91
|
+
module M=h(M);
|
|
92
|
+
|
|
93
|
+
for(int i=ncols(M);i>=1;i--)
|
|
94
|
+
{
|
|
95
|
+
for(j=ncols(M);j>=1;j--)
|
|
96
|
+
{
|
|
97
|
+
if(M[i][1]==0)
|
|
98
|
+
{
|
|
99
|
+
M[i]=0;
|
|
100
|
+
}
|
|
101
|
+
if(i!=j&&M[j][1]!=0)
|
|
102
|
+
{
|
|
103
|
+
if(lead(M[i][1])/lead(M[j][1])!=0)
|
|
104
|
+
{
|
|
105
|
+
M[i]=0;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
M=transpose(simplify(M,2));
|
|
112
|
+
I=ideal(M[1]);
|
|
113
|
+
attrib(I,"isSB",1);
|
|
114
|
+
M=M[2..ncols(M)];
|
|
115
|
+
module U=transpose(M);
|
|
116
|
+
|
|
117
|
+
return(list(I,U));
|
|
118
|
+
}
|
|
119
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
120
|
+
|
|
121
|
+
proc gmsring(poly t,string s)
|
|
122
|
+
"USAGE: gmsring(t,s); poly t, string s
|
|
123
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
124
|
+
isolated critical point 0 of t
|
|
125
|
+
RETURN:
|
|
126
|
+
@format
|
|
127
|
+
ring G; Gauss-Manin system of t with variable s
|
|
128
|
+
poly gmspoly=t;
|
|
129
|
+
ideal gmsjacob; Jacobian ideal of t
|
|
130
|
+
ideal gmsstd; standard basis of Jacobian ideal
|
|
131
|
+
matrix gmsmatrix; matrix(gmsjacob)*gmsmatrix==matrix(gmsstd)
|
|
132
|
+
ideal gmsbasis; monomial vector space basis of Jacobian algebra
|
|
133
|
+
int Gmssing::gmsmaxdeg; maximal weight of variables
|
|
134
|
+
@end format
|
|
135
|
+
NOTE: gmsbasis is a C[[s]]-basis of H'' and [t,s]=s^2
|
|
136
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice
|
|
137
|
+
EXAMPLE: example gmsring; shows examples
|
|
138
|
+
"
|
|
139
|
+
{
|
|
140
|
+
def @R=basering;
|
|
141
|
+
if((charstr(@R)!="0")&&(charstr(@R)!="QQ"))
|
|
142
|
+
{
|
|
143
|
+
ERROR("characteristic 0 expected");
|
|
144
|
+
}
|
|
145
|
+
for(int i=nvars(@R);i>=1;i--)
|
|
146
|
+
{
|
|
147
|
+
if(var(i)>1)
|
|
148
|
+
{
|
|
149
|
+
ERROR("local ordering expected");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
ideal dt=jacob(t);
|
|
154
|
+
list l=stdtrans(dt);
|
|
155
|
+
ideal g=l[1];
|
|
156
|
+
if(vdim(g)<=0)
|
|
157
|
+
{
|
|
158
|
+
if(vdim(g)==0)
|
|
159
|
+
{
|
|
160
|
+
ERROR("singularity at 0 expected");
|
|
161
|
+
}
|
|
162
|
+
else
|
|
163
|
+
{
|
|
164
|
+
ERROR("isolated critical point 0 expected");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
matrix B=l[2];
|
|
168
|
+
ideal m=kbase(g);
|
|
169
|
+
|
|
170
|
+
int gmsmaxdeg;
|
|
171
|
+
for(i=nvars(@R);i>=1;i--)
|
|
172
|
+
{
|
|
173
|
+
if(deg(var(i))>gmsmaxdeg)
|
|
174
|
+
{
|
|
175
|
+
gmsmaxdeg=deg(var(i));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
string os=ordstr(@R);
|
|
180
|
+
int j=find(os,",C");
|
|
181
|
+
if(j==0)
|
|
182
|
+
{
|
|
183
|
+
j=find(os,"C,");
|
|
184
|
+
}
|
|
185
|
+
if(j==0)
|
|
186
|
+
{
|
|
187
|
+
j=find(os,",c");
|
|
188
|
+
}
|
|
189
|
+
if(j==0)
|
|
190
|
+
{
|
|
191
|
+
j=find(os,"c,");
|
|
192
|
+
}
|
|
193
|
+
if(j>0)
|
|
194
|
+
{
|
|
195
|
+
os[j..j+1]=" ";
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
ring G = create_ring(string(charstr(@R)), "("+s+","+varstr(@R)+")", "(ws("+string(deg(highcorner(g))+2*gmsmaxdeg)+"),"+os+",c)");
|
|
199
|
+
|
|
200
|
+
poly gmspoly=imap(@R,t);
|
|
201
|
+
ideal gmsjacob=imap(@R,dt);
|
|
202
|
+
ideal gmsstd=imap(@R,g);
|
|
203
|
+
matrix gmsmatrix=imap(@R,B);
|
|
204
|
+
ideal gmsbasis=imap(@R,m);
|
|
205
|
+
|
|
206
|
+
attrib(gmsstd,"isSB",1);
|
|
207
|
+
export gmspoly,gmsjacob,gmsstd,gmsmatrix,gmsbasis,gmsmaxdeg;
|
|
208
|
+
|
|
209
|
+
return(G);
|
|
210
|
+
}
|
|
211
|
+
example
|
|
212
|
+
{ "EXAMPLE:"; echo=2;
|
|
213
|
+
ring @R=0,(x,y),ds;
|
|
214
|
+
poly t=x5+x2y2+y5;
|
|
215
|
+
def G=gmsring(t,"s");
|
|
216
|
+
setring(G);
|
|
217
|
+
gmspoly;
|
|
218
|
+
print(gmsjacob);
|
|
219
|
+
print(gmsstd);
|
|
220
|
+
print(gmsmatrix);
|
|
221
|
+
print(gmsbasis);
|
|
222
|
+
Gmssing::gmsmaxdeg;
|
|
223
|
+
}
|
|
224
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
225
|
+
|
|
226
|
+
proc gmsnf(ideal p,int K)
|
|
227
|
+
"USAGE: gmsnf(p,K); poly p, int K
|
|
228
|
+
ASSUME: basering returned by gmsring
|
|
229
|
+
RETURN:
|
|
230
|
+
list nf;
|
|
231
|
+
ideal nf[1]; projection of p to <gmsbasis>C[[s]] mod s^(K+1)
|
|
232
|
+
ideal nf[2]; p==nf[1]+nf[2]
|
|
233
|
+
NOTE: computation can be continued by setting p=nf[2]
|
|
234
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice
|
|
235
|
+
EXAMPLE: example gmsnf; shows examples
|
|
236
|
+
"
|
|
237
|
+
{
|
|
238
|
+
if(system("with","gms"))
|
|
239
|
+
{
|
|
240
|
+
return(system("gmsnf",p,gmsstd,gmsmatrix,(K+1)*deg(var(1))-2*gmsmaxdeg,K));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
intvec v=1;
|
|
244
|
+
v[nvars(basering)]=0;
|
|
245
|
+
|
|
246
|
+
int k;
|
|
247
|
+
ideal r,q;
|
|
248
|
+
r[ncols(p)]=0;
|
|
249
|
+
q[ncols(p)]=0;
|
|
250
|
+
|
|
251
|
+
poly s;
|
|
252
|
+
int i,j;
|
|
253
|
+
for(k=ncols(p);k>=1;k--)
|
|
254
|
+
{
|
|
255
|
+
while(p[k]!=0&°(lead(p[k]),v)<=K)
|
|
256
|
+
{
|
|
257
|
+
i=1;
|
|
258
|
+
s=lead(p[k])/lead(gmsstd[i]);
|
|
259
|
+
while(i<ncols(gmsstd)&&s==0)
|
|
260
|
+
{
|
|
261
|
+
i++;
|
|
262
|
+
s=lead(p[k])/lead(gmsstd[i]);
|
|
263
|
+
}
|
|
264
|
+
if(s!=0)
|
|
265
|
+
{
|
|
266
|
+
p[k]=p[k]-s*gmsstd[i];
|
|
267
|
+
for(j=1;j<=nrows(gmsmatrix);j++)
|
|
268
|
+
{
|
|
269
|
+
p[k]=p[k]+diff(s*gmsmatrix[j,i],var(j+1))*var(1);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
else
|
|
273
|
+
{
|
|
274
|
+
r[k]=r[k]+lead(p[k]);
|
|
275
|
+
p[k]=p[k]-lead(p[k]);
|
|
276
|
+
}
|
|
277
|
+
while(deg(lead(p[k]))>(K+1)*deg(var(1))-2*gmsmaxdeg&&
|
|
278
|
+
deg(lead(p[k]),v)<=K)
|
|
279
|
+
{
|
|
280
|
+
q[k]=q[k]+lead(p[k]);
|
|
281
|
+
p[k]=p[k]-lead(p[k]);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
q[k]=q[k]+p[k];
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return(list(r,q));
|
|
288
|
+
}
|
|
289
|
+
example
|
|
290
|
+
{ "EXAMPLE:"; echo=2;
|
|
291
|
+
ring R=0,(x,y),ds;
|
|
292
|
+
poly t=x5+x2y2+y5;
|
|
293
|
+
def G=gmsring(t,"s");
|
|
294
|
+
setring(G);
|
|
295
|
+
list l0=gmsnf(gmspoly,0);
|
|
296
|
+
print(l0[1]);
|
|
297
|
+
list l1=gmsnf(gmspoly,1);
|
|
298
|
+
print(l1[1]);
|
|
299
|
+
list l=gmsnf(l0[2],1);
|
|
300
|
+
print(l[1]);
|
|
301
|
+
}
|
|
302
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
303
|
+
|
|
304
|
+
proc gmscoeffs(ideal p,int K)
|
|
305
|
+
"USAGE: gmscoeffs(p,K); poly p, int K
|
|
306
|
+
ASSUME: basering constructed by gmsring
|
|
307
|
+
RETURN:
|
|
308
|
+
@format
|
|
309
|
+
list l;
|
|
310
|
+
matrix l[1]; C[[s]]-basis representation of p mod s^(K+1)
|
|
311
|
+
ideal l[2]; p==matrix(gmsbasis)*l[1]+l[2]
|
|
312
|
+
@end format
|
|
313
|
+
NOTE: computation can be continued by setting p=l[2]
|
|
314
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice
|
|
315
|
+
EXAMPLE: example gmscoeffs; shows examples
|
|
316
|
+
"
|
|
317
|
+
{
|
|
318
|
+
list l=gmsnf(p,K);
|
|
319
|
+
ideal r,q=l[1..2];
|
|
320
|
+
poly v=1;
|
|
321
|
+
for(int i=2;i<=nvars(basering);i++)
|
|
322
|
+
{
|
|
323
|
+
v=v*var(i);
|
|
324
|
+
}
|
|
325
|
+
matrix C=coeffs(r,gmsbasis,v);
|
|
326
|
+
return(list(C,q));
|
|
327
|
+
}
|
|
328
|
+
example
|
|
329
|
+
{ "EXAMPLE:"; echo=2;
|
|
330
|
+
ring R=0,(x,y),ds;
|
|
331
|
+
poly t=x5+x2y2+y5;
|
|
332
|
+
def G=gmsring(t,"s");
|
|
333
|
+
setring(G);
|
|
334
|
+
list l0=gmscoeffs(gmspoly,0);
|
|
335
|
+
print(l0[1]);
|
|
336
|
+
list l1=gmscoeffs(gmspoly,1);
|
|
337
|
+
print(l1[1]);
|
|
338
|
+
list l=gmscoeffs(l0[2],1);
|
|
339
|
+
print(l[1]);
|
|
340
|
+
}
|
|
341
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
342
|
+
|
|
343
|
+
static proc mindegree(matrix A)
|
|
344
|
+
{
|
|
345
|
+
int d=-1;
|
|
346
|
+
|
|
347
|
+
int i,j;
|
|
348
|
+
for(i=nrows(A);i>=1;i--)
|
|
349
|
+
{
|
|
350
|
+
for(j=ncols(A);j>=1;j--)
|
|
351
|
+
{
|
|
352
|
+
if(d==-1||(ord(A[i,j])<d&&ord(A[i,j])>-1))
|
|
353
|
+
{
|
|
354
|
+
d=ord(A[i,j]);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return(d);
|
|
360
|
+
}
|
|
361
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
362
|
+
|
|
363
|
+
static proc maxdegree(matrix A)
|
|
364
|
+
{
|
|
365
|
+
int d=-1;
|
|
366
|
+
|
|
367
|
+
int i,j;
|
|
368
|
+
for(i=nrows(A);i>=1;i--)
|
|
369
|
+
{
|
|
370
|
+
for(j=ncols(A);j>=1;j--)
|
|
371
|
+
{
|
|
372
|
+
if(deg(A[i,j])>d)
|
|
373
|
+
{
|
|
374
|
+
d=deg(A[i,j]);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return(d);
|
|
380
|
+
}
|
|
381
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
382
|
+
|
|
383
|
+
static proc saturate()
|
|
384
|
+
{
|
|
385
|
+
int mu=ncols(gmsbasis);
|
|
386
|
+
ideal r=gmspoly*gmsbasis;
|
|
387
|
+
matrix A0[mu][mu],C;
|
|
388
|
+
module H0;
|
|
389
|
+
module H,H1=freemodule(mu),freemodule(mu);
|
|
390
|
+
int k=-1;
|
|
391
|
+
list l;
|
|
392
|
+
|
|
393
|
+
dbprint(printlevel-voice+2,"// compute saturation of H''");
|
|
394
|
+
while(size(reduce(H,std(H0*var(1)),5))>0)
|
|
395
|
+
{
|
|
396
|
+
dbprint(printlevel-voice+2,"// compute matrix A of t");
|
|
397
|
+
k++;
|
|
398
|
+
dbprint(printlevel-voice+2,"// k="+string(k));
|
|
399
|
+
l=gmscoeffs(r,k);
|
|
400
|
+
C,r=l[1..2];
|
|
401
|
+
A0=A0+C;
|
|
402
|
+
|
|
403
|
+
dbprint(printlevel-voice+2,"// compute saturation step");
|
|
404
|
+
H0=H;
|
|
405
|
+
H1=jet(module(A0*H1+var(1)^2*diff(matrix(H1),var(1))),k);
|
|
406
|
+
H=H*var(1)+H1;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
A0=A0-k*var(1);
|
|
410
|
+
dbprint(printlevel-voice+2,"// compute basis of saturation of H''");
|
|
411
|
+
H=std(H0);
|
|
412
|
+
|
|
413
|
+
dbprint(printlevel-voice+2,"// transform H'' to saturation of H''");
|
|
414
|
+
H0=division(freemodule(mu)*var(1)^k,H,k*deg(var(1)))[1];
|
|
415
|
+
|
|
416
|
+
return(A0,r,H,H0,k);
|
|
417
|
+
}
|
|
418
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
419
|
+
|
|
420
|
+
static proc tjet(matrix A0,ideal r,module H,int K0,int K)
|
|
421
|
+
{
|
|
422
|
+
dbprint(printlevel-voice+2,"// compute matrix A of t");
|
|
423
|
+
dbprint(printlevel-voice+2,"// k="+string(K0+K+1));
|
|
424
|
+
list l=gmscoeffs(r,K0+K+1);
|
|
425
|
+
matrix C;
|
|
426
|
+
C,r=l[1..2];
|
|
427
|
+
A0=A0+C;
|
|
428
|
+
dbprint(printlevel-voice+2,"// transform A to saturation of H''");
|
|
429
|
+
matrix A=division(A0*H+var(1)^2*diff(matrix(H),var(1)),H,
|
|
430
|
+
(K+1)*deg(var(1)))[1]/var(1);
|
|
431
|
+
return(A,A0,r);
|
|
432
|
+
}
|
|
433
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
434
|
+
|
|
435
|
+
static proc eigenval(matrix A0,ideal r,module H,int K0)
|
|
436
|
+
{
|
|
437
|
+
dbprint(printlevel-voice+2,
|
|
438
|
+
"// compute eigenvalues e with multiplicities m of A1");
|
|
439
|
+
matrix A;
|
|
440
|
+
A,A0,r=tjet(A0,r,H,K0,0);
|
|
441
|
+
list l=eigenvals(A);
|
|
442
|
+
def e,m=l[1..2];
|
|
443
|
+
dbprint(printlevel-voice+2,"// e="+string(e));
|
|
444
|
+
dbprint(printlevel-voice+2,"// m="+string(m));
|
|
445
|
+
return(e,m,A0,r);
|
|
446
|
+
}
|
|
447
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
448
|
+
|
|
449
|
+
static proc transform(matrix A,matrix A0,ideal r,module H,module H0,ideal e,
|
|
450
|
+
intvec m,int K0,int K,int opt)
|
|
451
|
+
{
|
|
452
|
+
int mu=ncols(gmsbasis);
|
|
453
|
+
|
|
454
|
+
int i,j,k;
|
|
455
|
+
intvec d;
|
|
456
|
+
d[ncols(e)]=0;
|
|
457
|
+
if(opt)
|
|
458
|
+
{
|
|
459
|
+
dbprint(printlevel-voice+2,
|
|
460
|
+
"// compute rounded maximal differences d of e");
|
|
461
|
+
for(i=1;i<=ncols(e);i++)
|
|
462
|
+
{
|
|
463
|
+
d[i]=int(e[ncols(e)]-e[i]);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
else
|
|
467
|
+
{
|
|
468
|
+
dbprint(printlevel-voice+2,
|
|
469
|
+
"// compute maximal integer differences d of e");
|
|
470
|
+
for(i=1;i<ncols(e);i++)
|
|
471
|
+
{
|
|
472
|
+
for(j=i+1;j<=ncols(e);j++)
|
|
473
|
+
{
|
|
474
|
+
k=int(e[j]-e[i]);
|
|
475
|
+
if(number(e[j]-e[i])==k)
|
|
476
|
+
{
|
|
477
|
+
if(k>d[i])
|
|
478
|
+
{
|
|
479
|
+
d[i]=k;
|
|
480
|
+
}
|
|
481
|
+
if(-k>d[j])
|
|
482
|
+
{
|
|
483
|
+
d[j]=-k;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
dbprint(printlevel-voice+2,"// d="+string(d));
|
|
490
|
+
|
|
491
|
+
for(i,k=1,0;i<=size(d);i++)
|
|
492
|
+
{
|
|
493
|
+
if(k<d[i])
|
|
494
|
+
{
|
|
495
|
+
k=d[i];
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
A,A0,r=tjet(A0,r,H,K0,K+k);
|
|
499
|
+
|
|
500
|
+
module U,V;
|
|
501
|
+
if(k>0)
|
|
502
|
+
{
|
|
503
|
+
int i0,j0,i1,j1;
|
|
504
|
+
list l;
|
|
505
|
+
|
|
506
|
+
while(k>0)
|
|
507
|
+
{
|
|
508
|
+
dbprint(printlevel-voice+2,"// transform to separate eigenvalues");
|
|
509
|
+
U=0;
|
|
510
|
+
for(i=1;i<=ncols(e);i++)
|
|
511
|
+
{
|
|
512
|
+
U=U+syz(power(jet(A,0)-e[i],m[i]));
|
|
513
|
+
}
|
|
514
|
+
V=inverse(U);
|
|
515
|
+
A=V*A*U;
|
|
516
|
+
H=matrix(H)*matrix(U);
|
|
517
|
+
H0=matrix(V)*matrix(H0);
|
|
518
|
+
|
|
519
|
+
dbprint(printlevel-voice+2,"// transform to reduce maximum of d by 1");
|
|
520
|
+
for(i0,i=1,1;i0<=ncols(e);i0++)
|
|
521
|
+
{
|
|
522
|
+
for(i1=1;i1<=m[i0];i1,i=i1+1,i+1)
|
|
523
|
+
{
|
|
524
|
+
for(j0,j=1,1;j0<=ncols(e);j0++)
|
|
525
|
+
{
|
|
526
|
+
for(j1=1;j1<=m[j0];j1,j=j1+1,j+1)
|
|
527
|
+
{
|
|
528
|
+
if(d[i0]==0&&d[j0]>=1)
|
|
529
|
+
{
|
|
530
|
+
A[i,j]=A[i,j]*var(1);
|
|
531
|
+
}
|
|
532
|
+
if(d[i0]>=1&&d[j0]==0)
|
|
533
|
+
{
|
|
534
|
+
A[i,j]=A[i,j]/var(1);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
H0=transpose(H0);
|
|
542
|
+
for(i0,i=1,1;i0<=ncols(e);i0++)
|
|
543
|
+
{
|
|
544
|
+
if(d[i0]>=1)
|
|
545
|
+
{
|
|
546
|
+
for(i1=1;i1<=m[i0];i1,i=i1+1,i+1)
|
|
547
|
+
{
|
|
548
|
+
H[i]=H[i]*var(1);
|
|
549
|
+
}
|
|
550
|
+
d[i0]=d[i0]-1;
|
|
551
|
+
}
|
|
552
|
+
else
|
|
553
|
+
{
|
|
554
|
+
for(i1=1;i1<=m[i0];i1,i=i1+1,i+1)
|
|
555
|
+
{
|
|
556
|
+
A[i,i]=A[i,i]-1;
|
|
557
|
+
H0[i]=H0[i]*var(1);
|
|
558
|
+
}
|
|
559
|
+
e[i0]=e[i0]-1;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
H0=transpose(H0);
|
|
563
|
+
|
|
564
|
+
l=sppnf(list(e,d,m));
|
|
565
|
+
e,d,m=l[1..3];
|
|
566
|
+
|
|
567
|
+
k--;
|
|
568
|
+
K0++;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
A=jet(A,K);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
dbprint(printlevel-voice+2,"// transform to separate eigenvalues");
|
|
575
|
+
U=0;
|
|
576
|
+
for(i=1;i<=ncols(e);i++)
|
|
577
|
+
{
|
|
578
|
+
U=U+syz(power(jet(A,0)-e[i],m[i]));
|
|
579
|
+
}
|
|
580
|
+
V=inverse(U);
|
|
581
|
+
A=V*A*U;
|
|
582
|
+
H=matrix(H)*matrix(U);
|
|
583
|
+
H0=matrix(V)*matrix(H0);
|
|
584
|
+
|
|
585
|
+
return(A,A0,r,H,H0,e,m,K0);
|
|
586
|
+
}
|
|
587
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
588
|
+
|
|
589
|
+
proc bernstein(poly t)
|
|
590
|
+
"USAGE: bernstein(t); poly t
|
|
591
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
592
|
+
isolated critical point 0 of t
|
|
593
|
+
RETURN:
|
|
594
|
+
@format
|
|
595
|
+
list bs; Bernstein-Sato polynomial b(s) of t
|
|
596
|
+
ideal bs[1];
|
|
597
|
+
number bs[1][i]; i-th root of b(s)
|
|
598
|
+
intvec bs[2];
|
|
599
|
+
int bs[2][i]; multiplicity of i-th root of b(s)
|
|
600
|
+
@end format
|
|
601
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
602
|
+
Bernstein-Sato polynomial
|
|
603
|
+
EXAMPLE: example bernstein; shows examples
|
|
604
|
+
"
|
|
605
|
+
{
|
|
606
|
+
def @R=basering;
|
|
607
|
+
int n=nvars(@R)-1;
|
|
608
|
+
def @G=gmsring(t,"s");
|
|
609
|
+
setring(@G);
|
|
610
|
+
|
|
611
|
+
matrix A;
|
|
612
|
+
module U0;
|
|
613
|
+
ideal e;
|
|
614
|
+
intvec m;
|
|
615
|
+
|
|
616
|
+
def A0,r,H,H0,K0=saturate();
|
|
617
|
+
A,A0,r=tjet(A0,r,H,K0,0);
|
|
618
|
+
list l=minipoly(A);
|
|
619
|
+
e,m=l[1..2];
|
|
620
|
+
e=-e;
|
|
621
|
+
l=spnf(spadd(list(e,m),list(ideal(-1),intvec(1))));
|
|
622
|
+
|
|
623
|
+
setring(@R);
|
|
624
|
+
list l=imap(@G,l);
|
|
625
|
+
kill @G,gmsmaxdeg;
|
|
626
|
+
|
|
627
|
+
return(l);
|
|
628
|
+
}
|
|
629
|
+
example
|
|
630
|
+
{ "EXAMPLE:"; echo=2;
|
|
631
|
+
ring R=0,(x,y),ds;
|
|
632
|
+
poly t=x5+x2y2+y5;
|
|
633
|
+
bernstein(t);
|
|
634
|
+
}
|
|
635
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
636
|
+
|
|
637
|
+
proc monodromy(poly t)
|
|
638
|
+
"USAGE: monodromy(t); poly t
|
|
639
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
640
|
+
isolated critical point 0 of t
|
|
641
|
+
RETURN:
|
|
642
|
+
@format
|
|
643
|
+
list l; Jordan data jordan(M) of monodromy matrix exp(-2*pi*i*M)
|
|
644
|
+
ideal l[1];
|
|
645
|
+
number l[1][i]; eigenvalue of i-th Jordan block of M
|
|
646
|
+
intvec l[2];
|
|
647
|
+
int l[2][i]; size of i-th Jordan block of M
|
|
648
|
+
intvec l[3];
|
|
649
|
+
int l[3][i]; multiplicity of i-th Jordan block of M
|
|
650
|
+
@end format
|
|
651
|
+
SEE ALSO: mondromy_lib, linalg_lib
|
|
652
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice; monodromy
|
|
653
|
+
EXAMPLE: example monodromy; shows examples
|
|
654
|
+
"
|
|
655
|
+
{
|
|
656
|
+
def @R=basering;
|
|
657
|
+
int n=nvars(@R)-1;
|
|
658
|
+
def @G=gmsring(t,"s");
|
|
659
|
+
setring(@G);
|
|
660
|
+
|
|
661
|
+
matrix A;
|
|
662
|
+
module U0;
|
|
663
|
+
ideal e;
|
|
664
|
+
intvec m;
|
|
665
|
+
|
|
666
|
+
def A0,r,H,H0,K0=saturate();
|
|
667
|
+
e,m,A0,r=eigenval(A0,r,H,K0);
|
|
668
|
+
A,A0,r,H,H0,e,m,K0=transform(A,A0,r,H,H0,e,m,K0,0,0);
|
|
669
|
+
|
|
670
|
+
list l=jordan(A,e,m);
|
|
671
|
+
setring(@R);
|
|
672
|
+
list l=imap(@G,l);
|
|
673
|
+
kill @G,gmsmaxdeg;
|
|
674
|
+
|
|
675
|
+
return(l);
|
|
676
|
+
}
|
|
677
|
+
example
|
|
678
|
+
{ "EXAMPLE:"; echo=2;
|
|
679
|
+
ring R=0,(x,y),ds;
|
|
680
|
+
poly t=x5+x2y2+y5;
|
|
681
|
+
monodromy(t);
|
|
682
|
+
}
|
|
683
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
684
|
+
|
|
685
|
+
proc spectrum(poly t)
|
|
686
|
+
"USAGE: spectrum(t); poly t
|
|
687
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
688
|
+
isolated critical point 0 of t
|
|
689
|
+
RETURN:
|
|
690
|
+
@format
|
|
691
|
+
list sp; singularity spectrum of t
|
|
692
|
+
ideal sp[1];
|
|
693
|
+
number sp[1][i]; i-th spectral number
|
|
694
|
+
intvec sp[2];
|
|
695
|
+
int sp[2][i]; multiplicity of i-th spectral number
|
|
696
|
+
@end format
|
|
697
|
+
SEE ALSO: spectrum_lib
|
|
698
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
699
|
+
mixed Hodge structure; V-filtration; spectrum
|
|
700
|
+
EXAMPLE: example spectrum; shows examples
|
|
701
|
+
"
|
|
702
|
+
{
|
|
703
|
+
list l=vwfilt(t);
|
|
704
|
+
return(spnf(list(l[1],l[3])));
|
|
705
|
+
}
|
|
706
|
+
example
|
|
707
|
+
{ "EXAMPLE:"; echo=2;
|
|
708
|
+
ring R=0,(x,y),ds;
|
|
709
|
+
poly t=x5+x2y2+y5;
|
|
710
|
+
spprint(spectrum(t));
|
|
711
|
+
}
|
|
712
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
713
|
+
|
|
714
|
+
proc sppairs(poly t)
|
|
715
|
+
"USAGE: sppairs(t); poly t
|
|
716
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
717
|
+
isolated critical point 0 of t
|
|
718
|
+
RETURN:
|
|
719
|
+
@format
|
|
720
|
+
list spp; spectral pairs of t
|
|
721
|
+
ideal spp[1];
|
|
722
|
+
number spp[1][i]; V-filtration index of i-th spectral pair
|
|
723
|
+
intvec spp[2];
|
|
724
|
+
int spp[2][i]; weight filtration index of i-th spectral pair
|
|
725
|
+
intvec spp[3];
|
|
726
|
+
int spp[3][i]; multiplicity of i-th spectral pair
|
|
727
|
+
@end format
|
|
728
|
+
SEE ALSO: spectrum_lib
|
|
729
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
730
|
+
mixed Hodge structure; V-filtration; weight filtration;
|
|
731
|
+
spectrum; spectral pairs
|
|
732
|
+
EXAMPLE: example sppairs; shows examples
|
|
733
|
+
"
|
|
734
|
+
{
|
|
735
|
+
list l=vwfilt(t);
|
|
736
|
+
return(list(l[1],l[2],l[3]));
|
|
737
|
+
}
|
|
738
|
+
example
|
|
739
|
+
{ "EXAMPLE:"; echo=2;
|
|
740
|
+
ring R=0,(x,y),ds;
|
|
741
|
+
poly t=x5+x2y2+y5;
|
|
742
|
+
sppprint(sppairs(t));
|
|
743
|
+
}
|
|
744
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
745
|
+
|
|
746
|
+
proc vfilt(poly t)
|
|
747
|
+
"USAGE: vfilt(t); poly t
|
|
748
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
749
|
+
isolated critical point 0 of t
|
|
750
|
+
RETURN:
|
|
751
|
+
@format
|
|
752
|
+
list v; V-filtration on H''/s*H''
|
|
753
|
+
ideal v[1];
|
|
754
|
+
number v[1][i]; V-filtration index of i-th spectral number
|
|
755
|
+
intvec v[2];
|
|
756
|
+
int v[2][i]; multiplicity of i-th spectral number
|
|
757
|
+
list v[3];
|
|
758
|
+
module v[3][i]; vector space of i-th graded part in terms of v[4]
|
|
759
|
+
ideal v[4]; monomial vector space basis of H''/s*H''
|
|
760
|
+
ideal v[5]; standard basis of Jacobian ideal
|
|
761
|
+
@end format
|
|
762
|
+
SEE ALSO: spectrum_lib
|
|
763
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
764
|
+
mixed Hodge structure; V-filtration; spectrum
|
|
765
|
+
EXAMPLE: example vfilt; shows examples
|
|
766
|
+
"
|
|
767
|
+
{
|
|
768
|
+
list l=vwfilt(t);
|
|
769
|
+
return(spnf(list(l[1],l[3],l[4]))+list(l[5],l[6]));
|
|
770
|
+
}
|
|
771
|
+
example
|
|
772
|
+
{ "EXAMPLE:"; echo=2;
|
|
773
|
+
ring R=0,(x,y),ds;
|
|
774
|
+
poly t=x5+x2y2+y5;
|
|
775
|
+
vfilt(t);
|
|
776
|
+
}
|
|
777
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
778
|
+
|
|
779
|
+
proc vwfilt(poly t)
|
|
780
|
+
"USAGE: vwfilt(t); poly t
|
|
781
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
782
|
+
isolated critical point 0 of t
|
|
783
|
+
RETURN:
|
|
784
|
+
@format
|
|
785
|
+
list vw; weighted V-filtration on H''/s*H''
|
|
786
|
+
ideal vw[1];
|
|
787
|
+
number vw[1][i]; V-filtration index of i-th spectral pair
|
|
788
|
+
intvec vw[2];
|
|
789
|
+
int vw[2][i]; weight filtration index of i-th spectral pair
|
|
790
|
+
intvec vw[3];
|
|
791
|
+
int vw[3][i]; multiplicity of i-th spectral pair
|
|
792
|
+
list vw[4];
|
|
793
|
+
module vw[4][i]; vector space of i-th graded part in terms of vw[5]
|
|
794
|
+
ideal vw[5]; monomial vector space basis of H''/s*H''
|
|
795
|
+
ideal vw[6]; standard basis of Jacobian ideal
|
|
796
|
+
@end format
|
|
797
|
+
SEE ALSO: spectrum_lib
|
|
798
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
799
|
+
mixed Hodge structure; V-filtration; weight filtration;
|
|
800
|
+
spectrum; spectral pairs
|
|
801
|
+
EXAMPLE: example vwfilt; shows examples
|
|
802
|
+
"
|
|
803
|
+
{
|
|
804
|
+
def @R=basering;
|
|
805
|
+
int n=nvars(@R)-1;
|
|
806
|
+
def @G=gmsring(t,"s");
|
|
807
|
+
setring(@G);
|
|
808
|
+
|
|
809
|
+
int mu=ncols(gmsbasis);
|
|
810
|
+
matrix A;
|
|
811
|
+
ideal e;
|
|
812
|
+
intvec m;
|
|
813
|
+
|
|
814
|
+
def A0,r,H,H0,K0=saturate();
|
|
815
|
+
e,m,A0,r=eigenval(A0,r,H,K0);
|
|
816
|
+
A,A0,r,H,H0,e,m,K0=transform(A,A0,r,H,H0,e,m,K0,0,1);
|
|
817
|
+
|
|
818
|
+
dbprint(printlevel-voice+2,"// compute weight filtration basis");
|
|
819
|
+
list l=jordanbasis(A,e,m);
|
|
820
|
+
def U,v=l[1..2];
|
|
821
|
+
kill l;
|
|
822
|
+
vector u0;
|
|
823
|
+
int v0;
|
|
824
|
+
int i,j,k,l;
|
|
825
|
+
for(k,l=1,1;l<=ncols(e);k,l=k+m[l],l+1)
|
|
826
|
+
{
|
|
827
|
+
for(i=k+m[l]-1;i>=k+1;i--)
|
|
828
|
+
{
|
|
829
|
+
for(j=i-1;j>=k;j--)
|
|
830
|
+
{
|
|
831
|
+
if(v[i]>v[j])
|
|
832
|
+
{
|
|
833
|
+
v0=v[i];v[i]=v[j];v[j]=v0;
|
|
834
|
+
u0=U[i];U[i]=U[j];U[j]=u0;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
dbprint(printlevel-voice+2,"// transform to weight filtration basis");
|
|
841
|
+
matrix V=inverse(U);
|
|
842
|
+
A=V*A*U;
|
|
843
|
+
dbprint(printlevel-voice+2,"// compute standard basis of H''");
|
|
844
|
+
H=matrix(H)*matrix(U);
|
|
845
|
+
H0=std(V*H0);
|
|
846
|
+
|
|
847
|
+
dbprint(printlevel-voice+2,"// compute spectral pairs");
|
|
848
|
+
ideal a;
|
|
849
|
+
intvec w;
|
|
850
|
+
for(i=1;i<=mu;i++)
|
|
851
|
+
{
|
|
852
|
+
j=leadexp(H0[i])[nvars(basering)+1];
|
|
853
|
+
a[i]=A[j,j]+ord(H0[i]) div deg(var(1))-1;
|
|
854
|
+
w[i]=v[j]+n;
|
|
855
|
+
}
|
|
856
|
+
H=matrix(H)*matrix(H0);
|
|
857
|
+
H=simplify(jet(H/var(1)^(mindegree(H) div deg(var(1))),0),1);
|
|
858
|
+
|
|
859
|
+
kill l;
|
|
860
|
+
list l=sppnf(list(a,w,H))+list(gmsbasis,gmsstd);
|
|
861
|
+
setring(@R);
|
|
862
|
+
list l=imap(@G,l);
|
|
863
|
+
kill @G,gmsmaxdeg;
|
|
864
|
+
attrib(l[5],"isSB",1);
|
|
865
|
+
|
|
866
|
+
return(l);
|
|
867
|
+
}
|
|
868
|
+
example
|
|
869
|
+
{ "EXAMPLE:"; echo=2;
|
|
870
|
+
ring R=0,(x,y),ds;
|
|
871
|
+
poly t=x5+x2y2+y5;
|
|
872
|
+
vwfilt(t);
|
|
873
|
+
}
|
|
874
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
875
|
+
|
|
876
|
+
static proc fsplit(ideal e0,intvec m0,matrix A,module H,module H0)
|
|
877
|
+
{
|
|
878
|
+
int mu=ncols(gmsbasis);
|
|
879
|
+
|
|
880
|
+
dbprint(printlevel-voice+2,"// compute standard basis of H''");
|
|
881
|
+
H0=std(H0);
|
|
882
|
+
H0=simplify(H0,1);
|
|
883
|
+
|
|
884
|
+
dbprint(printlevel-voice+2,"// compute Hodge filtration");
|
|
885
|
+
int i,j,k;
|
|
886
|
+
ideal e;
|
|
887
|
+
intvec m;
|
|
888
|
+
e[mu]=0;
|
|
889
|
+
for(i=1;i<=ncols(e0);i++)
|
|
890
|
+
{
|
|
891
|
+
for(j=m0[i];j>=1;j--)
|
|
892
|
+
{
|
|
893
|
+
k++;
|
|
894
|
+
e[k]=e0[i];
|
|
895
|
+
m[k]=i;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
number n,n0;
|
|
900
|
+
vector v,v0;
|
|
901
|
+
list F;
|
|
902
|
+
for(i=ncols(e0);i>=1;i--)
|
|
903
|
+
{
|
|
904
|
+
F[i]=module(matrix(0,mu,1));
|
|
905
|
+
}
|
|
906
|
+
for(i=mu;i>=1;i--)
|
|
907
|
+
{
|
|
908
|
+
v=H0[i];
|
|
909
|
+
v0=lead(v);
|
|
910
|
+
n0=leadcoef(e[leadexp(v0)[nvars(basering)+1]])+leadexp(v0)[1];
|
|
911
|
+
v=v-lead(v);
|
|
912
|
+
while(v!=0)
|
|
913
|
+
{
|
|
914
|
+
n=leadcoef(e[leadexp(v)[nvars(basering)+1]])+leadexp(v)[1];
|
|
915
|
+
if(n==n0)
|
|
916
|
+
{
|
|
917
|
+
v0=v0+lead(v);
|
|
918
|
+
v=v-lead(v);
|
|
919
|
+
}
|
|
920
|
+
else
|
|
921
|
+
{
|
|
922
|
+
v=0;
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
j=m[leadexp(v0)[nvars(basering)+1]];
|
|
926
|
+
F[j]=F[j]+v0;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
dbprint(printlevel-voice+2,"// compute splitting of Hodge filtration");
|
|
930
|
+
matrix A0=jet(A,0);
|
|
931
|
+
module U,U0,U1,U2;
|
|
932
|
+
matrix N;
|
|
933
|
+
for(i=size(F);i>=1;i--)
|
|
934
|
+
{
|
|
935
|
+
N=A0-e0[i];
|
|
936
|
+
U0=0;
|
|
937
|
+
while(size(F[i])>0)
|
|
938
|
+
{
|
|
939
|
+
U1=jet(F[i],0);
|
|
940
|
+
k=0;
|
|
941
|
+
while(size(U1)>0)
|
|
942
|
+
{
|
|
943
|
+
for(j=ncols(U1);j>=1;j--)
|
|
944
|
+
{
|
|
945
|
+
if(size(reduce(U1[j],std(U0),5))>0)
|
|
946
|
+
{
|
|
947
|
+
U0=U0+U1[j];
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
U1=N*U1;
|
|
951
|
+
k++;
|
|
952
|
+
}
|
|
953
|
+
F[i]=module(F[i]/var(1));
|
|
954
|
+
}
|
|
955
|
+
U=U0+U;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
dbprint(printlevel-voice+2,"// transform to Hodge splitting basis");
|
|
959
|
+
H=matrix(H)*matrix(U);
|
|
960
|
+
H0=lift(U,H0);
|
|
961
|
+
A=lift(U,A*U);
|
|
962
|
+
|
|
963
|
+
return(e,A,H,H0);
|
|
964
|
+
}
|
|
965
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
966
|
+
|
|
967
|
+
static proc glift(ideal e,matrix A,module H,module H0,int K)
|
|
968
|
+
{
|
|
969
|
+
poly s=var(1);
|
|
970
|
+
int mu=ncols(gmsbasis);
|
|
971
|
+
|
|
972
|
+
dbprint(printlevel-voice+2,"// compute standard basis of H''");
|
|
973
|
+
H0=std(H0);
|
|
974
|
+
H0=simplify(H0,1);
|
|
975
|
+
|
|
976
|
+
int i,j,k;
|
|
977
|
+
ideal v;
|
|
978
|
+
for(i=mu;i>=1;i--)
|
|
979
|
+
{
|
|
980
|
+
v[i]=e[leadexp(H0[i])[nvars(basering)+1]]+leadexp(H0[i])[1];
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
dbprint(printlevel-voice+2,
|
|
984
|
+
"// compute matrix A0 of t w.r.t. good basis H0 of H''");
|
|
985
|
+
number c;
|
|
986
|
+
matrix h0[mu][1];
|
|
987
|
+
matrix m[mu][1];
|
|
988
|
+
matrix a0[mu][1];
|
|
989
|
+
matrix A0[mu][mu];
|
|
990
|
+
module M=H0;
|
|
991
|
+
module N=jet(s*A*matrix(H0)+s^2*diff(matrix(H0),s),K+1);
|
|
992
|
+
while(size(N)>0)
|
|
993
|
+
{
|
|
994
|
+
j=mu;
|
|
995
|
+
for(k=mu-1;k>=1;k--)
|
|
996
|
+
{
|
|
997
|
+
if(N[k]>N[j])
|
|
998
|
+
{
|
|
999
|
+
j=k;
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
i=mu;
|
|
1003
|
+
while(leadexp(M[i])[nvars(basering)+1]!=leadexp(N[j])[nvars(basering)+1])
|
|
1004
|
+
{
|
|
1005
|
+
i--;
|
|
1006
|
+
}
|
|
1007
|
+
k=leadexp(N[j])[1]-leadexp(M[i])[1];
|
|
1008
|
+
if(k==0||i==j)
|
|
1009
|
+
{
|
|
1010
|
+
dbprint(printlevel-voice+3,"// compute A0["+string(i)+","+string(j)+"]");
|
|
1011
|
+
c=leadcoef(N[j])/leadcoef(M[i]);
|
|
1012
|
+
A0[i,j]=A0[i,j]+c*s^k;
|
|
1013
|
+
N[j]=jet(N[j]-c*s^k*M[i],K+1);
|
|
1014
|
+
}
|
|
1015
|
+
else
|
|
1016
|
+
{
|
|
1017
|
+
dbprint(printlevel-voice+3,
|
|
1018
|
+
"// reduce H0["+string(j)+"] with H0["+string(i)+"]");
|
|
1019
|
+
c=leadcoef(N[j])/leadcoef(M[i])/(1-k-leadcoef(v[i])+leadcoef(v[j]));
|
|
1020
|
+
H0[j]=H0[j]+c*s^(k-1)*H0[i];
|
|
1021
|
+
M[j]=M[j]+c*s^(k-1)*M[i];
|
|
1022
|
+
h0=c*s^(k-1)*H0[i];
|
|
1023
|
+
N[j]=N[j]+jet(s*A*h0+s^2*diff(h0,s),K+1)[1];
|
|
1024
|
+
m=M[i];
|
|
1025
|
+
a0=transpose(A0)[j];
|
|
1026
|
+
N=N-jet(c*s^(k-1)*m*transpose(a0),K+1);
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
H0=matrix(H)*matrix(H0);
|
|
1031
|
+
H0=H0/var(1)^(mindegree(H0) div deg(var(1)));
|
|
1032
|
+
|
|
1033
|
+
return(A0,H0);
|
|
1034
|
+
}
|
|
1035
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1036
|
+
|
|
1037
|
+
proc tmatrix(poly t)
|
|
1038
|
+
"USAGE: tmatrix(t); poly t
|
|
1039
|
+
ASSUME: characteristic 0; local degree ordering;
|
|
1040
|
+
isolated critical point 0 of t
|
|
1041
|
+
RETURN:
|
|
1042
|
+
@format
|
|
1043
|
+
list l=A0,A1,T,M;
|
|
1044
|
+
matrix A0,A1; t=A0+s*A1+s^2*(d/ds) on H'' w.r.t. C[[s]]-basis M*T
|
|
1045
|
+
module T; C-basis of C^mu
|
|
1046
|
+
ideal M; monomial C-basis of H''/sH''
|
|
1047
|
+
@end format
|
|
1048
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
1049
|
+
mixed Hodge structure; V-filtration; weight filtration;
|
|
1050
|
+
monodromy; spectrum; spectral pairs; good basis
|
|
1051
|
+
EXAMPLE: example tmatrix; shows examples
|
|
1052
|
+
"
|
|
1053
|
+
{
|
|
1054
|
+
def @R=basering;
|
|
1055
|
+
int n=nvars(@R)-1;
|
|
1056
|
+
def @G=gmsring(t,"s");
|
|
1057
|
+
setring(@G);
|
|
1058
|
+
|
|
1059
|
+
int mu=ncols(gmsbasis);
|
|
1060
|
+
matrix A;
|
|
1061
|
+
module U0;
|
|
1062
|
+
ideal e;
|
|
1063
|
+
intvec m;
|
|
1064
|
+
|
|
1065
|
+
def A0,r,H,H0,K0=saturate();
|
|
1066
|
+
e,m,A0,r=eigenval(A0,r,H,K0);
|
|
1067
|
+
A,A0,r,H,H0,e,m,K0=transform(A,A0,r,H,H0,e,m,K0,K0+int(e[ncols(e)]-e[1]),1);
|
|
1068
|
+
A,H0=glift(fsplit(e,m,A,H,H0),K0);
|
|
1069
|
+
|
|
1070
|
+
A0=jet(A,0);
|
|
1071
|
+
A=jet(A/var(1),0);
|
|
1072
|
+
|
|
1073
|
+
list l=A0,A,H0,gmsbasis;
|
|
1074
|
+
setring(@R);
|
|
1075
|
+
list l=imap(@G,l);
|
|
1076
|
+
kill @G,gmsmaxdeg;
|
|
1077
|
+
|
|
1078
|
+
return(l);
|
|
1079
|
+
}
|
|
1080
|
+
example
|
|
1081
|
+
{ "EXAMPLE:"; echo=2;
|
|
1082
|
+
ring R=0,(x,y),ds;
|
|
1083
|
+
poly t=x5+x2y2+y5;
|
|
1084
|
+
list l=tmatrix(t);
|
|
1085
|
+
print(l[1]);
|
|
1086
|
+
print(l[2]);
|
|
1087
|
+
print(l[3]);
|
|
1088
|
+
print(l[4]);
|
|
1089
|
+
}
|
|
1090
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1091
|
+
|
|
1092
|
+
proc endvfilt(list v)
|
|
1093
|
+
"USAGE: endvfilt(v); list v
|
|
1094
|
+
ASSUME: v returned by vfilt
|
|
1095
|
+
RETURN:
|
|
1096
|
+
@format
|
|
1097
|
+
list ev; V-filtration on Jacobian algebra
|
|
1098
|
+
ideal ev[1];
|
|
1099
|
+
number ev[1][i]; i-th V-filtration index
|
|
1100
|
+
intvec ev[2];
|
|
1101
|
+
int ev[2][i]; i-th multiplicity
|
|
1102
|
+
list ev[3];
|
|
1103
|
+
module ev[3][i]; vector space of i-th graded part in terms of ev[4]
|
|
1104
|
+
ideal ev[4]; monomial vector space basis of Jacobian algebra
|
|
1105
|
+
ideal ev[5]; standard basis of Jacobian ideal
|
|
1106
|
+
@end format
|
|
1107
|
+
KEYWORDS: singularities; Gauss-Manin system; Brieskorn lattice;
|
|
1108
|
+
mixed Hodge structure; V-filtration; endomorphism filtration
|
|
1109
|
+
EXAMPLE: example endvfilt; shows examples
|
|
1110
|
+
"
|
|
1111
|
+
{
|
|
1112
|
+
def a,d,V,m,g=v[1..5];
|
|
1113
|
+
attrib(g,"isSB",1);
|
|
1114
|
+
int mu=ncols(m);
|
|
1115
|
+
|
|
1116
|
+
module V0=V[1];
|
|
1117
|
+
for(int i=2;i<=size(V);i++)
|
|
1118
|
+
{
|
|
1119
|
+
V0=V0,V[i];
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
dbprint(printlevel-voice+2,"// compute multiplication in Jacobian algebra");
|
|
1123
|
+
list M;
|
|
1124
|
+
module U=freemodule(ncols(m));
|
|
1125
|
+
for(i=ncols(m);i>=1;i--)
|
|
1126
|
+
{
|
|
1127
|
+
M[i]=division(coeffs(reduce(m[i]*m,g,U),m)*V0,V0)[1];
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
int j,k,i0,j0,i1,j1;
|
|
1131
|
+
number b0=number(a[1]-a[ncols(a)]);
|
|
1132
|
+
number b1,b2;
|
|
1133
|
+
matrix M0;
|
|
1134
|
+
module L;
|
|
1135
|
+
list v0=freemodule(ncols(m));
|
|
1136
|
+
ideal a0=b0;
|
|
1137
|
+
list l;
|
|
1138
|
+
|
|
1139
|
+
while(b0<number(a[ncols(a)]-a[1]))
|
|
1140
|
+
{
|
|
1141
|
+
dbprint(printlevel-voice+2,"// find next possible index");
|
|
1142
|
+
b1=number(a[ncols(a)]-a[1]);
|
|
1143
|
+
for(j=ncols(a);j>=1;j--)
|
|
1144
|
+
{
|
|
1145
|
+
for(i=ncols(a);i>=1;i--)
|
|
1146
|
+
{
|
|
1147
|
+
b2=number(a[i]-a[j]);
|
|
1148
|
+
if(b2>b0&&b2<b1)
|
|
1149
|
+
{
|
|
1150
|
+
b1=b2;
|
|
1151
|
+
}
|
|
1152
|
+
else
|
|
1153
|
+
{
|
|
1154
|
+
if(b2<=b0)
|
|
1155
|
+
{
|
|
1156
|
+
i=0;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
b0=b1;
|
|
1162
|
+
|
|
1163
|
+
l=ideal();
|
|
1164
|
+
for(k=ncols(m);k>=2;k--)
|
|
1165
|
+
{
|
|
1166
|
+
l=l+list(ideal());
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
dbprint(printlevel-voice+2,"// collect conditions for EV["+string(b0)+"]");
|
|
1170
|
+
j=ncols(a);
|
|
1171
|
+
j0=mu;
|
|
1172
|
+
while(j>=1)
|
|
1173
|
+
{
|
|
1174
|
+
i0=1;
|
|
1175
|
+
i=1;
|
|
1176
|
+
while(i<ncols(a)&&a[i]<a[j]+b0)
|
|
1177
|
+
{
|
|
1178
|
+
i0=i0+d[i];
|
|
1179
|
+
i++;
|
|
1180
|
+
}
|
|
1181
|
+
if(a[i]<a[j]+b0)
|
|
1182
|
+
{
|
|
1183
|
+
i0=i0+d[i];
|
|
1184
|
+
i++;
|
|
1185
|
+
}
|
|
1186
|
+
for(k=1;k<=ncols(m);k++)
|
|
1187
|
+
{
|
|
1188
|
+
M0=M[k];
|
|
1189
|
+
if(i0>1)
|
|
1190
|
+
{
|
|
1191
|
+
l[k]=l[k],M0[1..i0-1,j0-d[j]+1..j0];
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
j0=j0-d[j];
|
|
1195
|
+
j--;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
dbprint(printlevel-voice+2,"// compose condition matrix");
|
|
1199
|
+
L=transpose(module(l[1]));
|
|
1200
|
+
for(k=2;k<=ncols(m);k++)
|
|
1201
|
+
{
|
|
1202
|
+
L=L,transpose(module(l[k]));
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
dbprint(printlevel-voice+2,"// compute kernel of condition matrix");
|
|
1206
|
+
v0=v0+list(syz(L));
|
|
1207
|
+
a0=a0,b0;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
dbprint(printlevel-voice+2,"// compute graded parts");
|
|
1211
|
+
option(redSB);
|
|
1212
|
+
for(i=1;i<size(v0);i++)
|
|
1213
|
+
{
|
|
1214
|
+
v0[i+1]=std(v0[i+1]);
|
|
1215
|
+
v0[i]=std(reduce(v0[i],v0[i+1]));
|
|
1216
|
+
}
|
|
1217
|
+
option(noredSB);
|
|
1218
|
+
|
|
1219
|
+
dbprint(printlevel-voice+2,"// remove trivial graded parts");
|
|
1220
|
+
i=1;
|
|
1221
|
+
while(size(v0[i])==0)
|
|
1222
|
+
{
|
|
1223
|
+
i++;
|
|
1224
|
+
}
|
|
1225
|
+
list v1=v0[i];
|
|
1226
|
+
intvec d1=size(v0[i]);
|
|
1227
|
+
ideal a1=a0[i];
|
|
1228
|
+
i++;
|
|
1229
|
+
while(i<=size(v0))
|
|
1230
|
+
{
|
|
1231
|
+
if(size(v0[i])>0)
|
|
1232
|
+
{
|
|
1233
|
+
v1=v1+list(v0[i]);
|
|
1234
|
+
d1=d1,size(v0[i]);
|
|
1235
|
+
a1=a1,a0[i];
|
|
1236
|
+
}
|
|
1237
|
+
i++;
|
|
1238
|
+
}
|
|
1239
|
+
return(list(a1,d1,v1,m,g));
|
|
1240
|
+
}
|
|
1241
|
+
example
|
|
1242
|
+
{ "EXAMPLE:"; echo=2;
|
|
1243
|
+
ring R=0,(x,y),ds;
|
|
1244
|
+
poly t=x5+x2y2+y5;
|
|
1245
|
+
endvfilt(vfilt(t));
|
|
1246
|
+
}
|
|
1247
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1248
|
+
|
|
1249
|
+
proc sppnf(list sp)
|
|
1250
|
+
"USAGE: sppnf(list(a,w[,m])); ideal a, intvec w, intvec m
|
|
1251
|
+
ASSUME: ncols(a)==size(w)==size(m)
|
|
1252
|
+
RETURN: order (a[i][,w[i]]) with multiplicity m[i] lexicographically
|
|
1253
|
+
EXAMPLE: example sppnf; shows examples
|
|
1254
|
+
"
|
|
1255
|
+
{
|
|
1256
|
+
ideal a=sp[1];
|
|
1257
|
+
intvec w=sp[2];
|
|
1258
|
+
int n=ncols(a);
|
|
1259
|
+
intvec m;
|
|
1260
|
+
list V;
|
|
1261
|
+
module v;
|
|
1262
|
+
int i,j;
|
|
1263
|
+
for(i=3;i<=size(sp);i++)
|
|
1264
|
+
{
|
|
1265
|
+
if(typeof(sp[i])=="intvec")
|
|
1266
|
+
{
|
|
1267
|
+
m=sp[i];
|
|
1268
|
+
}
|
|
1269
|
+
if(typeof(sp[i])=="module")
|
|
1270
|
+
{
|
|
1271
|
+
v=sp[i];
|
|
1272
|
+
for(j=n;j>=1;j--)
|
|
1273
|
+
{
|
|
1274
|
+
V[j]=module(v[j]);
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
if(typeof(sp[i])=="list")
|
|
1278
|
+
{
|
|
1279
|
+
V=sp[i];
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
if(m==0)
|
|
1283
|
+
{
|
|
1284
|
+
for(i=n;i>=1;i--)
|
|
1285
|
+
{
|
|
1286
|
+
m[i]=1;
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
int k;
|
|
1291
|
+
ideal a0;
|
|
1292
|
+
intvec w0,m0;
|
|
1293
|
+
list V0;
|
|
1294
|
+
number a1;
|
|
1295
|
+
int w1,m1;
|
|
1296
|
+
for(i=n;i>=1;i--)
|
|
1297
|
+
{
|
|
1298
|
+
if(m[i]!=0)
|
|
1299
|
+
{
|
|
1300
|
+
for(j=i-1;j>=1;j--)
|
|
1301
|
+
{
|
|
1302
|
+
if(m[j]!=0)
|
|
1303
|
+
{
|
|
1304
|
+
if(number(a[i])>number(a[j])||
|
|
1305
|
+
(number(a[i])==number(a[j])&&w[i]<w[j]))
|
|
1306
|
+
{
|
|
1307
|
+
a1=number(a[i]);
|
|
1308
|
+
a[i]=a[j];
|
|
1309
|
+
a[j]=a1;
|
|
1310
|
+
w1=w[i];
|
|
1311
|
+
w[i]=w[j];
|
|
1312
|
+
w[j]=w1;
|
|
1313
|
+
m1=m[i];
|
|
1314
|
+
m[i]=m[j];
|
|
1315
|
+
m[j]=m1;
|
|
1316
|
+
if(size(V)>0)
|
|
1317
|
+
{
|
|
1318
|
+
v=V[i];
|
|
1319
|
+
V[i]=V[j];
|
|
1320
|
+
V[j]=v;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
if(number(a[i])==number(a[j])&&w[i]==w[j])
|
|
1324
|
+
{
|
|
1325
|
+
m[i]=m[i]+m[j];
|
|
1326
|
+
m[j]=0;
|
|
1327
|
+
if(size(V)>0)
|
|
1328
|
+
{
|
|
1329
|
+
V[i]=V[i]+V[j];
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
k++;
|
|
1335
|
+
a0[k]=a[i];
|
|
1336
|
+
w0[k]=w[i];
|
|
1337
|
+
m0[k]=m[i];
|
|
1338
|
+
if(size(V)>0)
|
|
1339
|
+
{
|
|
1340
|
+
V0[k]=V[i];
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
if(size(V0)>0)
|
|
1346
|
+
{
|
|
1347
|
+
n=size(V0);
|
|
1348
|
+
module U=std(V0[n]);
|
|
1349
|
+
for(i=n-1;i>=1;i--)
|
|
1350
|
+
{
|
|
1351
|
+
V0[i]=simplify(reduce(V0[i],U),1);
|
|
1352
|
+
if(i>=2)
|
|
1353
|
+
{
|
|
1354
|
+
U=std(U+V0[i]);
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
if(k>0)
|
|
1360
|
+
{
|
|
1361
|
+
sp=a0,w0,m0;
|
|
1362
|
+
if(size(V0)>0)
|
|
1363
|
+
{
|
|
1364
|
+
sp[4]=V0;
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
return(sp);
|
|
1368
|
+
}
|
|
1369
|
+
example
|
|
1370
|
+
{ "EXAMPLE:"; echo=2;
|
|
1371
|
+
ring R=0,(x,y),ds;
|
|
1372
|
+
list sp=list(ideal(-1/2,-3/10,-3/10,-1/10,-1/10,0,1/10,1/10,3/10,3/10,1/2),
|
|
1373
|
+
intvec(2,1,1,1,1,1,1,1,1,1,0));
|
|
1374
|
+
sppprint(sppnf(sp));
|
|
1375
|
+
}
|
|
1376
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1377
|
+
|
|
1378
|
+
proc sppprint(list spp)
|
|
1379
|
+
"USAGE: sppprint(spp); list spp
|
|
1380
|
+
RETURN: string s; spectral pairs spp
|
|
1381
|
+
EXAMPLE: example sppprint; shows examples
|
|
1382
|
+
"
|
|
1383
|
+
{
|
|
1384
|
+
string s;
|
|
1385
|
+
for(int i=1;i<size(spp[3]);i++)
|
|
1386
|
+
{
|
|
1387
|
+
s=s+"(("+string(spp[1][i])+","+string(spp[2][i])+"),"
|
|
1388
|
+
+string(spp[3][i])+"),";
|
|
1389
|
+
}
|
|
1390
|
+
s=s+"(("+string(spp[1][i])+","+string(spp[2][i])+"),"+string(spp[3][i])+")";
|
|
1391
|
+
return(s);
|
|
1392
|
+
}
|
|
1393
|
+
example
|
|
1394
|
+
{ "EXAMPLE:"; echo=2;
|
|
1395
|
+
ring R=0,(x,y),ds;
|
|
1396
|
+
list spp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(2,1,1,1,1,1,0),
|
|
1397
|
+
intvec(1,2,2,1,2,2,1));
|
|
1398
|
+
sppprint(spp);
|
|
1399
|
+
}
|
|
1400
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1401
|
+
|
|
1402
|
+
proc spadd(list sp1,list sp2)
|
|
1403
|
+
"USAGE: spadd(sp1,sp2); list sp1, list sp2
|
|
1404
|
+
RETURN: list sp; sum of spectra sp1 and sp2
|
|
1405
|
+
EXAMPLE: example spadd; shows examples
|
|
1406
|
+
"
|
|
1407
|
+
{
|
|
1408
|
+
ideal s;
|
|
1409
|
+
intvec m;
|
|
1410
|
+
int i,i1,i2=1,1,1;
|
|
1411
|
+
while(i1<=size(sp1[2])||i2<=size(sp2[2]))
|
|
1412
|
+
{
|
|
1413
|
+
if(i1<=size(sp1[2]))
|
|
1414
|
+
{
|
|
1415
|
+
if(i2<=size(sp2[2]))
|
|
1416
|
+
{
|
|
1417
|
+
if(number(sp1[1][i1])<number(sp2[1][i2]))
|
|
1418
|
+
{
|
|
1419
|
+
s[i]=sp1[1][i1];
|
|
1420
|
+
m[i]=sp1[2][i1];
|
|
1421
|
+
i++;
|
|
1422
|
+
i1++;
|
|
1423
|
+
}
|
|
1424
|
+
else
|
|
1425
|
+
{
|
|
1426
|
+
if(number(sp1[1][i1])>number(sp2[1][i2]))
|
|
1427
|
+
{
|
|
1428
|
+
s[i]=sp2[1][i2];
|
|
1429
|
+
m[i]=sp2[2][i2];
|
|
1430
|
+
i++;
|
|
1431
|
+
i2++;
|
|
1432
|
+
}
|
|
1433
|
+
else
|
|
1434
|
+
{
|
|
1435
|
+
if(sp1[2][i1]+sp2[2][i2]!=0)
|
|
1436
|
+
{
|
|
1437
|
+
s[i]=sp1[1][i1];
|
|
1438
|
+
m[i]=sp1[2][i1]+sp2[2][i2];
|
|
1439
|
+
i++;
|
|
1440
|
+
}
|
|
1441
|
+
i1++;
|
|
1442
|
+
i2++;
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
else
|
|
1447
|
+
{
|
|
1448
|
+
s[i]=sp1[1][i1];
|
|
1449
|
+
m[i]=sp1[2][i1];
|
|
1450
|
+
i++;
|
|
1451
|
+
i1++;
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
else
|
|
1455
|
+
{
|
|
1456
|
+
s[i]=sp2[1][i2];
|
|
1457
|
+
m[i]=sp2[2][i2];
|
|
1458
|
+
i++;
|
|
1459
|
+
i2++;
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
return(list(s,m));
|
|
1463
|
+
}
|
|
1464
|
+
example
|
|
1465
|
+
{ "EXAMPLE:"; echo=2;
|
|
1466
|
+
ring R=0,(x,y),ds;
|
|
1467
|
+
list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1468
|
+
spprint(sp1);
|
|
1469
|
+
list sp2=list(ideal(-1/6,1/6),intvec(1,1));
|
|
1470
|
+
spprint(sp2);
|
|
1471
|
+
spprint(spadd(sp1,sp2));
|
|
1472
|
+
}
|
|
1473
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1474
|
+
|
|
1475
|
+
proc spsub(list sp1,list sp2)
|
|
1476
|
+
"USAGE: spsub(sp1,sp2); list sp1, list sp2
|
|
1477
|
+
RETURN: list sp; difference of spectra sp1 and sp2
|
|
1478
|
+
EXAMPLE: example spsub; shows examples
|
|
1479
|
+
"
|
|
1480
|
+
{
|
|
1481
|
+
return(spadd(sp1,spmul(sp2,-1)));
|
|
1482
|
+
}
|
|
1483
|
+
example
|
|
1484
|
+
{ "EXAMPLE:"; echo=2;
|
|
1485
|
+
ring R=0,(x,y),ds;
|
|
1486
|
+
list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1487
|
+
spprint(sp1);
|
|
1488
|
+
list sp2=list(ideal(-1/6,1/6),intvec(1,1));
|
|
1489
|
+
spprint(sp2);
|
|
1490
|
+
spprint(spsub(sp1,sp2));
|
|
1491
|
+
}
|
|
1492
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1493
|
+
|
|
1494
|
+
proc spmul(list #)
|
|
1495
|
+
"USAGE: spmul(sp0,k); list sp0, int[vec] k
|
|
1496
|
+
RETURN: list sp; linear combination of spectra sp0 with coefficients k
|
|
1497
|
+
EXAMPLE: example spmul; shows examples
|
|
1498
|
+
"
|
|
1499
|
+
{
|
|
1500
|
+
if(size(#)==2)
|
|
1501
|
+
{
|
|
1502
|
+
if(typeof(#[1])=="list")
|
|
1503
|
+
{
|
|
1504
|
+
if(typeof(#[2])=="int")
|
|
1505
|
+
{
|
|
1506
|
+
return(list(#[1][1],#[1][2]*#[2]));
|
|
1507
|
+
}
|
|
1508
|
+
if(typeof(#[2])=="intvec")
|
|
1509
|
+
{
|
|
1510
|
+
list sp0=list(ideal(0),intvec(0));
|
|
1511
|
+
for(int i=size(#[2]);i>=1;i--)
|
|
1512
|
+
{
|
|
1513
|
+
sp0=spadd(sp0,spmul(#[1][i],#[2][i]));
|
|
1514
|
+
}
|
|
1515
|
+
return(sp0);
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
return(list(ideal(),intvec(0)));
|
|
1520
|
+
}
|
|
1521
|
+
example
|
|
1522
|
+
{ "EXAMPLE:"; echo=2;
|
|
1523
|
+
ring R=0,(x,y),ds;
|
|
1524
|
+
list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1525
|
+
spprint(sp);
|
|
1526
|
+
spprint(spmul(sp,2));
|
|
1527
|
+
list sp1=list(ideal(-1/6,1/6),intvec(1,1));
|
|
1528
|
+
spprint(sp1);
|
|
1529
|
+
list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
|
|
1530
|
+
spprint(sp2);
|
|
1531
|
+
spprint(spmul(list(sp1,sp2),intvec(1,2)));
|
|
1532
|
+
}
|
|
1533
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1534
|
+
|
|
1535
|
+
proc spissemicont(list sp,list #)
|
|
1536
|
+
"USAGE: spissemicont(sp[,1]); list sp, int opt
|
|
1537
|
+
RETURN:
|
|
1538
|
+
@format
|
|
1539
|
+
int k=
|
|
1540
|
+
1; if sum of sp is positive on all intervals [a,a+1) [and (a,a+1)]
|
|
1541
|
+
0; if sum of sp is negative on some interval [a,a+1) [or (a,a+1)]
|
|
1542
|
+
@end format
|
|
1543
|
+
EXAMPLE: example spissemicont; shows examples
|
|
1544
|
+
"
|
|
1545
|
+
{
|
|
1546
|
+
int opt=0;
|
|
1547
|
+
if(size(#)>0)
|
|
1548
|
+
{
|
|
1549
|
+
if(typeof(#[1])=="int")
|
|
1550
|
+
{
|
|
1551
|
+
opt=1;
|
|
1552
|
+
}
|
|
1553
|
+
}
|
|
1554
|
+
int i,j,k;
|
|
1555
|
+
i=1;
|
|
1556
|
+
while(i<=size(sp[2])-1)
|
|
1557
|
+
{
|
|
1558
|
+
j=i+1;
|
|
1559
|
+
k=0;
|
|
1560
|
+
while(j+1<=size(sp[2])&&number(sp[1][j])<=number(sp[1][i])+1)
|
|
1561
|
+
{
|
|
1562
|
+
if(opt==0||number(sp[1][j])<number(sp[1][i])+1)
|
|
1563
|
+
{
|
|
1564
|
+
k=k+sp[2][j];
|
|
1565
|
+
}
|
|
1566
|
+
j++;
|
|
1567
|
+
}
|
|
1568
|
+
if(j==size(sp[2])&&number(sp[1][j])<=number(sp[1][i])+1)
|
|
1569
|
+
{
|
|
1570
|
+
if(opt==0||number(sp[1][j])<number(sp[1][i])+1)
|
|
1571
|
+
{
|
|
1572
|
+
k=k+sp[2][j];
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
if(k<0)
|
|
1576
|
+
{
|
|
1577
|
+
return(0);
|
|
1578
|
+
}
|
|
1579
|
+
i++;
|
|
1580
|
+
}
|
|
1581
|
+
return(1);
|
|
1582
|
+
}
|
|
1583
|
+
example
|
|
1584
|
+
{ "EXAMPLE:"; echo=2;
|
|
1585
|
+
ring R=0,(x,y),ds;
|
|
1586
|
+
list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1587
|
+
spprint(sp1);
|
|
1588
|
+
list sp2=list(ideal(-1/6,1/6),intvec(1,1));
|
|
1589
|
+
spprint(sp2);
|
|
1590
|
+
spissemicont(spsub(sp1,spmul(sp2,3)));
|
|
1591
|
+
spissemicont(spsub(sp1,spmul(sp2,4)));
|
|
1592
|
+
}
|
|
1593
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1594
|
+
|
|
1595
|
+
proc spsemicont(list sp0,list sp,list #)
|
|
1596
|
+
"USAGE: spsemicont(sp0,sp,k[,1]); list sp0, list sp
|
|
1597
|
+
RETURN:
|
|
1598
|
+
@format
|
|
1599
|
+
list l;
|
|
1600
|
+
intvec l[i]; if the spectra sp0 occur with multiplicities k
|
|
1601
|
+
in a deformation of a [quasihomogeneous] singularity
|
|
1602
|
+
with spectrum sp then k<=l[i]
|
|
1603
|
+
@end format
|
|
1604
|
+
EXAMPLE: example spsemicont; shows examples
|
|
1605
|
+
"
|
|
1606
|
+
{
|
|
1607
|
+
list l,l0;
|
|
1608
|
+
int i,j,k;
|
|
1609
|
+
while(spissemicont(sp0,#))
|
|
1610
|
+
{
|
|
1611
|
+
if(size(sp)>1)
|
|
1612
|
+
{
|
|
1613
|
+
l0=spsemicont(sp0,list(sp[1..size(sp)-1]));
|
|
1614
|
+
for(i=1;i<=size(l0);i++)
|
|
1615
|
+
{
|
|
1616
|
+
if(size(l)>0)
|
|
1617
|
+
{
|
|
1618
|
+
j=1;
|
|
1619
|
+
while(j<size(l)&&l[j]!=l0[i])
|
|
1620
|
+
{
|
|
1621
|
+
j++;
|
|
1622
|
+
}
|
|
1623
|
+
if(l[j]==l0[i])
|
|
1624
|
+
{
|
|
1625
|
+
l[j][size(sp)]=k;
|
|
1626
|
+
}
|
|
1627
|
+
else
|
|
1628
|
+
{
|
|
1629
|
+
l0[i][size(sp)]=k;
|
|
1630
|
+
l=l+list(l0[i]);
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
else
|
|
1634
|
+
{
|
|
1635
|
+
l=l0;
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
sp0=spsub(sp0,sp[size(sp)]);
|
|
1640
|
+
k++;
|
|
1641
|
+
}
|
|
1642
|
+
if(size(sp)>1)
|
|
1643
|
+
{
|
|
1644
|
+
return(l);
|
|
1645
|
+
}
|
|
1646
|
+
else
|
|
1647
|
+
{
|
|
1648
|
+
return(list(intvec(k-1)));
|
|
1649
|
+
}
|
|
1650
|
+
}
|
|
1651
|
+
example
|
|
1652
|
+
{ "EXAMPLE:"; echo=2;
|
|
1653
|
+
ring R=0,(x,y),ds;
|
|
1654
|
+
list sp0=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1655
|
+
spprint(sp0);
|
|
1656
|
+
list sp1=list(ideal(-1/6,1/6),intvec(1,1));
|
|
1657
|
+
spprint(sp1);
|
|
1658
|
+
list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1));
|
|
1659
|
+
spprint(sp2);
|
|
1660
|
+
list sp=sp1,sp2;
|
|
1661
|
+
list l=spsemicont(sp0,sp);
|
|
1662
|
+
l;
|
|
1663
|
+
spissemicont(spsub(sp0,spmul(sp,l[1])));
|
|
1664
|
+
spissemicont(spsub(sp0,spmul(sp,l[1]-1)));
|
|
1665
|
+
spissemicont(spsub(sp0,spmul(sp,l[1]+1)));
|
|
1666
|
+
}
|
|
1667
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1668
|
+
|
|
1669
|
+
proc spmilnor(list sp)
|
|
1670
|
+
"USAGE: spmilnor(sp); list sp
|
|
1671
|
+
RETURN: int mu; Milnor number of spectrum sp
|
|
1672
|
+
EXAMPLE: example spmilnor; shows examples
|
|
1673
|
+
"
|
|
1674
|
+
{
|
|
1675
|
+
return(sum(sp[2]));
|
|
1676
|
+
}
|
|
1677
|
+
example
|
|
1678
|
+
{ "EXAMPLE:"; echo=2;
|
|
1679
|
+
ring R=0,(x,y),ds;
|
|
1680
|
+
list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1681
|
+
spprint(sp);
|
|
1682
|
+
spmilnor(sp);
|
|
1683
|
+
}
|
|
1684
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1685
|
+
|
|
1686
|
+
proc spgeomgenus(list sp)
|
|
1687
|
+
"USAGE: spgeomgenus(sp); list sp
|
|
1688
|
+
RETURN: int g; geometrical genus of spectrum sp
|
|
1689
|
+
EXAMPLE: example spgeomgenus; shows examples
|
|
1690
|
+
"
|
|
1691
|
+
{
|
|
1692
|
+
int g=0;
|
|
1693
|
+
int i=1;
|
|
1694
|
+
while(i+1<=size(sp[2])&&number(sp[1][i])<=number(0))
|
|
1695
|
+
{
|
|
1696
|
+
g=g+sp[2][i];
|
|
1697
|
+
i++;
|
|
1698
|
+
}
|
|
1699
|
+
if(i==size(sp[2])&&number(sp[1][i])<=number(0))
|
|
1700
|
+
{
|
|
1701
|
+
g=g+sp[2][i];
|
|
1702
|
+
}
|
|
1703
|
+
return(g);
|
|
1704
|
+
}
|
|
1705
|
+
example
|
|
1706
|
+
{ "EXAMPLE:"; echo=2;
|
|
1707
|
+
ring R=0,(x,y),ds;
|
|
1708
|
+
list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1709
|
+
spprint(sp);
|
|
1710
|
+
spgeomgenus(sp);
|
|
1711
|
+
}
|
|
1712
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1713
|
+
|
|
1714
|
+
proc spgamma(list sp)
|
|
1715
|
+
"USAGE: spgamma(sp); list sp
|
|
1716
|
+
RETURN: number gamma; gamma invariant of spectrum sp
|
|
1717
|
+
EXAMPLE: example spgamma; shows examples
|
|
1718
|
+
"
|
|
1719
|
+
{
|
|
1720
|
+
int i,j;
|
|
1721
|
+
number g=0;
|
|
1722
|
+
for(i=1;i<=ncols(sp[1]);i++)
|
|
1723
|
+
{
|
|
1724
|
+
for(j=1;j<=sp[2][i];j++)
|
|
1725
|
+
{
|
|
1726
|
+
g=g+(number(sp[1][i])-number(nvars(basering)-2)/2)^2;
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
g=-g/4+sum(sp[2])*number(sp[1][ncols(sp[1])]-sp[1][1])/48;
|
|
1730
|
+
return(g);
|
|
1731
|
+
}
|
|
1732
|
+
example
|
|
1733
|
+
{ "EXAMPLE:"; echo=2;
|
|
1734
|
+
ring R=0,(x,y),ds;
|
|
1735
|
+
list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1));
|
|
1736
|
+
spprint(sp);
|
|
1737
|
+
spgamma(sp);
|
|
1738
|
+
}
|
|
1739
|
+
///////////////////////////////////////////////////////////////////////////////
|