passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.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-aarch64-linux-gnu.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.libs/libSingular-4-6a2a8666.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-ac579979.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-66e33516.4.1.so +0 -0
- passagemath_singular.libs/libflint-81de1160.so.21.0.0 +0 -0
- passagemath_singular.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-e3525837.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
- passagemath_singular.libs/libntl-0043a3a2.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-06512335.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-cb7246b5.4.1.so +0 -0
- passagemath_singular.libs/libreadline-28330744.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-8c425241.4.1.so +0 -0
- passagemath_singular.libs/libtinfo-f81c2d16.so.6.3 +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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-314-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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-aarch64-linux-gnu.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,1211 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="iversion dmodideal.lib 4.1.2.0 Feb_2019 "; // $Id: 635e88d50668a6d4e42149f5c51a7d95fa729447 $
|
|
3
|
+
category="Noncommutative";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: dmodideal.lib Algorithms for Bernstein-Sato ideals of morphisms
|
|
6
|
+
AUTHORS: Robert Loew, robert.loew at rwth-aachen.de
|
|
7
|
+
Viktor Levandovskyy, levandov at math.rwth-aachen.de
|
|
8
|
+
Jorge Martin Morales, jorge at unizar.es
|
|
9
|
+
|
|
10
|
+
OVERVIEW:
|
|
11
|
+
Let K be a field of characteristic 0. Given a polynomial ring
|
|
12
|
+
R = K[x_1,...,x_n] and a map, given by polynomials F_1,...,F_r from R,
|
|
13
|
+
one is interested in the R[1/(F_1*...*F_r)]-module of rank one, generated by
|
|
14
|
+
the symbol F^s=F_1^(s_1)*...*F_r^(s_r) for symbolic discrete variables s_1,...,s_r.
|
|
15
|
+
This module R[1/(F_1*...*F_r)]*F^s has a structure of a D(R)[s_1,...,s_r]-module, where D(R)
|
|
16
|
+
is an n-th Weyl algebra K<x_1,...,x_n,d_1,...,d_n | d_j x_j = x_j d_j +1> and
|
|
17
|
+
D(R)[s] := D(R) tensored with K[s]:=K[s_1,...,s_r] over K.
|
|
18
|
+
We often write just D for D(R) and D[s] for D(R)[s].
|
|
19
|
+
|
|
20
|
+
One is interested in the computation of the following data:
|
|
21
|
+
@*- Ann_{D[s]} F^s, the annihilator of F^s in D[s]; see annihilatorMultiFs
|
|
22
|
+
@*- Ann^{1}_{D[s]} F^s, the logarithmic annihilator of F^s in D[s]; see annfsLogIdeal
|
|
23
|
+
@*- several kinds of global Bernstein-Sato ideals in K[s],
|
|
24
|
+
cf. (CU) and (Bud12); see BernsteinSatoIdeal and BSidealFromAnn
|
|
25
|
+
@*- Ann_{D} F^alpha for alpha from K^r, the annihilator of F^alpha in D; see annfalphaI
|
|
26
|
+
@*- sub- and over-ideals, bounding the Bernstein-Sato ideal; see BFBoundsBudur
|
|
27
|
+
|
|
28
|
+
REFERENCES:
|
|
29
|
+
(BM) the Ann F^s algorithm by Briancon and Maisonobe (Remarques sur
|
|
30
|
+
l'ideal de Bernstein associe a des polynomes, preprint, 2002)@*
|
|
31
|
+
(LM08) V. Levandovskyy and J. Martin-Morales, ISSAC 2008@*
|
|
32
|
+
(CU) Castro and Ucha, On the computation of Bernstein-Sato ideals, JSC 2005@*
|
|
33
|
+
(SST) Saito, Sturmfels, Takayama 'Groebner Deformations of Hypergeometric
|
|
34
|
+
Differential Equations', Springer, 2000@*
|
|
35
|
+
(Bud12) N. Budur, Bernstein-Sato ideals and local systems, Annales de
|
|
36
|
+
l'Institut Fourier, Volume 65 (2015) no. 2@*
|
|
37
|
+
(OT99) T. Oaku and N. Takayama, An algorithm for de Rham cohomology groups of
|
|
38
|
+
the complement of an affine variety via D-module computation,
|
|
39
|
+
Journal of Pure and Applied Algebra, 1999
|
|
40
|
+
|
|
41
|
+
PROCEDURES:
|
|
42
|
+
annfsLogIdeal(F); compute the logarithmic annihilator Ann^(1) F^s in D
|
|
43
|
+
annihilatorMultiFs(F[,eng,us,ord]); compute the annihilator Ann F^s in D
|
|
44
|
+
BSidealFromAnn(F, @R [,eng,met]); compute several kinds of Bernstein-Sato ideals, given Ann F^s
|
|
45
|
+
BernsteinSatoIdeal(F [,eng,met,us]); compute several kinds of Bernstein-Sato ideals, given only F
|
|
46
|
+
BFBoundsBudur(F,m); compute upper and lower bounds of several kinds of Bernstein-Sato ideals with the method of (Bud12)
|
|
47
|
+
annfalphaI(f,alpha); compute Ann F^alpha in D, where alpha is an ideal from the ground field
|
|
48
|
+
extractS(I,r); give I as ideal in the commutative polynomial ring in the first r variables
|
|
49
|
+
|
|
50
|
+
SEE ALSO: dmod_lib, dmodapp_lib, dmodloc_lib, gmssing_lib, bfun_lib
|
|
51
|
+
|
|
52
|
+
KEYWORDS: D-module; Bernstein-Sato ideal; global Bernstein-Sato ideal;
|
|
53
|
+
D-module structure; left annihilator ideal; Weyl algebra; logarithmic annihilator ideal
|
|
54
|
+
";
|
|
55
|
+
|
|
56
|
+
LIB "dmod.lib";
|
|
57
|
+
LIB "dmodloc.lib";
|
|
58
|
+
LIB "ncpreim.lib"; //for eliminateNC
|
|
59
|
+
|
|
60
|
+
/* older text by Robert: now merged with the description
|
|
61
|
+
Guide:
|
|
62
|
+
@* - Ann F^s=Ann F_1^(s_1)*...*F_r^(s_r) can be computed by annihilatorMultiFs
|
|
63
|
+
@* - the global Bernstein-Sato ideal can be computed by BernsteinSatoIdeal
|
|
64
|
+
@* - Ann F^alpha for alpha from K^r can be computed by annfalphaI
|
|
65
|
+
@* - if several Bernstein-Sato ideals of the same ideal need to be computed,
|
|
66
|
+
@* it may be useful to apply annihilatorMultiFs once and afterwards use the
|
|
67
|
+
@* result for several calls of BSidealFromAnn
|
|
68
|
+
@* - if the exact computation of the Bernstein-Sato ideal does not terminate,
|
|
69
|
+
@* the use of BFBoundsBudur may be successful
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
/* from dmodloc.lib */
|
|
73
|
+
static proc safeVarName (string s)
|
|
74
|
+
"
|
|
75
|
+
USAGE: safeVarName(s); s string
|
|
76
|
+
RETURN: string, returns s if s is not the name of a par/var of basering
|
|
77
|
+
and `@' + s otherwise
|
|
78
|
+
EXAMPLE: example safeVarName; shows examples
|
|
79
|
+
"
|
|
80
|
+
{
|
|
81
|
+
string S = "," + charstr(basering) + "," + varstr(basering) + ",";
|
|
82
|
+
s = "," + s + ",";
|
|
83
|
+
while (find(S,s) <> 0)
|
|
84
|
+
{
|
|
85
|
+
s[1] = "@";
|
|
86
|
+
s = "," + s;
|
|
87
|
+
}
|
|
88
|
+
s = s[2..size(s)-1];
|
|
89
|
+
return(s);
|
|
90
|
+
}
|
|
91
|
+
example
|
|
92
|
+
{
|
|
93
|
+
"EXAMPLE:"; echo = 2;
|
|
94
|
+
ring r = (0,a),(w,@w,x,y),dp;
|
|
95
|
+
safeVarName("a");
|
|
96
|
+
safeVarName("x");
|
|
97
|
+
safeVarName("z");
|
|
98
|
+
safeVarName("w");
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
static proc ksxD(ideal F)
|
|
103
|
+
"USAGE: ksxD(F); F an ideal, call from a polynomial ring
|
|
104
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
105
|
+
RETURN: ring
|
|
106
|
+
PURPOSE: returns the ring k[_s,_x,_D] needed for annfs etc.
|
|
107
|
+
"
|
|
108
|
+
{
|
|
109
|
+
int ppl = printlevel-voice+2;
|
|
110
|
+
def save = basering;
|
|
111
|
+
int N = nvars(basering);
|
|
112
|
+
//if F has some generators which are zero, int P = ncols(F);
|
|
113
|
+
int P = size(F);
|
|
114
|
+
if (P == 0)
|
|
115
|
+
{
|
|
116
|
+
ERROR("zero ideal in the input");
|
|
117
|
+
}
|
|
118
|
+
P = ncols(F);
|
|
119
|
+
int Nnew = 2*N+P;
|
|
120
|
+
int i,j;
|
|
121
|
+
string s;
|
|
122
|
+
list RL = ringlist(basering);
|
|
123
|
+
list L, Lord;
|
|
124
|
+
list tmp;
|
|
125
|
+
intvec iv;
|
|
126
|
+
L[1] = RL[1]; //char
|
|
127
|
+
L[4] = RL[4]; //char, minpoly
|
|
128
|
+
// construct list of varnames
|
|
129
|
+
list Name = RL[2];
|
|
130
|
+
list RName;
|
|
131
|
+
for (j=1; j<=P; j++)
|
|
132
|
+
{
|
|
133
|
+
RName[j] = safeVarName("s("+string(j)+")");
|
|
134
|
+
}
|
|
135
|
+
// now, create the names for new vars
|
|
136
|
+
list DName;
|
|
137
|
+
for(i=1; i<=N; i++)
|
|
138
|
+
{
|
|
139
|
+
DName[i] = safeVarName("D"+Name[i]);
|
|
140
|
+
}
|
|
141
|
+
list NName = RName + Name + DName;
|
|
142
|
+
L[2] = NName;
|
|
143
|
+
// Name, Dname will be used further
|
|
144
|
+
kill NName;
|
|
145
|
+
// block ord (lp(P),dp);
|
|
146
|
+
tmp[1] = "lp"; //string
|
|
147
|
+
tmp[2] = intvec(1:P); //intvec
|
|
148
|
+
Lord[1] = tmp;
|
|
149
|
+
// continue with dp 1,1,1,1...
|
|
150
|
+
tmp[1] = "dp"; //string
|
|
151
|
+
tmp[2] = intvec(1:Nnew);
|
|
152
|
+
Lord[2] = tmp;
|
|
153
|
+
tmp[1] = "C";
|
|
154
|
+
tmp[2] = intvec(0);
|
|
155
|
+
Lord[3] = tmp;
|
|
156
|
+
tmp = 0;
|
|
157
|
+
L[3] = Lord;
|
|
158
|
+
// we are done with the list
|
|
159
|
+
def @R@ = ring(L);
|
|
160
|
+
setring @R@;
|
|
161
|
+
// add non-commutative relations
|
|
162
|
+
matrix @D[Nnew][Nnew];
|
|
163
|
+
for(i=1; i<=N; i++)
|
|
164
|
+
{
|
|
165
|
+
@D[P+i,P+N+i] = 1;
|
|
166
|
+
}
|
|
167
|
+
def @R = nc_algebra(1,@D);
|
|
168
|
+
return(@R);
|
|
169
|
+
}
|
|
170
|
+
example
|
|
171
|
+
{
|
|
172
|
+
"EXAMPLE:"; echo = 2;
|
|
173
|
+
ring R = 0,(x,y),dp;
|
|
174
|
+
ideal F = x,y,0,1;
|
|
175
|
+
ksxD(F);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
proc annfsLogIdeal(ideal F)
|
|
180
|
+
"USAGE: annfsLogIdeal(F); F an ideal
|
|
181
|
+
RETURN: ring
|
|
182
|
+
PURPOSE: compute the logarithmic annihilator of F[1]^s(1)*...*F[P]^s(P)
|
|
183
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
184
|
+
NOTE: activate the output ring with the @code{setring} command. In this ring,
|
|
185
|
+
annfsLog is the logarithmic annihilator of F^s (no Groebner basis).
|
|
186
|
+
If printlevel=1, progress debug messages will be printed,
|
|
187
|
+
if printlevel>=2, all the debug messages will be printed.
|
|
188
|
+
EXAMPLE: example annfsLogIdeal; shows examples
|
|
189
|
+
"
|
|
190
|
+
{
|
|
191
|
+
int ppl = printlevel-voice+2;
|
|
192
|
+
dbprint(ppl,"// enter annfsLogIdeal");
|
|
193
|
+
dbprint(ppl-1, F);
|
|
194
|
+
if(!isCommutative()){
|
|
195
|
+
ERROR("Expected commutative polynomial ring.");
|
|
196
|
+
}
|
|
197
|
+
def @R = ksxD(F);
|
|
198
|
+
def save = basering;
|
|
199
|
+
int N = nvars(basering);
|
|
200
|
+
//if F has some generators which are zero, int P = ncols(I);
|
|
201
|
+
int P = size(F);
|
|
202
|
+
if (P < ncols(F))
|
|
203
|
+
{
|
|
204
|
+
ERROR("//One factor is 0.");
|
|
205
|
+
}
|
|
206
|
+
P = size(F);
|
|
207
|
+
dbprint(ppl,"// adding syzygy-driven elements to the ideal");
|
|
208
|
+
// -- form the extended Jacobian matrix; do the comps over K[x]
|
|
209
|
+
module JC = module(transpose(jacob(F))); // NxP
|
|
210
|
+
for (int j=1; j<=P; j++)
|
|
211
|
+
{
|
|
212
|
+
JC[j] = JC[j] + F[j]*gen(N+j);
|
|
213
|
+
}
|
|
214
|
+
dbprint(ppl,"// computing syzygies of the extended Jacobian matrix over K[_x]");
|
|
215
|
+
dbprint(ppl-1, matrix(JC));
|
|
216
|
+
matrix SJ = transpose(syz(transpose(JC)));
|
|
217
|
+
dbprint(ppl,"// finished computing syzygies of the ext Jacobian matrix over K[_x]");
|
|
218
|
+
dbprint(ppl-1, matrix(SJ));
|
|
219
|
+
setring @R;
|
|
220
|
+
// add generators: first N comps d_i, then P comps s_j
|
|
221
|
+
matrix SJ = imap(save, SJ);
|
|
222
|
+
poly pi;
|
|
223
|
+
ideal annfsLog;
|
|
224
|
+
for (int i=1; i<=nrows(SJ); i++)
|
|
225
|
+
{
|
|
226
|
+
pi = 0;
|
|
227
|
+
for (j=1; j<=N; j++)
|
|
228
|
+
{
|
|
229
|
+
pi = pi + SJ[i,j]*var(P+N+j);
|
|
230
|
+
}
|
|
231
|
+
for (j=1; j<=P; j++)
|
|
232
|
+
{
|
|
233
|
+
pi = pi + SJ[i,N+j]*var(j);//=s(j)
|
|
234
|
+
}
|
|
235
|
+
dbprint(ppl-1, "// adding element:" + string(pi));
|
|
236
|
+
annfsLog = annfsLog, pi;
|
|
237
|
+
}
|
|
238
|
+
annfsLog = simplify(annfsLog,2);
|
|
239
|
+
// decision: GB is the wish of a user
|
|
240
|
+
//annfsLog = std(annfsLog);
|
|
241
|
+
export annfsLog;
|
|
242
|
+
dbprint(ppl,"// exit annfsLogIdeal");
|
|
243
|
+
return(@R);
|
|
244
|
+
}
|
|
245
|
+
example
|
|
246
|
+
{
|
|
247
|
+
"EXAMPLE:"; echo = 2;
|
|
248
|
+
ring R = 0,(x,y),dp;
|
|
249
|
+
ideal F = x^3+y^4+x*y^3, x;
|
|
250
|
+
def S1 = annfsLogIdeal(F);
|
|
251
|
+
setring S1;
|
|
252
|
+
annfsLog;
|
|
253
|
+
setring R; // now compare with the full annihilator
|
|
254
|
+
def S = annihilatorMultiFs(F);
|
|
255
|
+
setring S;
|
|
256
|
+
annFs;
|
|
257
|
+
lead(groebner(imap(S1,annfsLog)));
|
|
258
|
+
lead(groebner(annFs)); // and we see the difference
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
static proc annFsOrder(int order, int n, int r)
|
|
263
|
+
"USAGE: annFsOrder(ord,n,r); ord,n,r ints
|
|
264
|
+
RETURN: list
|
|
265
|
+
PURPOSE: static procedure for annihilatorMultiFs
|
|
266
|
+
computes the order used for the ring in annihilatorMultiFs
|
|
267
|
+
NOTE: ord describes the desired order from the following choices:
|
|
268
|
+
0 - 'dp'
|
|
269
|
+
1 - elimination order for x, 'dp' in the parts
|
|
270
|
+
2 - elimination order for s, 'dp' in the parts
|
|
271
|
+
3 - elimination order for x and s, 'dp' in the parts
|
|
272
|
+
4 - elimination order for x and D, 'dp' in the parts
|
|
273
|
+
(used for the further work in the Bernstein-Sato ideal)
|
|
274
|
+
n and r describe the number of components x_i/Dx_i and s_j
|
|
275
|
+
"
|
|
276
|
+
{
|
|
277
|
+
list tmp = 0;
|
|
278
|
+
list Lord = 0;
|
|
279
|
+
int i;
|
|
280
|
+
|
|
281
|
+
if(order == 0){
|
|
282
|
+
Lord = list(list("dp",2*n+r));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if(order == 1){
|
|
286
|
+
// block ord (dp(n),dp);
|
|
287
|
+
tmp[1] = "dp"; //string
|
|
288
|
+
tmp[2] = intvec(1:n); //intvec
|
|
289
|
+
Lord[1] = tmp;
|
|
290
|
+
// continue with dp 1,1,1,1...
|
|
291
|
+
tmp[1] = "dp"; //string
|
|
292
|
+
tmp[2] = intvec(1:(n+r));
|
|
293
|
+
Lord[2] = tmp;
|
|
294
|
+
tmp[1] = "C";
|
|
295
|
+
tmp[2] = intvec(0);
|
|
296
|
+
Lord[3] = tmp;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if(order == 2){
|
|
300
|
+
// "block" order ((0,0,dp),
|
|
301
|
+
// (dp,0,0),
|
|
302
|
+
// (0,dp,0))
|
|
303
|
+
tmp[1] = "M"; //string
|
|
304
|
+
|
|
305
|
+
//first r lines of the matrix
|
|
306
|
+
tmp[2] = intvec((0:2*n),(1:r)); //intvec
|
|
307
|
+
for(i=1; i<r; i++){
|
|
308
|
+
tmp[2] = intvec(tmp[2],(0:(2*n+r-i)),intvec(-1));
|
|
309
|
+
if(i>1){
|
|
310
|
+
tmp[2] = intvec(tmp[2],(0:(i-1)));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//next n lines of the matrix
|
|
314
|
+
tmp[2] = intvec(tmp[2],(1:n),(0:(n+r))); //intvec
|
|
315
|
+
for(i=1; i<n; i++){
|
|
316
|
+
tmp[2] = intvec(tmp[2],(0:(n-i)),intvec(-1), intvec(0:(n+r+i-1)));
|
|
317
|
+
}
|
|
318
|
+
//last n lines of the matrix
|
|
319
|
+
tmp[2] = intvec(tmp[2],(0:n),(1:n),(0:r)); //intvec
|
|
320
|
+
for(i=1; i<n; i++){
|
|
321
|
+
tmp[2] = intvec(tmp[2],(0:(2*n-i)),intvec(-1), intvec(0:(r+i-1)));
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
Lord[1] = tmp;
|
|
325
|
+
tmp[1] = "C";
|
|
326
|
+
tmp[2] = intvec(0);
|
|
327
|
+
Lord[2] = tmp;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
if(order == 3){
|
|
331
|
+
// "block" order ((dp,0,0),
|
|
332
|
+
// (0,0,dp),
|
|
333
|
+
// (0,dp,0))
|
|
334
|
+
tmp[1] = "M"; //string
|
|
335
|
+
|
|
336
|
+
//first r lines of the matrix
|
|
337
|
+
tmp[2] = intvec((1:n),(0:(n+r))); //intvec
|
|
338
|
+
for(i=1; i<n; i++){
|
|
339
|
+
tmp[2] = intvec(tmp[2],(0:(n-i)),intvec(-1), intvec(0:(n+r+i-1)));
|
|
340
|
+
}
|
|
341
|
+
//next n lines of the matrix
|
|
342
|
+
tmp[2] = intvec(tmp[2],(0:2*n),(1:r)); //intvec
|
|
343
|
+
for(i=1; i<r; i++){
|
|
344
|
+
tmp[2] = intvec(tmp[2],(0:(2*n+r-i)),intvec(-1));
|
|
345
|
+
if(i>1){
|
|
346
|
+
tmp[2] = intvec(tmp[2],(0:(i-1)));
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
//last n lines of the matrix
|
|
350
|
+
tmp[2] = intvec(tmp[2],(0:n),(1:n),(0:r)); //intvec
|
|
351
|
+
for(i=1; i<n; i++){
|
|
352
|
+
tmp[2] = intvec(tmp[2],(0:(2*n-i)),intvec(-1), intvec(0:(r+i-1)));
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
Lord[1] = tmp;
|
|
356
|
+
tmp[1] = "C";
|
|
357
|
+
tmp[2] = intvec(0);
|
|
358
|
+
Lord[2] = tmp;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if(order == 4){
|
|
362
|
+
// block ord (dp(2*n),dp);
|
|
363
|
+
tmp[1] = "dp"; //string
|
|
364
|
+
tmp[2] = intvec(1:(2*n)); //intvec
|
|
365
|
+
Lord[1] = tmp;
|
|
366
|
+
// continue with dp 1,1,1,1...
|
|
367
|
+
tmp[1] = "dp"; //string
|
|
368
|
+
tmp[2] = intvec(1:r);
|
|
369
|
+
Lord[2] = tmp;
|
|
370
|
+
tmp[1] = "C";
|
|
371
|
+
tmp[2] = intvec(0);
|
|
372
|
+
Lord[3] = tmp;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return(Lord);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
proc annihilatorMultiFs(ideal F, list #)
|
|
380
|
+
"USAGE: annihilatorMultiFs(F [,eng,us,ord]); F an ideal, eng, us, ord optional ints
|
|
381
|
+
RETURN: ring
|
|
382
|
+
PURPOSE: compute Ann(F[1]^s(1)*...*F[P]^s(P))
|
|
383
|
+
with the multivariate algorithm by Briancon and Maisonobe.
|
|
384
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
385
|
+
NOTE: activate the output ring with the @code{setring} command. In this ring,
|
|
386
|
+
the ideal annFs is the annihilator of F[1]^s_1*..*F[P]^s_p.
|
|
387
|
+
If eng <>0, @code{std} is used for Groebner basis computations,
|
|
388
|
+
otherwise, and by default @code{slimgb} is used.
|
|
389
|
+
If us<>0, then syzygies-driven method is used additionally.
|
|
390
|
+
If specified, ord describes the desired order from the following choices:
|
|
391
|
+
0 - 'dp'
|
|
392
|
+
1 - elimination order for x, 'dp' in the parts
|
|
393
|
+
2 - elimination order for s, 'dp' in the parts
|
|
394
|
+
3 - elimination order for x and s, 'dp' in the parts
|
|
395
|
+
4 - elimination order for x and D, 'dp' in the parts
|
|
396
|
+
(used for the further work in the Bernstein-Sato ideal)
|
|
397
|
+
If printlevel=1, progress debug messages will be printed,
|
|
398
|
+
if printlevel>=2, all the debug messages will be printed.
|
|
399
|
+
EXAMPLE: example annihilatorMultiFs; shows examples
|
|
400
|
+
"
|
|
401
|
+
{
|
|
402
|
+
int ppl = printlevel - voice + 2;
|
|
403
|
+
dbprint(ppl,"// enter annihilatorMultiFs");
|
|
404
|
+
dbprint(ppl-1, F);
|
|
405
|
+
dbprint(ppl-1, #);
|
|
406
|
+
if(!isCommutative()){
|
|
407
|
+
ERROR("Expected commutative polynomial ring.");
|
|
408
|
+
}
|
|
409
|
+
int eng = 0;
|
|
410
|
+
int usesyz = 0;
|
|
411
|
+
if ( size(#)>0 )
|
|
412
|
+
{
|
|
413
|
+
if ( typeof(#[1]) == "int" )
|
|
414
|
+
{
|
|
415
|
+
eng = int(#[1]);
|
|
416
|
+
}
|
|
417
|
+
if ( size(#)>1 )
|
|
418
|
+
{
|
|
419
|
+
if ( typeof(#[2]) == "int" )
|
|
420
|
+
{
|
|
421
|
+
usesyz = int(#[2]);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
// printf("plevel :%s, voice: %s",printlevel,voice);
|
|
426
|
+
def save = basering;
|
|
427
|
+
int N = nvars(basering);
|
|
428
|
+
//if F has some generators which are zero, int P = ncols(I);
|
|
429
|
+
int P = size(F);
|
|
430
|
+
if (P < ncols(F))
|
|
431
|
+
{
|
|
432
|
+
ERROR("//One factor is 0.");
|
|
433
|
+
}
|
|
434
|
+
P = size(F);
|
|
435
|
+
if (P == 0)
|
|
436
|
+
{
|
|
437
|
+
ERROR("zero ideal in the input");
|
|
438
|
+
}
|
|
439
|
+
int Nnew = 2*N+2*P;
|
|
440
|
+
int i,j;
|
|
441
|
+
string s;
|
|
442
|
+
list RL = ringlist(basering);
|
|
443
|
+
list L, Lord;
|
|
444
|
+
list tmp;
|
|
445
|
+
intvec iv;
|
|
446
|
+
L[1] = RL[1]; //char
|
|
447
|
+
L[4] = RL[4]; //char, minpoly
|
|
448
|
+
// find new varnames
|
|
449
|
+
list Name = RL[2];
|
|
450
|
+
list RName;
|
|
451
|
+
for (j=1; j<=P; j++)
|
|
452
|
+
{
|
|
453
|
+
RName[j] = safeVarName("t("+string(j)+")");
|
|
454
|
+
RName[j+P] = safeVarName("s("+string(j)+")");
|
|
455
|
+
}
|
|
456
|
+
list DName;
|
|
457
|
+
for(i=1; i<=N; i++)
|
|
458
|
+
{
|
|
459
|
+
DName[i] = safeVarName("D"+Name[i]); //concat
|
|
460
|
+
}
|
|
461
|
+
list NName = RName + Name + DName;
|
|
462
|
+
L[2] = NName;
|
|
463
|
+
// Name, Dname will be used further
|
|
464
|
+
kill NName;
|
|
465
|
+
// block ord (lp(P),dp);
|
|
466
|
+
tmp[1] = "lp"; //string
|
|
467
|
+
tmp[2] = intvec(1:(2*P)); //intvec
|
|
468
|
+
Lord[1] = tmp;
|
|
469
|
+
// continue with dp 1,1,1,1...
|
|
470
|
+
tmp[1] = "dp"; //string
|
|
471
|
+
tmp[2] = intvec(1:Nnew);
|
|
472
|
+
Lord[2] = tmp;
|
|
473
|
+
tmp[1] = "C";
|
|
474
|
+
tmp[2] = intvec(0);
|
|
475
|
+
Lord[3] = tmp;
|
|
476
|
+
tmp = 0;
|
|
477
|
+
L[3] = Lord;
|
|
478
|
+
// we are done with the list
|
|
479
|
+
def @R@ = ring(L);
|
|
480
|
+
setring @R@;
|
|
481
|
+
matrix @D[Nnew][Nnew];
|
|
482
|
+
for (i=1; i<=P; i++)
|
|
483
|
+
{
|
|
484
|
+
@D[i,i+P] = var(i);//=t(i)
|
|
485
|
+
}
|
|
486
|
+
for(i=1; i<=N; i++)
|
|
487
|
+
{
|
|
488
|
+
@D[2*P+i,2*P+N+i] = 1;
|
|
489
|
+
}
|
|
490
|
+
// L[5] = matrix(UpOneMatrix(Nnew));
|
|
491
|
+
// L[6] = @D;
|
|
492
|
+
// @R is the non-commutative ring k<_t,_s,_x,_Dx>
|
|
493
|
+
def @R = nc_algebra(1,@D);
|
|
494
|
+
setring @R;
|
|
495
|
+
kill @R@;
|
|
496
|
+
dbprint(ppl,"// the ring @R(_t,_s,_x,_Dx) is ready");
|
|
497
|
+
dbprint(ppl-1, @R);
|
|
498
|
+
// create the ideal I which will become ann(F^s)
|
|
499
|
+
ideal F = imap(save,F);
|
|
500
|
+
ideal I = var(1)*F[1]+var(P+1);//=t(1)*F[1]+s(1)
|
|
501
|
+
for (j=2; j<=P; j++)
|
|
502
|
+
{
|
|
503
|
+
I = I, var(j)*F[j]+var(P+j);//=t(j)*F[j]+s(j)
|
|
504
|
+
}
|
|
505
|
+
poly p,q;
|
|
506
|
+
for (i=1; i<=N; i++)
|
|
507
|
+
{
|
|
508
|
+
p=0;
|
|
509
|
+
for (j=1; j<=P; j++)
|
|
510
|
+
{
|
|
511
|
+
q = var(j);//=t(j)
|
|
512
|
+
q = diff(F[j],var(2*P+i))*q;
|
|
513
|
+
p = p + q;
|
|
514
|
+
}
|
|
515
|
+
I = I, var(2*P+N+i) + p;
|
|
516
|
+
}
|
|
517
|
+
// -------- the ideal I is ready ----------
|
|
518
|
+
if (usesyz)
|
|
519
|
+
{
|
|
520
|
+
//add Ann^1(F^s) to I
|
|
521
|
+
setring save;
|
|
522
|
+
def @R@ = annfsLogIdeal(F);
|
|
523
|
+
setring @R;
|
|
524
|
+
I = I, imap(@R@, annfsLog);
|
|
525
|
+
kill @R@;
|
|
526
|
+
}
|
|
527
|
+
dbprint(ppl,"// starting the elimination of "+string(t(1..P))+" in @R");
|
|
528
|
+
dbprint(ppl-1, I);
|
|
529
|
+
ideal J = engine(I,eng);
|
|
530
|
+
// K is already ann(F^s)
|
|
531
|
+
ideal K = nselect(J,1..P);
|
|
532
|
+
kill I,J;
|
|
533
|
+
dbprint(ppl,"// all t(i) are eliminated");
|
|
534
|
+
dbprint(ppl-1, K); //K is without t(i)
|
|
535
|
+
// ----------- the ring @R2 ------------
|
|
536
|
+
// _x, _Dx,s; elim.ord for _x,_Dx.
|
|
537
|
+
// keep: N, i,j,s, tmp, RL
|
|
538
|
+
setring save;
|
|
539
|
+
Nnew = 2*N+P;
|
|
540
|
+
kill Lord, tmp, iv, RName;
|
|
541
|
+
list Lord, tmp;
|
|
542
|
+
intvec iv;
|
|
543
|
+
L[1] = RL[1]; //char
|
|
544
|
+
L[4] = RL[4]; //char, minpoly
|
|
545
|
+
// now, create the names for new var
|
|
546
|
+
for (j=1; j<=P; j++)
|
|
547
|
+
{
|
|
548
|
+
tmp[j] = safeVarName("s("+string(j)+")");
|
|
549
|
+
}
|
|
550
|
+
list safeSName = tmp; //for later use
|
|
551
|
+
// DName is defined earlier
|
|
552
|
+
list NName = Name + DName + tmp;
|
|
553
|
+
L[2] = NName;
|
|
554
|
+
tmp = 0;
|
|
555
|
+
if ( size(#)>2 ){
|
|
556
|
+
L[3] = annFsOrder(#[3],(Nnew-P) div 2,P);
|
|
557
|
+
}
|
|
558
|
+
else
|
|
559
|
+
{
|
|
560
|
+
L[3] = annFsOrder(0,(Nnew-P) div 2,P);
|
|
561
|
+
}
|
|
562
|
+
// we are done with the list. Now add a Plural part
|
|
563
|
+
def @R2@ = ring(L);
|
|
564
|
+
setring @R2@;
|
|
565
|
+
matrix @D[Nnew][Nnew];
|
|
566
|
+
for (i=1; i<=N; i++)
|
|
567
|
+
{
|
|
568
|
+
@D[i,N+i]=1;
|
|
569
|
+
}
|
|
570
|
+
def @R2 = nc_algebra(1,@D);
|
|
571
|
+
setring @R2;
|
|
572
|
+
kill @R2@;
|
|
573
|
+
dbprint(ppl,"// the ring @R2(_x,_Dx,_s) is ready");
|
|
574
|
+
dbprint(ppl-1, @R2);
|
|
575
|
+
ideal F = imap(save,F);
|
|
576
|
+
ideal annFs = imap(@R,K);
|
|
577
|
+
export annFs;
|
|
578
|
+
|
|
579
|
+
dbprint(ppl,"// exit annihilatorMultiFs");
|
|
580
|
+
return(@R2);
|
|
581
|
+
}
|
|
582
|
+
example
|
|
583
|
+
{
|
|
584
|
+
"EXAMPLE:"; echo = 2;
|
|
585
|
+
ring R = 0,(x,y),dp;
|
|
586
|
+
ideal F = x^2-y,y;
|
|
587
|
+
def S = annihilatorMultiFs(F,0,0,0);
|
|
588
|
+
setring S;
|
|
589
|
+
annFs;
|
|
590
|
+
groebner(annFs);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
proc BSidealFromAnn(ideal F, @R, list #)
|
|
594
|
+
"USAGE: BSidealFromAnn(F, @R [,eng,met]); F an ideal, @R a ring, eng, met optional ints
|
|
595
|
+
RETURN: ring
|
|
596
|
+
PURPOSE: compute several kinds of Bernstein-Sato ideals, associated to
|
|
597
|
+
f = F[1]*..*F[P], with the multivariate algorithm by Briancon and Maisonobe
|
|
598
|
+
from ann(F^s) as input.
|
|
599
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
600
|
+
@R is a ring as returned from annihilatorMultiFs.
|
|
601
|
+
NOTE: activate the output ring with the @code{setring} command. In this ring,
|
|
602
|
+
the ideal BS is a Bernstein-Sato ideal of a polynomial f = F[1]*..*F[P].
|
|
603
|
+
If eng <>0, @code{std} is used for Groebner basis computations,
|
|
604
|
+
otherwise, and by default @code{slimgb} is used.
|
|
605
|
+
If met is of type int:
|
|
606
|
+
if met <0, the B-Sigma ideal (cf. (CU)) is computed.
|
|
607
|
+
If 0 < met < P, then the ideal B_met (cf. (CU)) is computed.
|
|
608
|
+
If met is an intvec or a list of intvecs, Budurs generalized Bernstein-Sato ideal
|
|
609
|
+
associated to met is computed.
|
|
610
|
+
Otherwise, and by default, the ideal B (cf. (CU)) is computed.
|
|
611
|
+
If met is of type intvec:
|
|
612
|
+
Budurs generalized Bernstein-Sato ideal B^met_F is computed.
|
|
613
|
+
If printlevel=1, progress debug messages will be printed,
|
|
614
|
+
if printlevel>=2, all the debug messages will be printed.
|
|
615
|
+
EXAMPLE: example BSIdealFromAnn; shows examples
|
|
616
|
+
"
|
|
617
|
+
{
|
|
618
|
+
int ppl = printlevel-voice+2;
|
|
619
|
+
dbprint(ppl,"// enter BSidealFromAnn");
|
|
620
|
+
dbprint(ppl-1, F);
|
|
621
|
+
dbprint(ppl-1, @R);
|
|
622
|
+
dbprint(ppl-1, #);
|
|
623
|
+
if(!isCommutative()){
|
|
624
|
+
ERROR("Expected commutative polynomial ring.");
|
|
625
|
+
}
|
|
626
|
+
if( typeof(@R) != "ring" )
|
|
627
|
+
{
|
|
628
|
+
ERROR("The second parameter should be of type ring.");
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
int met = 0;
|
|
632
|
+
list metVecs;
|
|
633
|
+
int eng = 0;
|
|
634
|
+
if ( size(#) > 0 )
|
|
635
|
+
{
|
|
636
|
+
if ( typeof(#[1]) == "int" )
|
|
637
|
+
{
|
|
638
|
+
eng = int(#[1]);
|
|
639
|
+
}
|
|
640
|
+
if ( size(#) > 1 )
|
|
641
|
+
{
|
|
642
|
+
if ( typeof(#[2]) == "int" )
|
|
643
|
+
{
|
|
644
|
+
met = int(#[2]);
|
|
645
|
+
}
|
|
646
|
+
else{ if ( typeof(#[2]) == "intvec" )
|
|
647
|
+
{
|
|
648
|
+
metVecs = list(intvec(#[2]));
|
|
649
|
+
}
|
|
650
|
+
else{ if ( typeof(#[2]) == "list" )
|
|
651
|
+
{
|
|
652
|
+
metVecs = #[2];
|
|
653
|
+
}
|
|
654
|
+
else
|
|
655
|
+
{
|
|
656
|
+
ERROR("met does not have one of the allowed types.");
|
|
657
|
+
}}}
|
|
658
|
+
}
|
|
659
|
+
else
|
|
660
|
+
{
|
|
661
|
+
met = 0;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
else
|
|
665
|
+
{
|
|
666
|
+
met = 0;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
def save = basering;
|
|
670
|
+
int N = nvars(basering);
|
|
671
|
+
//if F has some generators which are zero, int P = ncols(I);
|
|
672
|
+
int P = size(F);
|
|
673
|
+
if (P < ncols(F))
|
|
674
|
+
{
|
|
675
|
+
ERROR("//One factor is 0.");
|
|
676
|
+
}
|
|
677
|
+
P = size(F);
|
|
678
|
+
if (P == 0)
|
|
679
|
+
{
|
|
680
|
+
ERROR("zero ideal in the input");
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
int i,j;
|
|
684
|
+
if(size(metVecs) != 0)
|
|
685
|
+
{
|
|
686
|
+
for(j=1; j<=size(metVecs); j++){
|
|
687
|
+
if(ncols(F) != size(metVecs[j]))
|
|
688
|
+
{
|
|
689
|
+
ERROR("F and met do not have the same size.");
|
|
690
|
+
}
|
|
691
|
+
for(i=1; i<=size(metVecs[j]); i++){
|
|
692
|
+
if(metVecs[j][i] < 0){
|
|
693
|
+
ERROR("met has a negative entry.");
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
list tmp;
|
|
700
|
+
for (j=1; j<=P; j++)
|
|
701
|
+
{
|
|
702
|
+
tmp[j] = safeVarName("s("+string(j)+")");
|
|
703
|
+
}
|
|
704
|
+
list safeSName = tmp;
|
|
705
|
+
|
|
706
|
+
setring @R;
|
|
707
|
+
ideal K = annFs;
|
|
708
|
+
ideal F = imap(save, F);
|
|
709
|
+
|
|
710
|
+
// add the generator given by met to K=ann(F^s)
|
|
711
|
+
if (met <0)
|
|
712
|
+
{
|
|
713
|
+
//K = K,F; // to compute Bsigma (see "On the computation of Bernstein-Sato ideals"; Castro, Ucha)
|
|
714
|
+
K = K,F;
|
|
715
|
+
dbprint(ppl,"// computing the ideal B-Sigma from Castro-Ucha");
|
|
716
|
+
}
|
|
717
|
+
if( met > 0 && met <= ncols(F))
|
|
718
|
+
{
|
|
719
|
+
dbprint(ppl,"// computing the ideal B_" + string(met) + " from Castro-Ucha");
|
|
720
|
+
K = K, F[met];
|
|
721
|
+
}
|
|
722
|
+
if ( ( met == 0 && size(metVecs) == 0) || (met > ncols(F) ) )
|
|
723
|
+
{
|
|
724
|
+
poly f=1;
|
|
725
|
+
for (j=1; j<=P; j++)
|
|
726
|
+
{
|
|
727
|
+
f = f*F[j];
|
|
728
|
+
}
|
|
729
|
+
K = K,f; // to compute B (Bernstein-Sato ideal)
|
|
730
|
+
dbprint(ppl,"// computing the ideal B from Castro-Ucha");
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
if(size(metVecs) != 0)
|
|
734
|
+
{
|
|
735
|
+
poly f;
|
|
736
|
+
for(j=1; j<=size(metVecs); j++){
|
|
737
|
+
f = 1;
|
|
738
|
+
for (i=1; i<=size(metVecs[j]); i++)
|
|
739
|
+
{
|
|
740
|
+
f = f*F[i]^metVecs[j][i];
|
|
741
|
+
}
|
|
742
|
+
K = K,f;
|
|
743
|
+
}
|
|
744
|
+
dbprint(ppl,"// computing the ideal B^(" + string(metVecs) + ") from Budur");
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// eliminate everything except for the s(i)
|
|
748
|
+
ideal K2 = eliminateNC(K,1..(nvars(basering)-P));
|
|
749
|
+
kill K;
|
|
750
|
+
dbprint(ppl-1, K2);
|
|
751
|
+
// the ring @R3 and factorize
|
|
752
|
+
ring @R3 = 0,s(1..P),dp;
|
|
753
|
+
list RL = ringlist(@R3);
|
|
754
|
+
RL[2] = safeSName;
|
|
755
|
+
@R3 = ring(RL);
|
|
756
|
+
setring(@R3);
|
|
757
|
+
|
|
758
|
+
dbprint(ppl,"// the ring @R3(_s) is ready");
|
|
759
|
+
ideal K3 = imap(@R,K2);
|
|
760
|
+
ideal BS = K3;
|
|
761
|
+
// create the ring @R4(_x,_Dx,_s) and put the result into it,
|
|
762
|
+
setring save;
|
|
763
|
+
ring @R4 = ksxD(F);
|
|
764
|
+
setring @R4;
|
|
765
|
+
|
|
766
|
+
dbprint(ppl,"// the ring @R4i(_x,_Dx,_s) is ready");
|
|
767
|
+
dbprint(ppl-1, @R4);
|
|
768
|
+
ideal K4 = imap(@R,K2);
|
|
769
|
+
intvec saveopt=option(get);
|
|
770
|
+
option(redSB);
|
|
771
|
+
dbprint(ppl,"// -4-2- the final cosmetic std");
|
|
772
|
+
K4 = engine(K4,eng); //std does the job too
|
|
773
|
+
// total cleanup
|
|
774
|
+
kill @R;
|
|
775
|
+
def BS = imap(@R3,BS);
|
|
776
|
+
export BS;
|
|
777
|
+
kill @R3;
|
|
778
|
+
ideal LD = K4;
|
|
779
|
+
export LD;
|
|
780
|
+
option(set,saveopt);
|
|
781
|
+
dbprint(ppl,"// exit BSidealFromAnn");
|
|
782
|
+
return(@R4);
|
|
783
|
+
}
|
|
784
|
+
example
|
|
785
|
+
{
|
|
786
|
+
"EXAMPLE:"; echo = 2;
|
|
787
|
+
ring R = 0,(x,y),dp;
|
|
788
|
+
ideal F = x+y,x-y,x;
|
|
789
|
+
def @R = annihilatorMultiFs(F, 0, 0, 4);
|
|
790
|
+
// first we compute the ideal B
|
|
791
|
+
def @R2 = BSidealFromAnn(F, @R, 0, 0);
|
|
792
|
+
setring @R2;
|
|
793
|
+
BS;
|
|
794
|
+
setring R;
|
|
795
|
+
// secondly we compute the ideal B_1
|
|
796
|
+
@R2 = BSidealFromAnn(F, @R, 0, 1);
|
|
797
|
+
setring @R2;
|
|
798
|
+
BS;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
proc BernsteinSatoIdeal(ideal F, list #)
|
|
802
|
+
"USAGE: BernsteinSatoIdeal(F [,eng,met,us]); F an ideal, eng, us optional ints,
|
|
803
|
+
met optional int or intvec
|
|
804
|
+
RETURN: ring
|
|
805
|
+
PURPOSE: compute two kinds of Bernstein-Sato ideals, associated to
|
|
806
|
+
f = F[1]*..*F[P], with the multivariate algorithm by Briancon and Maisonobe.
|
|
807
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
808
|
+
NOTE: activate the output ring with the @code{setring} command. In this ring,@*
|
|
809
|
+
- the ideal LD is the annihilator of F[1]^s_1*..*F[P]^s_p,@*
|
|
810
|
+
- the list or ideal BS is a Bernstein-Sato ideal of a polynomial
|
|
811
|
+
f = F[1]*..*F[P].
|
|
812
|
+
If eng <>0, @code{std} is used for Groebner basis computations,
|
|
813
|
+
otherwise, and by default @code{slimgb} is used.
|
|
814
|
+
If met <0, the B-Sigma ideal (cf. Castro and Ucha, 'On the computation of Bernstein-Sato ideals', 2005) is computed.
|
|
815
|
+
If 0 < met < P, then the ideal B_P (cf. the paper) is computed.
|
|
816
|
+
If met is an intvec, Budurs generalized Bernstein-Sato ideal
|
|
817
|
+
associated to met is computed.
|
|
818
|
+
Otherwise, and by default, the ideal B (cf. the paper) is computed.
|
|
819
|
+
If us<>0, then syzygies-driven method is used.
|
|
820
|
+
If printlevel=1, progress debug messages will be printed,
|
|
821
|
+
if printlevel>=2, all the debug messages will be printed.
|
|
822
|
+
EXAMPLE: example BernsteinSatoIdeal; shows examples
|
|
823
|
+
"
|
|
824
|
+
{
|
|
825
|
+
int ppl = printlevel-voice+2;
|
|
826
|
+
dbprint(ppl,"// enter BernsteinSatoIdeal");
|
|
827
|
+
dbprint(ppl-1, F);
|
|
828
|
+
dbprint(ppl-1, #);
|
|
829
|
+
int eng = 0;
|
|
830
|
+
int met = 0;
|
|
831
|
+
int usesyz = 0;
|
|
832
|
+
if ( size(#)>0 )
|
|
833
|
+
{
|
|
834
|
+
if ( typeof(#[1]) == "int" )
|
|
835
|
+
{
|
|
836
|
+
eng = int(#[1]);
|
|
837
|
+
}
|
|
838
|
+
if ( size(#)>1 )
|
|
839
|
+
{
|
|
840
|
+
if ( typeof(#[2]) == "int" )
|
|
841
|
+
{
|
|
842
|
+
met = int(#[2]);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
if ( size(#)>2 )
|
|
846
|
+
{
|
|
847
|
+
if ( typeof(#[3]) == "int" )
|
|
848
|
+
{
|
|
849
|
+
usesyz = int(#[3]);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
}
|
|
854
|
+
def @R = annihilatorMultiFs(F,eng,usesyz,4);
|
|
855
|
+
//If B_Sigma and trivial ideal
|
|
856
|
+
if ((met < 0) && (NF(1,std(F)) == 0)){
|
|
857
|
+
F = 1;
|
|
858
|
+
}
|
|
859
|
+
if ( size(#)>1 )
|
|
860
|
+
{
|
|
861
|
+
def @R2 = BSidealFromAnn(F, @R, eng, #[2]);
|
|
862
|
+
}
|
|
863
|
+
else
|
|
864
|
+
{
|
|
865
|
+
def @R2 = BSidealFromAnn(F, @R, eng, 0);
|
|
866
|
+
}
|
|
867
|
+
setring @R2;
|
|
868
|
+
|
|
869
|
+
LD = imap(@R,annFs);
|
|
870
|
+
|
|
871
|
+
dbprint(ppl,"// exit BernsteinSatoIdeal");
|
|
872
|
+
|
|
873
|
+
return(@R2);
|
|
874
|
+
|
|
875
|
+
}
|
|
876
|
+
example
|
|
877
|
+
{
|
|
878
|
+
"EXAMPLE:"; echo = 2;
|
|
879
|
+
ring R = 0,(x,y),dp;
|
|
880
|
+
ideal F = x^2-y,y;
|
|
881
|
+
// first we compute the ideal B:
|
|
882
|
+
def S = BernsteinSatoIdeal(F);
|
|
883
|
+
setring S;
|
|
884
|
+
BS;
|
|
885
|
+
// secondly we compute the ideal B_1:
|
|
886
|
+
setring R;
|
|
887
|
+
def S = BernsteinSatoIdeal(F,0,1);
|
|
888
|
+
setring S;
|
|
889
|
+
BS;
|
|
890
|
+
// thirdly we compute the ideal B_sigma:
|
|
891
|
+
setring R;
|
|
892
|
+
def S = BernsteinSatoIdeal(F,0,-1);
|
|
893
|
+
setring S;
|
|
894
|
+
BS;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
proc BFBoundsBudur(ideal F,intvec m)
|
|
898
|
+
"USAGE: BFBoundsBudur(F,m); F an ideal, m an intvec
|
|
899
|
+
RETURN: ring
|
|
900
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
901
|
+
PURPOSE: determine upper and lower bounds of the Bernstein-Sato ideal associated to m with
|
|
902
|
+
the method of (Bud12)
|
|
903
|
+
NOTE: The returned ring contains lists Bj, containing the Bernstein-Sato ideals
|
|
904
|
+
associated to e_j,
|
|
905
|
+
shiftedIdeals, containing the shifted ideals from (Bud12) 4.7,
|
|
906
|
+
and ideals upperBound, lowerBound which give upper bound and lower bound
|
|
907
|
+
for the Bernstein-Sato-Ideal associated to m respectively.
|
|
908
|
+
EXAMPLE: example BFBoundsBudur; shows example
|
|
909
|
+
"
|
|
910
|
+
{
|
|
911
|
+
if (!isCommutative())
|
|
912
|
+
{
|
|
913
|
+
ERROR("Basering is not commutative.");
|
|
914
|
+
}
|
|
915
|
+
if(ncols(F) != size(m))
|
|
916
|
+
{
|
|
917
|
+
ERROR("F and m do not have the same size.");
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
int ppl = printlevel - voice + 2;
|
|
921
|
+
|
|
922
|
+
ring backup = basering;
|
|
923
|
+
|
|
924
|
+
int r = ncols(F);
|
|
925
|
+
int n = nvars(basering);
|
|
926
|
+
int k;
|
|
927
|
+
int i;
|
|
928
|
+
|
|
929
|
+
//construct k[_s] and prepare map from k<_x,_d,_s> to k[_s]
|
|
930
|
+
ring ks = 0,(s(1..r)),dp;
|
|
931
|
+
setring ks;
|
|
932
|
+
//SGen will be used to map only the s(i)
|
|
933
|
+
ideal SGen;
|
|
934
|
+
SGen[2*n] = 0;
|
|
935
|
+
SGen = maxideal(1),SGen;
|
|
936
|
+
map fetchS;
|
|
937
|
+
|
|
938
|
+
ring R; //<--order of the commands important!!!
|
|
939
|
+
setring backup;
|
|
940
|
+
list Bj;
|
|
941
|
+
|
|
942
|
+
//compute the B_j
|
|
943
|
+
ring AR = annihilatorMultiFs(F);
|
|
944
|
+
dbprint(ppl,"//starting computation of Bj...");
|
|
945
|
+
for(int j=1; j<=r; j++){
|
|
946
|
+
setring backup;
|
|
947
|
+
R = BSidealFromAnn(F,AR,0,j);
|
|
948
|
+
setring ks;
|
|
949
|
+
fetchS = R,SGen;
|
|
950
|
+
Bj[j] = fetchS(BS);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
//compute the products and intersections
|
|
954
|
+
dbprint(ppl,"//computing upper bounds and lower bounds...");
|
|
955
|
+
ideal upperBound = 1;
|
|
956
|
+
ideal lowerBound = 1;
|
|
957
|
+
ideal tempIdeal;
|
|
958
|
+
//map to shift (now identity map)
|
|
959
|
+
ideal mShifted = s(1);
|
|
960
|
+
for(i=2; i<=r; i++){
|
|
961
|
+
mShifted = mShifted, s(i);
|
|
962
|
+
}
|
|
963
|
+
map shift = ks, mShifted;
|
|
964
|
+
|
|
965
|
+
list shiftedIdeals;
|
|
966
|
+
for(j=1; j<=r; j++){
|
|
967
|
+
if(m[j]>0){
|
|
968
|
+
for(k=0; k<m[j]; k++){
|
|
969
|
+
//construct tempIdeal as shift of Bj[j]
|
|
970
|
+
tempIdeal = Bj[j];
|
|
971
|
+
tempIdeal = shift(tempIdeal);
|
|
972
|
+
mShifted[j] = mShifted[j]+1;
|
|
973
|
+
shift = ks, mShifted;
|
|
974
|
+
shiftedIdeals[j] = tempIdeal;
|
|
975
|
+
upperBound = intersect(upperBound, tempIdeal);
|
|
976
|
+
lowerBound = lowerBound*tempIdeal;
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
dbprint(ppl,"B_j:");
|
|
982
|
+
dbprint(ppl,string(Bj));
|
|
983
|
+
dbprint(ppl,"upper bound (intersection):");
|
|
984
|
+
dbprint(ppl,string(upperBound));
|
|
985
|
+
dbprint(ppl,"lower bound (product):");
|
|
986
|
+
dbprint(ppl,string(lowerBound));
|
|
987
|
+
|
|
988
|
+
export Bj;
|
|
989
|
+
export shiftedIdeals;
|
|
990
|
+
export upperBound;
|
|
991
|
+
export lowerBound;
|
|
992
|
+
return(ks);
|
|
993
|
+
}
|
|
994
|
+
example
|
|
995
|
+
{
|
|
996
|
+
"EXAMPLE:"; echo = 2;
|
|
997
|
+
ring r = 0,(x,y,z),dp;
|
|
998
|
+
setring r;
|
|
999
|
+
ideal F = x*z,2*x^2*y^2*z+x^4+y^4;
|
|
1000
|
+
def A = BFBoundsBudur(F,intvec(1,1));
|
|
1001
|
+
setring A;
|
|
1002
|
+
lead(upperBound);
|
|
1003
|
+
lead(lowerBound);
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
proc annfalphaI(ideal f, ideal alpha)
|
|
1007
|
+
"USAGE: annfalphaI(f,alpha); f,alpha ideals
|
|
1008
|
+
RETURN: ring
|
|
1009
|
+
ASSUME: basering is a commutative polynomial ring in characteristic 0
|
|
1010
|
+
PURPOSE: determine annihilator of f^alpha with the method of (OT99)
|
|
1011
|
+
NOTE: The returned ring contains the annihilator of f^alpha over D as annfalpha.
|
|
1012
|
+
alpha should contain the desired rational exponents.
|
|
1013
|
+
The procedure may also be applied to the univariate case, i.e. for r=1.
|
|
1014
|
+
EXAMPLE: example annfalphaI; shows example
|
|
1015
|
+
"
|
|
1016
|
+
{
|
|
1017
|
+
if (!isCommutative())
|
|
1018
|
+
{
|
|
1019
|
+
ERROR("Basering is not commutative.");
|
|
1020
|
+
}
|
|
1021
|
+
if(ncols(f) != ncols(alpha))
|
|
1022
|
+
{
|
|
1023
|
+
ERROR("Parameters f and alpha do not have the same size.")
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
int ppl = printlevel-voice+2;
|
|
1027
|
+
intvec saveopt=option(get);
|
|
1028
|
+
option(redSB);
|
|
1029
|
+
|
|
1030
|
+
|
|
1031
|
+
ring backup = basering;
|
|
1032
|
+
int r = ncols(f);
|
|
1033
|
+
int n = nvars(basering);
|
|
1034
|
+
int k;
|
|
1035
|
+
|
|
1036
|
+
//construct k[_s] and prepare map from k<_x,_d,_s> to k[_s]
|
|
1037
|
+
ring kS = 0,(s(1..r)),dp;
|
|
1038
|
+
setring kS;
|
|
1039
|
+
ideal SGen;
|
|
1040
|
+
SGen[2*n] = 0;
|
|
1041
|
+
SGen = SGen,maxideal(1);
|
|
1042
|
+
map fetchS;
|
|
1043
|
+
|
|
1044
|
+
setring backup;
|
|
1045
|
+
dbprint(ppl,"//starting computation of B and ann(f^s)...");
|
|
1046
|
+
def A = annfsBMI(f);
|
|
1047
|
+
dbprint(ppl,"//finished computation of B and ann(f^s)...");
|
|
1048
|
+
|
|
1049
|
+
setring kS;
|
|
1050
|
+
//identity map on the s(i)
|
|
1051
|
+
fetchS = A, SGen;
|
|
1052
|
+
def B = fetchS(BS);
|
|
1053
|
+
//push numbers through rings
|
|
1054
|
+
ideal alpha = imap(backup,alpha);
|
|
1055
|
+
|
|
1056
|
+
dbprint(ppl,"B=");
|
|
1057
|
+
dbprint(ppl,B);
|
|
1058
|
+
dbprint(ppl,"alpha=");
|
|
1059
|
+
dbprint(ppl,alpha);
|
|
1060
|
+
|
|
1061
|
+
//map that shifts alpha to the origin
|
|
1062
|
+
map alphaShift;
|
|
1063
|
+
ideal shiftedS;
|
|
1064
|
+
for(int i=1; i<=r; i++){
|
|
1065
|
+
shiftedS[i] = s(i)+alpha[i];
|
|
1066
|
+
}
|
|
1067
|
+
alphaShift = kS, shiftedS;
|
|
1068
|
+
//B is shifted such that alpha is the origin
|
|
1069
|
+
def shiftedB = alphaShift(B);
|
|
1070
|
+
dbprint(ppl,"shiftedB with alpha<->0 =");
|
|
1071
|
+
dbprint(ppl,shiftedB);
|
|
1072
|
+
|
|
1073
|
+
ring ks = 0,(s),dp;
|
|
1074
|
+
setring ks;
|
|
1075
|
+
//projection from kS to ks with s(i)->s
|
|
1076
|
+
ideal sCopies = s;
|
|
1077
|
+
for(i=1; i<r; i++){
|
|
1078
|
+
sCopies = sCopies, s;
|
|
1079
|
+
}
|
|
1080
|
+
map projS = kS,sCopies;
|
|
1081
|
+
//intersection of B with the line p*(1,...,1)
|
|
1082
|
+
def projB = projS(shiftedB);
|
|
1083
|
+
dbprint(ppl,"intersection of B with p*(1,...,1) projB=");
|
|
1084
|
+
dbprint(ppl,projB);
|
|
1085
|
+
|
|
1086
|
+
ideal factorsB;
|
|
1087
|
+
//get projB to one format
|
|
1088
|
+
if(typeof(projB) == "ideal"){
|
|
1089
|
+
projB = std(projB);
|
|
1090
|
+
factorsB = factorize(projB[1])[1];
|
|
1091
|
+
} else {
|
|
1092
|
+
factorsB = projB[1];
|
|
1093
|
+
}
|
|
1094
|
+
dbprint(ppl,"factors that give the intersection points factorsB=");
|
|
1095
|
+
dbprint(ppl,factorsB);
|
|
1096
|
+
|
|
1097
|
+
int c0 = 0;
|
|
1098
|
+
number c;
|
|
1099
|
+
|
|
1100
|
+
//find the minimal integer of B in alpha-c(1,...,1), alpha-c0(1,...,1)
|
|
1101
|
+
for(i=1; i<=ncols(factorsB); i++){
|
|
1102
|
+
c = number(subst(factorsB[i],s,0));
|
|
1103
|
+
if ( isInt(c) && (c > c0) ){
|
|
1104
|
+
c0 = int(c);
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
dbprint(ppl,"necessary bishop's steps to the minimal important root c0=");
|
|
1108
|
+
dbprint(ppl,c0);
|
|
1109
|
+
|
|
1110
|
+
setring A;
|
|
1111
|
+
//alpha0 is the minimal integer root of B in alpha-c(1,...,1)
|
|
1112
|
+
ideal alpha0 = imap(backup,alpha);
|
|
1113
|
+
for(i=1; i<=r; i++){
|
|
1114
|
+
alpha0[i] = alpha0[i] - c0;
|
|
1115
|
+
}
|
|
1116
|
+
dbprint(ppl,"minimal integer root of B in alpha-c(1,...,1) alpha0=");
|
|
1117
|
+
dbprint(ppl,alpha0);
|
|
1118
|
+
|
|
1119
|
+
//compute ann_D(f^alpha0)
|
|
1120
|
+
ideal annfalpha0 = LD;
|
|
1121
|
+
for(i=1; i<=r; i++){
|
|
1122
|
+
annfalpha0 = subst(annfalpha0, var(2*n+i), alpha0[i]);
|
|
1123
|
+
}
|
|
1124
|
+
dbprint(ppl,"annfalpha0=");
|
|
1125
|
+
dbprint(ppl, annfalpha0);
|
|
1126
|
+
|
|
1127
|
+
ideal annfalpha;
|
|
1128
|
+
if(c0 == 0){
|
|
1129
|
+
annfalpha = annfalpha0;
|
|
1130
|
+
dbprint(ppl,"no syzygies needed");
|
|
1131
|
+
} else {
|
|
1132
|
+
//c0 is non-trivial, we need to compute syzygies
|
|
1133
|
+
dbprint(ppl,"computing syzygies");
|
|
1134
|
+
poly F = product(imap(backup, f));
|
|
1135
|
+
matrix J[1][1] = F^c0;
|
|
1136
|
+
matrix K[1][size(annfalpha0)] = annfalpha0;
|
|
1137
|
+
module M = modulo(J,K);
|
|
1138
|
+
annfalpha = ideal(M);
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
annfalpha = std(annfalpha);
|
|
1142
|
+
|
|
1143
|
+
dbprint(ppl,"annfalpha=");
|
|
1144
|
+
dbprint(ppl,annfalpha);
|
|
1145
|
+
|
|
1146
|
+
export annfalpha;
|
|
1147
|
+
option(set,saveopt);
|
|
1148
|
+
return(A);
|
|
1149
|
+
}
|
|
1150
|
+
example
|
|
1151
|
+
{
|
|
1152
|
+
"EXAMPLE:"; echo = 2;
|
|
1153
|
+
ring R = 0,(x,y,z),dp;
|
|
1154
|
+
ideal f = x,y,z;
|
|
1155
|
+
ideal alpha = 1/4, 2/3, 1;
|
|
1156
|
+
def A = annfalphaI(f,alpha);
|
|
1157
|
+
setring A;
|
|
1158
|
+
annfalpha;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
proc extractS(ideal I, int r)
|
|
1162
|
+
"USAGE: extractS(I,r); I ideal, r int
|
|
1163
|
+
RETURN: ring
|
|
1164
|
+
ASSUME: I is an ideal in the first r variables of the basering and these r variables generate a commutative subring
|
|
1165
|
+
PURPOSE: give the ideal generated by I in the commutative subring generated by the first r variables, ordering dp
|
|
1166
|
+
NOTE: The returned ring contains I.
|
|
1167
|
+
EXAMPLE: example extractS; shows example
|
|
1168
|
+
"
|
|
1169
|
+
{
|
|
1170
|
+
int ppl = printlevel-voice+2;
|
|
1171
|
+
def save = basering;
|
|
1172
|
+
int N = nvars(basering);
|
|
1173
|
+
if (r > N)
|
|
1174
|
+
{
|
|
1175
|
+
ERROR("Argument r not consistent with basering");
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
list RL = ringlist(basering);
|
|
1179
|
+
list L, Lord;
|
|
1180
|
+
L[1] = RL[1]; //char
|
|
1181
|
+
L[4] = RL[4]; //char, minpoly
|
|
1182
|
+
// construct list of varnames
|
|
1183
|
+
list Name = RL[2];
|
|
1184
|
+
list RName;
|
|
1185
|
+
int j;
|
|
1186
|
+
for (j=1; j<=r; j++)
|
|
1187
|
+
{
|
|
1188
|
+
RName[j] = Name[j];
|
|
1189
|
+
}
|
|
1190
|
+
L[2] = RName;
|
|
1191
|
+
L[3] = list(list("dp",intvec(1:r)));
|
|
1192
|
+
// we are done with the list
|
|
1193
|
+
def @R = ring(L);
|
|
1194
|
+
setring @R;
|
|
1195
|
+
ideal I = imap(save,I);
|
|
1196
|
+
export I;
|
|
1197
|
+
return(@R);
|
|
1198
|
+
}
|
|
1199
|
+
example
|
|
1200
|
+
{
|
|
1201
|
+
"EXAMPLE:"; echo = 2;
|
|
1202
|
+
ring R = 0,(x,y),dp;
|
|
1203
|
+
ideal f = x^2-y^2,y;
|
|
1204
|
+
def S = BernsteinSatoIdeal(f);
|
|
1205
|
+
setring S;
|
|
1206
|
+
BS;
|
|
1207
|
+
def T = extractS(BS,2);
|
|
1208
|
+
setring T;
|
|
1209
|
+
I;
|
|
1210
|
+
factorize(I[1]);
|
|
1211
|
+
}
|