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,1024 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version modstd.lib 4.3.0.1 Mar_2022 "; // $Id: f61b67b01efbf6f676552231c956f9e079dc9c20 $
|
|
3
|
+
category="Commutative Algebra";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: modstd.lib Groebner bases of ideals/modules using modular methods
|
|
6
|
+
|
|
7
|
+
AUTHORS: A. Hashemi Amir.Hashemi@lip6.fr
|
|
8
|
+
G. Pfister pfister@mathematik.uni-kl.de
|
|
9
|
+
H. Schoenemann hannes@mathematik.uni-kl.de
|
|
10
|
+
A. Steenpass steenpass@mathematik.uni-kl.de
|
|
11
|
+
S. Steidel steidel@mathematik.uni-kl.de
|
|
12
|
+
|
|
13
|
+
OVERVIEW:
|
|
14
|
+
A library for computing Groebner bases of ideals/modules in the polynomial ring
|
|
15
|
+
over the rational numbers using modular methods.
|
|
16
|
+
|
|
17
|
+
REFERENCES:
|
|
18
|
+
E. A. Arnold: Modular algorithms for computing Groebner bases.
|
|
19
|
+
J. Symb. Comp. 35, 403-419 (2003).
|
|
20
|
+
|
|
21
|
+
N. Idrees, G. Pfister, S. Steidel: Parallelization of Modular Algorithms.
|
|
22
|
+
J. Symb. Comp. 46, 672-684 (2011).
|
|
23
|
+
|
|
24
|
+
PROCEDURES:
|
|
25
|
+
modStd(I); standard basis of I using modular methods
|
|
26
|
+
modGB(cmd,I); standard basis of I using modular methods via cmd
|
|
27
|
+
modSyz(I); syzygy module of I using modular methods
|
|
28
|
+
modIntersect(I,J); intersection of I and J using modular methods
|
|
29
|
+
";
|
|
30
|
+
|
|
31
|
+
LIB "polylib.lib";
|
|
32
|
+
LIB "modular.lib";
|
|
33
|
+
|
|
34
|
+
proc modStd(def I, list #)
|
|
35
|
+
"USAGE: modStd(I[, exactness]); I ideal/module, exactness int
|
|
36
|
+
RETURN: a standard basis of I
|
|
37
|
+
NOTE: The procedure computes a standard basis of I (over the rational
|
|
38
|
+
numbers) by using modular methods.
|
|
39
|
+
@* An optional parameter 'exactness' can be provided.
|
|
40
|
+
If exactness = 1(default), the procedure computes a standard basis
|
|
41
|
+
of I for sure; if exactness = 0, it computes a standard basis of I
|
|
42
|
+
with high probability.
|
|
43
|
+
SEE ALSO: modular
|
|
44
|
+
EXAMPLE: example modStd; shows an example"
|
|
45
|
+
{
|
|
46
|
+
/* read optional parameter */
|
|
47
|
+
int exactness = 1;
|
|
48
|
+
if (size(#) > 0)
|
|
49
|
+
{
|
|
50
|
+
/* For compatibility, we only test size(#) > 4. This can be changed to
|
|
51
|
+
* size(#) > 1 in the future. */
|
|
52
|
+
if (size(#) > 4 || typeof(#[1]) != "int")
|
|
53
|
+
{
|
|
54
|
+
ERROR("wrong optional parameter");
|
|
55
|
+
}
|
|
56
|
+
exactness = #[1];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* save options */
|
|
60
|
+
intvec opt = option(get);
|
|
61
|
+
option(redSB);
|
|
62
|
+
if (attrib(basering,"global")==0)
|
|
63
|
+
{
|
|
64
|
+
if (noether!=0) { option(infRedTail);}
|
|
65
|
+
else
|
|
66
|
+
{ def II=I; attrib(II,"isSB",1);
|
|
67
|
+
if (highcorner(II)!=0) { option(infRedTail);}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* choose the right command */
|
|
72
|
+
string command = "std";
|
|
73
|
+
if ((system("nblocks")>2) || (npars(basering) > 0))
|
|
74
|
+
{ command = "Modstd::groebner_norm"; }
|
|
75
|
+
|
|
76
|
+
/* call modular() */
|
|
77
|
+
if (exactness)
|
|
78
|
+
{
|
|
79
|
+
if(hasCommutativeVars(basering) && (attrib(basering,"global")==1))
|
|
80
|
+
{
|
|
81
|
+
I = modular(command, list(I), primeTest_std,
|
|
82
|
+
deleteUnluckyPrimes_std, pTest_std, finalTest_std_comm);
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
{
|
|
86
|
+
I = modular(command, list(I), primeTest_std,
|
|
87
|
+
deleteUnluckyPrimes_std, pTest_std, finalTest_std);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
{
|
|
92
|
+
I = modular(command, list(I), primeTest_std,
|
|
93
|
+
deleteUnluckyPrimes_std, pTest_std);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* return the result */
|
|
97
|
+
attrib(I, "isSB", 1);
|
|
98
|
+
option(set, opt);
|
|
99
|
+
return(I);
|
|
100
|
+
}
|
|
101
|
+
example
|
|
102
|
+
{
|
|
103
|
+
"EXAMPLE:";
|
|
104
|
+
echo = 2;
|
|
105
|
+
ring R1 = 0, (x,y,z,t), dp;
|
|
106
|
+
ideal I = 3x3+x2+1, 11y5+y3+2, 5z4+z2+4;
|
|
107
|
+
ideal J = modStd(I);
|
|
108
|
+
J;
|
|
109
|
+
I = homog(I, t);
|
|
110
|
+
J = modStd(I);
|
|
111
|
+
J;
|
|
112
|
+
|
|
113
|
+
ring R2 = 0, (x,y,z), ds;
|
|
114
|
+
ideal I = jacob(x5+y6+z7+xyz);
|
|
115
|
+
ideal J = modStd(I, 0);
|
|
116
|
+
J;
|
|
117
|
+
|
|
118
|
+
ring R3 = 0, x(1..4), lp;
|
|
119
|
+
ideal I = cyclic(4);
|
|
120
|
+
ideal J1 = modStd(I, 1); // default
|
|
121
|
+
ideal J2 = modStd(I, 0);
|
|
122
|
+
size(reduce(J1, J2));
|
|
123
|
+
size(reduce(J2, J1));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
proc modGB(string command, def I, list #)
|
|
127
|
+
"USAGE: modGB(method, I[, exactness]); I ideal/module, exactness int
|
|
128
|
+
method can be: std, slimgb, sba
|
|
129
|
+
RETURN: a standard basis of I
|
|
130
|
+
NOTE: The procedure computes a standard basis of I (over the rational
|
|
131
|
+
numbers) by using modular methods.
|
|
132
|
+
@* An optional parameter 'exactness' can be provided.
|
|
133
|
+
If exactness = 1(default), the procedure computes a standard basis
|
|
134
|
+
of I for sure; if exactness = 0, it computes a standard basis of I
|
|
135
|
+
with high probability.
|
|
136
|
+
SEE ALSO: modular
|
|
137
|
+
EXAMPLE: example modGB; shows an example"
|
|
138
|
+
{
|
|
139
|
+
/* read optional parameter */
|
|
140
|
+
int exactness = 1;
|
|
141
|
+
if (size(#) > 0)
|
|
142
|
+
{
|
|
143
|
+
if (typeof(#[1]) != "int")
|
|
144
|
+
{
|
|
145
|
+
ERROR("wrong optional parameter");
|
|
146
|
+
}
|
|
147
|
+
exactness = #[1];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* save options */
|
|
151
|
+
intvec opt = option(get);
|
|
152
|
+
option(redSB);
|
|
153
|
+
option(redTail);
|
|
154
|
+
|
|
155
|
+
/* call modular() */
|
|
156
|
+
if (exactness)
|
|
157
|
+
{
|
|
158
|
+
if(hasCommutativeVars(basering) && (attrib(basering,"global")==1))
|
|
159
|
+
{
|
|
160
|
+
I = modular(command, list(I), primeTest_std,
|
|
161
|
+
deleteUnluckyPrimes_std, pTest_std, finalTest_std_comm);
|
|
162
|
+
}
|
|
163
|
+
else
|
|
164
|
+
{
|
|
165
|
+
I = modular(command, list(I), primeTest_std,
|
|
166
|
+
deleteUnluckyPrimes_std, pTest_std, finalTest_std);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
{
|
|
171
|
+
I = modular(command, list(I), primeTest_std,
|
|
172
|
+
deleteUnluckyPrimes_std, pTest_std);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* return the result */
|
|
176
|
+
attrib(I, "isSB", 1);
|
|
177
|
+
option(set, opt);
|
|
178
|
+
return(I);
|
|
179
|
+
}
|
|
180
|
+
example
|
|
181
|
+
{
|
|
182
|
+
"EXAMPLE:";
|
|
183
|
+
echo = 2;
|
|
184
|
+
ring R1 = 0, (x,y,z,t), dp;
|
|
185
|
+
ideal I = 3x3+x2+1, 11y5+y3+2, 5z4+z2+4;
|
|
186
|
+
ideal J = modGB("slimgb",I);
|
|
187
|
+
J;
|
|
188
|
+
I = homog(I, t);
|
|
189
|
+
J = modGB("slimgb",I);
|
|
190
|
+
J;
|
|
191
|
+
|
|
192
|
+
ring R3 = 0, x(1..4), lp;
|
|
193
|
+
ideal I = cyclic(4);
|
|
194
|
+
ideal J1 = modGB("slimgb",I, 1); // default
|
|
195
|
+
ideal J2 = modGB("slimgb",I, 0);
|
|
196
|
+
size(reduce(J1, J2));
|
|
197
|
+
size(reduce(J2, J1));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
proc modSyz(def I)
|
|
201
|
+
"USAGE: modSyz(I); I ideal/module
|
|
202
|
+
RETURN: a generating set of syzygies of I
|
|
203
|
+
NOTE: The procedure computes a the syzygy module of I (over the rational
|
|
204
|
+
numbers) by using modular methods with high probability.
|
|
205
|
+
The property of being a syzygy is tested.
|
|
206
|
+
SEE ALSO: modular
|
|
207
|
+
EXAMPLE: example modSyz; shows an example"
|
|
208
|
+
{
|
|
209
|
+
/* save options */
|
|
210
|
+
intvec opt = option(get);
|
|
211
|
+
option(redSB);
|
|
212
|
+
|
|
213
|
+
/* choose the right command */
|
|
214
|
+
string command = "syz";
|
|
215
|
+
|
|
216
|
+
/* call modular() */
|
|
217
|
+
module M = modular(command, list(I), primeTest_std,
|
|
218
|
+
deleteUnluckyPrimes_std, pTest_syz);
|
|
219
|
+
|
|
220
|
+
/* return the result */
|
|
221
|
+
option(set, opt);
|
|
222
|
+
return(M);
|
|
223
|
+
}
|
|
224
|
+
example
|
|
225
|
+
{
|
|
226
|
+
"EXAMPLE:"; echo = 2;
|
|
227
|
+
ring R1 = 0, (x,y,z,t), dp;
|
|
228
|
+
ideal I = 3x3+x2+1, 11y5+y3+2, 5z4+z2+4;
|
|
229
|
+
modSyz(I);
|
|
230
|
+
simplify(syz(I),1);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
proc modIntersect(def I, def J)
|
|
234
|
+
"USAGE: modIntersect(I,J); I,J ideal/module
|
|
235
|
+
RETURN: a generating set of the intersection of I and J
|
|
236
|
+
NOTE: The procedure computes a the intersection of I and J
|
|
237
|
+
(over the rational numbers) by using modular methods
|
|
238
|
+
with high probability.
|
|
239
|
+
No additional tests are performed.
|
|
240
|
+
SEE ALSO: modular
|
|
241
|
+
EXAMPLE: example modIntersect; shows an example"
|
|
242
|
+
{
|
|
243
|
+
/* save options */
|
|
244
|
+
intvec opt = option(get);
|
|
245
|
+
option(redSB);
|
|
246
|
+
|
|
247
|
+
/* choose the right command */
|
|
248
|
+
string command = "intersect";
|
|
249
|
+
|
|
250
|
+
/* call modular() */
|
|
251
|
+
def M = modular(command, list(I,J), primeTest_std,
|
|
252
|
+
deleteUnluckyPrimes_std);
|
|
253
|
+
|
|
254
|
+
/* return the result */
|
|
255
|
+
option(set, opt);
|
|
256
|
+
return(M);
|
|
257
|
+
}
|
|
258
|
+
example
|
|
259
|
+
{
|
|
260
|
+
"EXAMPLE:"; echo = 2;
|
|
261
|
+
ring R1 = 0, (x,y,z,t), dp;
|
|
262
|
+
ideal I = 3x3+x2+1, 11y5+y3+2, 5z4+z2+4;
|
|
263
|
+
ideal J = maxideal(2);
|
|
264
|
+
modIntersect(I,J);
|
|
265
|
+
simplify(intersect(I,J),1);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* compute a normalized GB via groebner() */
|
|
269
|
+
static proc groebner_norm(def I)
|
|
270
|
+
{
|
|
271
|
+
I = simplify(groebner(I), 1);
|
|
272
|
+
attrib(I, "isSB", 1);
|
|
273
|
+
return(I);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* test if the prime p is suitable for the input, i.e. it does not divide
|
|
277
|
+
* the numerator or denominator of any of the coefficients */
|
|
278
|
+
static proc primeTest_std(int p, alias list args)
|
|
279
|
+
{
|
|
280
|
+
/* erase zero generators */
|
|
281
|
+
def I = simplify(args[1], 2);
|
|
282
|
+
|
|
283
|
+
/* clear denominators and count the terms */
|
|
284
|
+
def J=I; // dummy assign, to get the type of I
|
|
285
|
+
ideal K;
|
|
286
|
+
int n = ncols(I);
|
|
287
|
+
intvec sizes;
|
|
288
|
+
number cnt;
|
|
289
|
+
int i;
|
|
290
|
+
for(i = n; i > 0; i--)
|
|
291
|
+
{
|
|
292
|
+
J[i] = cleardenom(I[i]);
|
|
293
|
+
cnt = leadcoef(J[i])/leadcoef(I[i]);
|
|
294
|
+
K[i] = numerator(cnt)*var(1)+denominator(cnt);
|
|
295
|
+
}
|
|
296
|
+
sizes = size(J[1..n]);
|
|
297
|
+
|
|
298
|
+
/* change to characteristic p */
|
|
299
|
+
def br = basering;
|
|
300
|
+
list lbr = ringlist(br);
|
|
301
|
+
if (typeof(lbr[1]) == "int") { lbr[1] = p; }
|
|
302
|
+
else { lbr[1][1] = p; }
|
|
303
|
+
def rp = ring(lbr);
|
|
304
|
+
setring(rp);
|
|
305
|
+
def Jp = fetch(br, J);
|
|
306
|
+
ideal Kp = fetch(br, K);
|
|
307
|
+
|
|
308
|
+
/* test if any coefficient is missing */
|
|
309
|
+
if (intvec(size(Kp[1..n])) != 2:n) { setring(br); return(0); }
|
|
310
|
+
if (intvec(size(Jp[1..n])) != sizes) { setring(br); return(0); }
|
|
311
|
+
setring(br);
|
|
312
|
+
return(1);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* find entries in modresults which come from unlucky primes.
|
|
316
|
+
* For this, sort the entries into categories depending on their leading
|
|
317
|
+
* ideal and return the indices in all but the biggest category. */
|
|
318
|
+
static proc deleteUnluckyPrimes_std(alias list modresults)
|
|
319
|
+
{
|
|
320
|
+
int size_modresults = size(modresults);
|
|
321
|
+
|
|
322
|
+
/* sort results into categories.
|
|
323
|
+
* each category is represented by three entries:
|
|
324
|
+
* - the corresponding leading ideal
|
|
325
|
+
* - the number of elements
|
|
326
|
+
* - the indices of the elements
|
|
327
|
+
*/
|
|
328
|
+
list cat;
|
|
329
|
+
int size_cat;
|
|
330
|
+
def L=modresults[1]; // dummy assign to get the type of L
|
|
331
|
+
int i;
|
|
332
|
+
int j;
|
|
333
|
+
for (i = 1; i <= size_modresults; i++)
|
|
334
|
+
{
|
|
335
|
+
L = lead(modresults[i]);
|
|
336
|
+
attrib(L, "isSB", 1);
|
|
337
|
+
for (j = 1; j <= size_cat; j++)
|
|
338
|
+
{
|
|
339
|
+
if (size(L) == size(cat[j][1])
|
|
340
|
+
&& size(reduce(L, cat[j][1], 5)) == 0
|
|
341
|
+
&& size(reduce(cat[j][1], L, 5)) == 0)
|
|
342
|
+
{
|
|
343
|
+
cat[j][2] = cat[j][2]+1;
|
|
344
|
+
cat[j][3][cat[j][2]] = i;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (j > size_cat)
|
|
349
|
+
{
|
|
350
|
+
size_cat++;
|
|
351
|
+
cat[size_cat] = list();
|
|
352
|
+
cat[size_cat][1] = L;
|
|
353
|
+
cat[size_cat][2] = 1;
|
|
354
|
+
cat[size_cat][3] = list(i);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* find the biggest categories */
|
|
359
|
+
int cat_max = 1;
|
|
360
|
+
int max = cat[1][2];
|
|
361
|
+
for (i = 2; i <= size_cat; i++)
|
|
362
|
+
{
|
|
363
|
+
if (cat[i][2] > max)
|
|
364
|
+
{
|
|
365
|
+
cat_max = i;
|
|
366
|
+
max = cat[i][2];
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/* return all other indices */
|
|
371
|
+
list unluckyIndices;
|
|
372
|
+
for (i = 1; i <= size_cat; i++)
|
|
373
|
+
{
|
|
374
|
+
if (i != cat_max) { unluckyIndices = unluckyIndices + cat[i][3]; }
|
|
375
|
+
}
|
|
376
|
+
return(unluckyIndices);
|
|
377
|
+
}
|
|
378
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
379
|
+
|
|
380
|
+
static proc cleardenomModule(def I)
|
|
381
|
+
{
|
|
382
|
+
int t=ncols(I);
|
|
383
|
+
if(size(I)==0)
|
|
384
|
+
{
|
|
385
|
+
return(I);
|
|
386
|
+
}
|
|
387
|
+
else
|
|
388
|
+
{
|
|
389
|
+
for(int i=1;i<=t;i++)
|
|
390
|
+
{
|
|
391
|
+
I[i]=cleardenom(I[i]);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return(I);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
static proc pTest_syz(string command, alias list args, alias def result, int p)
|
|
398
|
+
{
|
|
399
|
+
module result_without_denom=cleardenomModule(result);
|
|
400
|
+
return(size(module(matrix(args[1])*matrix(result_without_denom)))==0);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* test if 'command' applied to 'args' in characteristic p is the same as
|
|
404
|
+
'result' mapped to characteristic p */
|
|
405
|
+
static proc pTest_std(string command, alias list args, alias def result,
|
|
406
|
+
int p)
|
|
407
|
+
{
|
|
408
|
+
/* change to characteristic p */
|
|
409
|
+
def br = basering;
|
|
410
|
+
list lbr = ringlist(br);
|
|
411
|
+
if (typeof(lbr[1]) == "int") { lbr[1] = p; }
|
|
412
|
+
else { lbr[1][1] = p; }
|
|
413
|
+
def rp = ring(lbr);
|
|
414
|
+
setring(rp);
|
|
415
|
+
def Ip = fetch(br, args)[1];
|
|
416
|
+
def Gp = fetch(br, result);
|
|
417
|
+
attrib(Gp, "isSB", 1);
|
|
418
|
+
|
|
419
|
+
/* test if Ip is in Gp */
|
|
420
|
+
int i;
|
|
421
|
+
for (i = ncols(Ip); i > 0; i--)
|
|
422
|
+
{
|
|
423
|
+
if (reduce(Ip[i], Gp, 1) != 0)
|
|
424
|
+
{
|
|
425
|
+
setring(br);
|
|
426
|
+
return(0);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/* compute command(args) */
|
|
431
|
+
execute("Ip = "+command+"(Ip);");
|
|
432
|
+
|
|
433
|
+
/* test if Gp is in Ip */
|
|
434
|
+
for (i = ncols(Gp); i > 0; i--)
|
|
435
|
+
{
|
|
436
|
+
if (reduce(Gp[i], Ip, 1) != 0) { setring(br); return(0); }
|
|
437
|
+
}
|
|
438
|
+
setring(br);
|
|
439
|
+
return(1);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/* test if 'result' is a GB of the input ideal, commutative ring */
|
|
443
|
+
static proc finalTest_std_comm(string command, alias list args, def result)
|
|
444
|
+
{
|
|
445
|
+
/* test if args[1] is in result */
|
|
446
|
+
attrib(result, "isSB", 1);
|
|
447
|
+
int i;
|
|
448
|
+
for (i = ncols(args[1]); i > 0; i--)
|
|
449
|
+
{
|
|
450
|
+
if (reduce(args[1][i], result, 1) != 0) { return(0); }
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/* test if result is a GB */
|
|
454
|
+
//def G = std(result);
|
|
455
|
+
//if (reduce_parallel(G, result)) { return(0); }
|
|
456
|
+
//return(1);
|
|
457
|
+
return(system("verifyGB",result));
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/* test if 'result' is a GB of the input ideal, generic */
|
|
461
|
+
static proc finalTest_std(string command, alias list args, def result)
|
|
462
|
+
{
|
|
463
|
+
/* test if args[1] is in result */
|
|
464
|
+
attrib(result, "isSB", 1);
|
|
465
|
+
int i;
|
|
466
|
+
for (i = ncols(args[1]); i > 0; i--)
|
|
467
|
+
{
|
|
468
|
+
if (reduce(args[1][i], result, 1) != 0) { return(0); }
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
option(noredSB,noinfRedTail);
|
|
472
|
+
/* test if result is a GB */
|
|
473
|
+
def G = std(result);
|
|
474
|
+
if (reduce_parallel(G, result)) { return(0); }
|
|
475
|
+
return(1);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/* return 1, if I_reduce is _not_ in G_reduce,
|
|
479
|
+
* 0, otherwise
|
|
480
|
+
* (same as size(reduce(I_reduce, G_reduce))).
|
|
481
|
+
* Uses parallelization. */
|
|
482
|
+
static proc reduce_parallel(def I_reduce, def G_reduce)
|
|
483
|
+
{
|
|
484
|
+
exportto(Modstd, I_reduce);
|
|
485
|
+
exportto(Modstd, G_reduce);
|
|
486
|
+
int size_I = ncols(I_reduce);
|
|
487
|
+
int chunks = Modular::par_range(size_I);
|
|
488
|
+
intvec range;
|
|
489
|
+
int i;
|
|
490
|
+
for (i = chunks; i > 0; i--)
|
|
491
|
+
{
|
|
492
|
+
range = Modular::par_range(size_I, i);
|
|
493
|
+
task t(i) = "Modstd::reduce_task", list(range);
|
|
494
|
+
}
|
|
495
|
+
startTasks(t(1..chunks));
|
|
496
|
+
waitAllTasks(t(1..chunks));
|
|
497
|
+
int result = 0;
|
|
498
|
+
for (i = chunks; i > 0; i--)
|
|
499
|
+
{
|
|
500
|
+
if (getResult(t(i))) { result = 1; break; }
|
|
501
|
+
}
|
|
502
|
+
kill I_reduce;
|
|
503
|
+
kill G_reduce;
|
|
504
|
+
return(result);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/* compute a chunk of reductions for reduce_parallel */
|
|
508
|
+
static proc reduce_task(intvec range)
|
|
509
|
+
{
|
|
510
|
+
int result = 0;
|
|
511
|
+
int i;
|
|
512
|
+
for (i = range[1]; i <= range[2]; i++)
|
|
513
|
+
{
|
|
514
|
+
if (reduce(I_reduce[i], G_reduce, 1) != 0) { result = 1; break; }
|
|
515
|
+
}
|
|
516
|
+
return(result);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
520
|
+
/*
|
|
521
|
+
* The following procedures are kept for backward compatibility with the old
|
|
522
|
+
* version of modstd.lib. As of now (May 2014), they are still needed in
|
|
523
|
+
* modnormal.lib, modwalk.lib, and symodstd.lib. They can be removed here as
|
|
524
|
+
* soon as they are not longer needed in these libraries.
|
|
525
|
+
*/
|
|
526
|
+
|
|
527
|
+
LIB "parallel.lib";
|
|
528
|
+
|
|
529
|
+
static proc mod_init()
|
|
530
|
+
{
|
|
531
|
+
newstruct("idealPrimeTest", "ideal Ideal");
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
static proc redFork(ideal I, ideal J, int n)
|
|
535
|
+
{
|
|
536
|
+
attrib(J,"isSB",1);
|
|
537
|
+
return(reduce(I,J,1));
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
proc isIncluded(ideal I, ideal J, list #)
|
|
541
|
+
"USAGE: isIncluded(I,J); I,J ideals
|
|
542
|
+
RETURN: 1 if J includes I,
|
|
543
|
+
@* 0 if there is an element f in I which does not reduce to 0 w.r.t. J.
|
|
544
|
+
EXAMPLE: example isIncluded; shows an example
|
|
545
|
+
"
|
|
546
|
+
{
|
|
547
|
+
def R = basering;
|
|
548
|
+
setring R;
|
|
549
|
+
|
|
550
|
+
attrib(J,"isSB",1);
|
|
551
|
+
int i,j,k;
|
|
552
|
+
|
|
553
|
+
if(size(#) > 0)
|
|
554
|
+
{
|
|
555
|
+
int n = #[1];
|
|
556
|
+
if(n >= ncols(I)) { n = ncols(I); }
|
|
557
|
+
if(n > 1)
|
|
558
|
+
{
|
|
559
|
+
for(i = 1; i <= n - 1; i++)
|
|
560
|
+
{
|
|
561
|
+
//link l(i) = "MPtcp:fork";
|
|
562
|
+
link l(i) = "ssi:fork";
|
|
563
|
+
open(l(i));
|
|
564
|
+
|
|
565
|
+
write(l(i), quote(redFork(eval(I[ncols(I)-i]), eval(J), 1)));
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
int t = timer;
|
|
569
|
+
if(reduce(I[ncols(I)], J, 1) != 0)
|
|
570
|
+
{
|
|
571
|
+
for(i = 1; i <= n - 1; i++)
|
|
572
|
+
{
|
|
573
|
+
close(l(i));
|
|
574
|
+
}
|
|
575
|
+
return(0);
|
|
576
|
+
}
|
|
577
|
+
t = timer - t;
|
|
578
|
+
if(t > 60) { t = 60; }
|
|
579
|
+
int i_sleep = system("sh", "sleep "+string(t));
|
|
580
|
+
|
|
581
|
+
j = ncols(I) - n;
|
|
582
|
+
|
|
583
|
+
while(j >= 0)
|
|
584
|
+
{
|
|
585
|
+
for(i = 1; i <= n - 1; i++)
|
|
586
|
+
{
|
|
587
|
+
if(status(l(i), "read", "ready"))
|
|
588
|
+
{
|
|
589
|
+
if(read(l(i)) != 0)
|
|
590
|
+
{
|
|
591
|
+
for(i = 1; i <= n - 1; i++)
|
|
592
|
+
{
|
|
593
|
+
close(l(i));
|
|
594
|
+
}
|
|
595
|
+
return(0);
|
|
596
|
+
}
|
|
597
|
+
else
|
|
598
|
+
{
|
|
599
|
+
if(j >= 1)
|
|
600
|
+
{
|
|
601
|
+
write(l(i), quote(redFork(eval(I[j]), eval(J), 1)));
|
|
602
|
+
j--;
|
|
603
|
+
}
|
|
604
|
+
else
|
|
605
|
+
{
|
|
606
|
+
k++;
|
|
607
|
+
close(l(i));
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
if(k == n - 1)
|
|
613
|
+
{
|
|
614
|
+
j--;
|
|
615
|
+
}
|
|
616
|
+
i_sleep = system("sh", "sleep "+string(t));
|
|
617
|
+
}
|
|
618
|
+
return(1);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
for(i = ncols(I); i >= 1; i--)
|
|
623
|
+
{
|
|
624
|
+
if(reduce(I[i],J,1) != 0){ return(0); }
|
|
625
|
+
}
|
|
626
|
+
return(1);
|
|
627
|
+
}
|
|
628
|
+
example
|
|
629
|
+
{ "EXAMPLE:"; echo = 2;
|
|
630
|
+
ring r=0,(x,y,z),dp;
|
|
631
|
+
ideal I = x+1,x+y+1;
|
|
632
|
+
ideal J = x+1,y;
|
|
633
|
+
isIncluded(I,J);
|
|
634
|
+
isIncluded(J,I);
|
|
635
|
+
isIncluded(I,J,4);
|
|
636
|
+
|
|
637
|
+
ring R = 0, x(1..5), dp;
|
|
638
|
+
ideal I1 = cyclic(4);
|
|
639
|
+
ideal I2 = I1,x(5)^2;
|
|
640
|
+
isIncluded(I1,I2,4);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
proc deleteUnluckyPrimes(list T, list L, int ho, list #)
|
|
644
|
+
"USAGE: deleteUnluckyPrimes(T,L,ho,#); T/L list of polys/primes, ho integer
|
|
645
|
+
RETURN: lists T,L(,M),lT with T/L(/M) list of polys/primes(/type of #),
|
|
646
|
+
lT ideal
|
|
647
|
+
NOTE: - if ho = 1, the polynomials in T are homogeneous, else ho = 0,
|
|
648
|
+
@* - lT is prevalent, i.e. the most appearing leading ideal in T
|
|
649
|
+
EXAMPLE: example deleteUnluckyPrimes; shows an example
|
|
650
|
+
"
|
|
651
|
+
{
|
|
652
|
+
ho = ((ho)||(ord_test(basering) == -1));
|
|
653
|
+
int j,k,c;
|
|
654
|
+
intvec hl,hc;
|
|
655
|
+
ideal cT,lT,cK;
|
|
656
|
+
lT = lead(T[size(T)]);
|
|
657
|
+
attrib(lT,"isSB",1);
|
|
658
|
+
if(!ho)
|
|
659
|
+
{
|
|
660
|
+
for(j = 1; j < size(T); j++)
|
|
661
|
+
{
|
|
662
|
+
cT = lead(T[j]);
|
|
663
|
+
attrib(cT,"isSB",1);
|
|
664
|
+
if((size(reduce(cT,lT,5))!=0)||(size(reduce(lT,cT,5))!=0))
|
|
665
|
+
{
|
|
666
|
+
cK = cT;
|
|
667
|
+
c++;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
if(c > size(T) div 2){ lT = cK; }
|
|
671
|
+
}
|
|
672
|
+
else
|
|
673
|
+
{
|
|
674
|
+
hl = hilb(lT,1);
|
|
675
|
+
for(j = 1; j < size(T); j++)
|
|
676
|
+
{
|
|
677
|
+
cT = lead(T[j]);
|
|
678
|
+
attrib(cT,"isSB",1);
|
|
679
|
+
hc = hilb(cT,1);
|
|
680
|
+
if(hl == hc)
|
|
681
|
+
{
|
|
682
|
+
for(k = 1; k <= size(lT); k++)
|
|
683
|
+
{
|
|
684
|
+
if(lT[k] < cT[k]) { lT = cT; c++; break; }
|
|
685
|
+
if(lT[k] > cT[k]) { c++; break; }
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
else
|
|
689
|
+
{
|
|
690
|
+
if(hc < hl){ lT = cT; hl = hilb(lT,1); c++; }
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
int addList;
|
|
696
|
+
if(size(#) > 0) { list M = #; addList = 1; }
|
|
697
|
+
j = 1;
|
|
698
|
+
attrib(lT,"isSB",1);
|
|
699
|
+
while((j <= size(T))&&(c > 0))
|
|
700
|
+
{
|
|
701
|
+
cT = lead(T[j]);
|
|
702
|
+
attrib(cT,"isSB",1);
|
|
703
|
+
if((size(reduce(cT,lT,5)) != 0)||(size(reduce(lT,cT,5)) != 0))
|
|
704
|
+
{
|
|
705
|
+
T = delete(T,j);
|
|
706
|
+
if(j == 1)
|
|
707
|
+
{
|
|
708
|
+
L = L[2..size(L)];
|
|
709
|
+
if(addList == 1) { M = M[2..size(M)]; }
|
|
710
|
+
}
|
|
711
|
+
else
|
|
712
|
+
{
|
|
713
|
+
if(j == size(L))
|
|
714
|
+
{
|
|
715
|
+
L = L[1..size(L)-1];
|
|
716
|
+
if(addList == 1) { M = M[1..size(M)-1]; }
|
|
717
|
+
}
|
|
718
|
+
else
|
|
719
|
+
{
|
|
720
|
+
L = L[1..j-1],L[j+1..size(L)];
|
|
721
|
+
if(addList == 1) { M = M[1..j-1],M[j+1..size(M)]; }
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
j--;
|
|
725
|
+
}
|
|
726
|
+
j++;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
for(j = 1; j <= size(L); j++)
|
|
730
|
+
{
|
|
731
|
+
L[j] = bigint(L[j]);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
if(addList == 0) { return(list(T,L,lT)); }
|
|
735
|
+
if(addList == 1) { return(list(T,L,M,lT)); }
|
|
736
|
+
}
|
|
737
|
+
example
|
|
738
|
+
{ "EXAMPLE:"; echo = 2;
|
|
739
|
+
list L = 2,3,5,7,11;
|
|
740
|
+
ring r = 0,(y,x),Dp;
|
|
741
|
+
ideal I1 = 2y2x,y6;
|
|
742
|
+
ideal I2 = yx2,y3x,x5,y6;
|
|
743
|
+
ideal I3 = y2x,x3y,x5,y6;
|
|
744
|
+
ideal I4 = y2x,11x3y,x5;
|
|
745
|
+
ideal I5 = y2x,yx3,x5,7y6;
|
|
746
|
+
list T = I1,I2,I3,I4,I5;
|
|
747
|
+
deleteUnluckyPrimes(T,L,1);
|
|
748
|
+
list P = poly(x),poly(x2),poly(x3),poly(x4),poly(x5);
|
|
749
|
+
deleteUnluckyPrimes(T,L,1,P);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
proc primeTest(def II, bigint p)
|
|
753
|
+
{
|
|
754
|
+
if(typeof(II) == "string")
|
|
755
|
+
{
|
|
756
|
+
ideal I = `II`.Ideal;
|
|
757
|
+
}
|
|
758
|
+
else
|
|
759
|
+
{
|
|
760
|
+
ideal I = II;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
I = simplify(I, 2); // erase zero generators
|
|
764
|
+
|
|
765
|
+
int i,j;
|
|
766
|
+
poly f;
|
|
767
|
+
number cnt;
|
|
768
|
+
for(i = 1; i <= size(I); i++)
|
|
769
|
+
{
|
|
770
|
+
f = cleardenom(I[i]);
|
|
771
|
+
if(f == 0) { return(0); }
|
|
772
|
+
cnt = leadcoef(I[i])/leadcoef(f);
|
|
773
|
+
if((bigint(numerator(cnt)) mod p) == 0) { return(0); }
|
|
774
|
+
if((bigint(denominator(cnt)) mod p) == 0) { return(0); }
|
|
775
|
+
for(j = size(f); j > 0; j--)
|
|
776
|
+
{
|
|
777
|
+
if((bigint(leadcoef(f[j])) mod p) == 0) { return(0); }
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
return(1);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
proc primeList(ideal I, int n, list #)
|
|
784
|
+
"USAGE: primeList(I,n[,ncores]); ( resp. primeList(I,n[,L,ncores]); ) I ideal,
|
|
785
|
+
n integer
|
|
786
|
+
RETURN: the intvec of n greatest primes <= 2147483647 (resp. n greatest primes
|
|
787
|
+
< L[size(L)] union with L) such that none of these primes divides any
|
|
788
|
+
coefficient occurring in I
|
|
789
|
+
NOTE: The number of cores to use can be defined by ncores, default is 1.
|
|
790
|
+
EXAMPLE: example primeList; shows an example
|
|
791
|
+
"
|
|
792
|
+
{
|
|
793
|
+
intvec L;
|
|
794
|
+
int i,p;
|
|
795
|
+
int ncores = 1;
|
|
796
|
+
|
|
797
|
+
//----------------- Initialize optional parameter ncores ---------------------
|
|
798
|
+
if(size(#) > 0)
|
|
799
|
+
{
|
|
800
|
+
if(size(#) == 1)
|
|
801
|
+
{
|
|
802
|
+
if(typeof(#[1]) == "int")
|
|
803
|
+
{
|
|
804
|
+
ncores = #[1];
|
|
805
|
+
# = list();
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
else
|
|
809
|
+
{
|
|
810
|
+
ncores = #[2];
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
if(size(#) == 0)
|
|
815
|
+
{
|
|
816
|
+
p = 2147483647;
|
|
817
|
+
while(!primeTest(I,p))
|
|
818
|
+
{
|
|
819
|
+
p = prime(p-1);
|
|
820
|
+
if(p == 2) { ERROR("no more primes"); }
|
|
821
|
+
}
|
|
822
|
+
L[1] = p;
|
|
823
|
+
}
|
|
824
|
+
else
|
|
825
|
+
{
|
|
826
|
+
L = #[1];
|
|
827
|
+
p = prime(L[size(L)]-1);
|
|
828
|
+
while(!primeTest(I,p))
|
|
829
|
+
{
|
|
830
|
+
p = prime(p-1);
|
|
831
|
+
if(p == 2) { ERROR("no more primes"); }
|
|
832
|
+
}
|
|
833
|
+
L[size(L)+1] = p;
|
|
834
|
+
}
|
|
835
|
+
if(p == 2) { ERROR("no more primes"); }
|
|
836
|
+
if(ncores == 1)
|
|
837
|
+
{
|
|
838
|
+
for(i = 2; i <= n; i++)
|
|
839
|
+
{
|
|
840
|
+
p = prime(p-1);
|
|
841
|
+
while(!primeTest(I,p))
|
|
842
|
+
{
|
|
843
|
+
p = prime(p-1);
|
|
844
|
+
if(p == 2) { ERROR("no more primes"); }
|
|
845
|
+
}
|
|
846
|
+
L[size(L)+1] = p;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
else
|
|
850
|
+
{
|
|
851
|
+
int neededSize = size(L)+n-1;;
|
|
852
|
+
list parallelResults;
|
|
853
|
+
list arguments;
|
|
854
|
+
int neededPrimes = neededSize-size(L);
|
|
855
|
+
idealPrimeTest Id;
|
|
856
|
+
Id.Ideal = I;
|
|
857
|
+
export(Id);
|
|
858
|
+
while(neededPrimes > 0)
|
|
859
|
+
{
|
|
860
|
+
arguments = list();
|
|
861
|
+
for(i = ((neededPrimes div ncores)+1-(neededPrimes%ncores == 0))
|
|
862
|
+
*ncores; i > 0; i--)
|
|
863
|
+
{
|
|
864
|
+
p = prime(p-1);
|
|
865
|
+
if(p == 2) { ERROR("no more primes"); }
|
|
866
|
+
arguments[i] = list("Id", p);
|
|
867
|
+
}
|
|
868
|
+
parallelResults = parallelWaitAll("primeTest", arguments, 0, ncores);
|
|
869
|
+
for(i = size(arguments); i > 0; i--)
|
|
870
|
+
{
|
|
871
|
+
if(parallelResults[i])
|
|
872
|
+
{
|
|
873
|
+
L[size(L)+1] = arguments[i][2];
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
neededPrimes = neededSize-size(L);
|
|
877
|
+
}
|
|
878
|
+
kill Id;
|
|
879
|
+
if(size(L) > neededSize)
|
|
880
|
+
{
|
|
881
|
+
L = L[1..neededSize];
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
return(L);
|
|
885
|
+
}
|
|
886
|
+
example
|
|
887
|
+
{ "EXAMPLE:"; echo = 2;
|
|
888
|
+
ring r = 0,(x,y,z),dp;
|
|
889
|
+
ideal I = 2147483647x+y, z-181;
|
|
890
|
+
intvec L = primeList(I,10);
|
|
891
|
+
size(L);
|
|
892
|
+
L[1];
|
|
893
|
+
L[size(L)];
|
|
894
|
+
L = primeList(I,5,L);
|
|
895
|
+
size(L);
|
|
896
|
+
L[size(L)];
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
proc modStdL(def I, list #)
|
|
900
|
+
"USAGE: modStdL(I[, exactness]); I ideal/module, exactness int
|
|
901
|
+
RETURN: a standard basis of I
|
|
902
|
+
NOTE: The procedure computes a standard basis of I (over the rational
|
|
903
|
+
numbers) by using modular methods via an external Singular.
|
|
904
|
+
@* An optional parameter 'exactness' can be provided.
|
|
905
|
+
If exactness = 1(default), the procedure computes a standard basis
|
|
906
|
+
of I for sure; if exactness = 0, it computes a standard basis of I
|
|
907
|
+
with high probability.
|
|
908
|
+
SEE ALSO: modular, modStd
|
|
909
|
+
EXAMPLE: example modStdL; shows an example"
|
|
910
|
+
{
|
|
911
|
+
link l="ssi:tcp localhost:"+system("Singular");
|
|
912
|
+
write(l,quote(option(noloadLib))); // suppress "loaded..."
|
|
913
|
+
read(l); //dummy: return value of option
|
|
914
|
+
write(l,quote(load("modstd.lib","with"))); // load library
|
|
915
|
+
read(l); //dummy: return value of load
|
|
916
|
+
if (size(#)==0)
|
|
917
|
+
{
|
|
918
|
+
write(l,quote(modStd(eval(I))));
|
|
919
|
+
}
|
|
920
|
+
else
|
|
921
|
+
{
|
|
922
|
+
write(l,quote(modStd(eval(I),eval(#[1]))));
|
|
923
|
+
}
|
|
924
|
+
return(read(l));
|
|
925
|
+
}
|
|
926
|
+
example
|
|
927
|
+
{
|
|
928
|
+
"EXAMPLE:";
|
|
929
|
+
echo = 2;
|
|
930
|
+
ring R1 = 0, (x,y,z,t), dp;
|
|
931
|
+
ideal I = 3x3+x2+1, 11y5+y3+2, 5z4+z2+4;
|
|
932
|
+
ideal J = modStdL(I);
|
|
933
|
+
J;
|
|
934
|
+
I = homog(I, t);
|
|
935
|
+
J = modStdL(I);
|
|
936
|
+
J;
|
|
937
|
+
|
|
938
|
+
ring R2 = 0, (x,y,z), ds;
|
|
939
|
+
ideal I = jacob(x5+y6+z7+xyz);
|
|
940
|
+
ideal J = modStdL(I, 0);
|
|
941
|
+
J;
|
|
942
|
+
|
|
943
|
+
ring R3 = 0, x(1..4), lp;
|
|
944
|
+
ideal I = cyclic(4);
|
|
945
|
+
ideal J1 = modStdL(I, 1); // default
|
|
946
|
+
ideal J2 = modStdL(I, 0);
|
|
947
|
+
size(reduce(J1, J2));
|
|
948
|
+
size(reduce(J2, J1));
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
////////////////////////////// further examples ////////////////////////////////
|
|
952
|
+
|
|
953
|
+
/*
|
|
954
|
+
ring r = 0, (x,y,z), lp;
|
|
955
|
+
poly s1 = 5x3y2z+3y3x2z+7xy2z2;
|
|
956
|
+
poly s2 = 3xy2z2+x5+11y2z2;
|
|
957
|
+
poly s3 = 4xyz+7x3+12y3+1;
|
|
958
|
+
poly s4 = 3x3-4y3+yz2;
|
|
959
|
+
ideal i = s1, s2, s3, s4;
|
|
960
|
+
|
|
961
|
+
ring r = 0, (x,y,z), lp;
|
|
962
|
+
poly s1 = 2xy4z2+x3y2z-x2y3z+2xyz2+7y3+7;
|
|
963
|
+
poly s2 = 2x2y4z+x2yz2-xy2z2+2x2yz-12x+12y;
|
|
964
|
+
poly s3 = 2y5z+x2y2z-xy3z-xy3+y4+2y2z;
|
|
965
|
+
poly s4 = 3xy4z3+x2y2z-xy3z+4y3z2+3xyz3+4z2-x+y;
|
|
966
|
+
ideal i = s1, s2, s3, s4;
|
|
967
|
+
|
|
968
|
+
ring r = 0, (x,y,z), lp;
|
|
969
|
+
poly s1 = 8x2y2 + 5xy3 + 3x3z + x2yz;
|
|
970
|
+
poly s2 = x5 + 2y3z2 + 13y2z3 + 5yz4;
|
|
971
|
+
poly s3 = 8x3 + 12y3 + xz2 + 3;
|
|
972
|
+
poly s4 = 7x2y4 + 18xy3z2 + y3z3;
|
|
973
|
+
ideal i = s1, s2, s3, s4;
|
|
974
|
+
|
|
975
|
+
int n = 6;
|
|
976
|
+
ring r = 0,(x(1..n)),lp;
|
|
977
|
+
ideal i = cyclic(n);
|
|
978
|
+
ring s = 0, (x(1..n),t), lp;
|
|
979
|
+
ideal i = imap(r,i);
|
|
980
|
+
i = homog(i,t);
|
|
981
|
+
|
|
982
|
+
ring r = 0, (x(1..4),s), (dp(4),dp);
|
|
983
|
+
poly s1 = 1 + s^2*x(1)*x(3) + s^8*x(2)*x(3) + s^19*x(1)*x(2)*x(4);
|
|
984
|
+
poly s2 = x(1) + s^8 *x(1)* x(2)* x(3) + s^19* x(2)* x(4);
|
|
985
|
+
poly s3 = x(2) + s^10*x(3)*x(4) + s^11*x(1)*x(4);
|
|
986
|
+
poly s4 = x(3) + s^4*x(1)*x(2) + s^19*x(1)*x(3)*x(4) +s^24*x(2)*x(3)*x(4);
|
|
987
|
+
poly s5 = x(4) + s^31* x(1)* x(2)* x(3)* x(4);
|
|
988
|
+
ideal i = s1, s2, s3, s4, s5;
|
|
989
|
+
|
|
990
|
+
ring r = 0, (x,y,z), ds;
|
|
991
|
+
int a = 16;
|
|
992
|
+
int b = 15;
|
|
993
|
+
int c = 4;
|
|
994
|
+
int t = 1;
|
|
995
|
+
poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
|
|
996
|
+
+x^(c-2)*y^c*(y2+t*x)^2;
|
|
997
|
+
ideal i = jacob(f);
|
|
998
|
+
|
|
999
|
+
ring r = 0, (x,y,z), ds;
|
|
1000
|
+
int a = 25;
|
|
1001
|
+
int b = 25;
|
|
1002
|
+
int c = 5;
|
|
1003
|
+
int t = 1;
|
|
1004
|
+
poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3
|
|
1005
|
+
+x^(c-2)*y^c*(y2+t*x)^2;
|
|
1006
|
+
ideal i = jacob(f),f;
|
|
1007
|
+
|
|
1008
|
+
ring r = 0, (x,y,z), ds;
|
|
1009
|
+
int a = 10;
|
|
1010
|
+
poly f = xyz*(x+y+z)^2 +(x+y+z)^3 +x^a+y^a+z^a;
|
|
1011
|
+
ideal i = jacob(f);
|
|
1012
|
+
|
|
1013
|
+
ring r = 0, (x,y,z), ds;
|
|
1014
|
+
int a = 6;
|
|
1015
|
+
int b = 8;
|
|
1016
|
+
int c = 10;
|
|
1017
|
+
int alpha = 5;
|
|
1018
|
+
int beta = 5;
|
|
1019
|
+
int t = 1;
|
|
1020
|
+
poly f = x^a+y^b+z^c+x^alpha*y^(beta-5)+x^(alpha-2)*y^(beta-3)
|
|
1021
|
+
+x^(alpha-3)*y^(beta-4)*z^2+x^(alpha-4)*y^(beta-4)*(y^2+t*x)^2;
|
|
1022
|
+
ideal i = jacob(f);
|
|
1023
|
+
*/
|
|
1024
|
+
|