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,1278 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version modprimdec.lib 4.4.0.7 Jan_2014 "; //$Id: 9573497bec1b34b20ed6b267445b396a2739f9e0 $
|
|
3
|
+
category="Commutative Algebra";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: modprimdec.lib Primary Decomposition via Modular Methods
|
|
6
|
+
|
|
7
|
+
AUTHOR: Andreas Steenpass
|
|
8
|
+
|
|
9
|
+
OVERVIEW:
|
|
10
|
+
A library offering a modular version of the primary decomposition algorithm of Gianni, Trager, and Zacharias. The procedures are implemented to be used over the rationals.
|
|
11
|
+
|
|
12
|
+
PROCEDURES:
|
|
13
|
+
modPrimdecGTZ(); Primary Decomposition by GTZ via Modular Methods
|
|
14
|
+
|
|
15
|
+
SEE ALSO: primdec_lib; assprimeszerodim_lib
|
|
16
|
+
KEYWORDS: Primary decomposition
|
|
17
|
+
";
|
|
18
|
+
|
|
19
|
+
LIB "general.lib";
|
|
20
|
+
LIB "elim.lib";
|
|
21
|
+
LIB "polylib.lib";
|
|
22
|
+
LIB "random.lib";
|
|
23
|
+
LIB "inout.lib";
|
|
24
|
+
LIB "matrix.lib";
|
|
25
|
+
LIB "triang.lib";
|
|
26
|
+
LIB "ring.lib";
|
|
27
|
+
LIB "primdec.lib";
|
|
28
|
+
LIB "tasks.lib";
|
|
29
|
+
LIB "parallel.lib";
|
|
30
|
+
LIB "modstd.lib";
|
|
31
|
+
LIB "modquotient.lib";
|
|
32
|
+
LIB "assprimeszerodim.lib";
|
|
33
|
+
|
|
34
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
35
|
+
//
|
|
36
|
+
// modPrimdecGTZ
|
|
37
|
+
//
|
|
38
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
39
|
+
|
|
40
|
+
proc modPrimdecGTZ(ideal I, list #)
|
|
41
|
+
"USAGE: modPrimdecGTZ(I, #); I ideal, # an optional list which is either empty (not entered) or consists of precisely one integer which is 0 or 1.
|
|
42
|
+
ASSUME: The basering of I is defined over the rationals.
|
|
43
|
+
RETURN: A primary decomposition of I.
|
|
44
|
+
NOTE: - The final result will be checked for correctness if # is either empty (not entered) or if #[1] = 1. Without the check, the functions reurns a result which is correct with high probability.@*
|
|
45
|
+
- For local orderings, the result represents a primary decomposition in the localization
|
|
46
|
+
of the polynomial ring, not in the power series ring.
|
|
47
|
+
EXAMPLE: example modPrimdecGTZ; shows an example
|
|
48
|
+
"
|
|
49
|
+
{
|
|
50
|
+
/* read optional parameter */
|
|
51
|
+
int mod_only = 0;
|
|
52
|
+
if(size(#) > 0)
|
|
53
|
+
{
|
|
54
|
+
if(size(#) > 1 || typeof(#[1]) != "int")
|
|
55
|
+
{
|
|
56
|
+
ERROR("wrong optional parameter");
|
|
57
|
+
}
|
|
58
|
+
mod_only = #[1];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* compute a standard basis if necessary */
|
|
62
|
+
if(!attrib(I, "isSB"))
|
|
63
|
+
{
|
|
64
|
+
I = modStd(I);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* call wrapper and test the result */
|
|
68
|
+
list L = primdecGTZ_wrapper(I, 0, mod_only);
|
|
69
|
+
if(!test_primdec(I, L))
|
|
70
|
+
{
|
|
71
|
+
L = primdecGTZ_wrapper(I, 1, mod_only);
|
|
72
|
+
}
|
|
73
|
+
return(L);
|
|
74
|
+
}
|
|
75
|
+
example
|
|
76
|
+
{ "EXAMPLE:"; echo = 2;
|
|
77
|
+
ring R = 0, (x,y), dp;
|
|
78
|
+
ideal I = x9y2+x10, x2y7-y8;
|
|
79
|
+
modPrimdecGTZ(I);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
static proc test_primdec(ideal i_test, list L_test)
|
|
83
|
+
{
|
|
84
|
+
int i;
|
|
85
|
+
for(i = size(L_test); i > 0; i--)
|
|
86
|
+
{
|
|
87
|
+
if(!attrib(L_test[i][1], "isSB"))
|
|
88
|
+
{
|
|
89
|
+
L_test[i][1] = modStd(L_test[i][1]);
|
|
90
|
+
}
|
|
91
|
+
if(!attrib(L_test[i][2], "isSB"))
|
|
92
|
+
{
|
|
93
|
+
L_test[i][2] = modStd(L_test[i][2]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exportto(Modprimdec, i_test);
|
|
97
|
+
exportto(Modprimdec, L_test);
|
|
98
|
+
list arguments;
|
|
99
|
+
for(i = size(L_test); i > 0; i--)
|
|
100
|
+
{
|
|
101
|
+
arguments[i] = list(i);
|
|
102
|
+
}
|
|
103
|
+
int okay = parallelTestAND("Modprimdec::test_component", arguments);
|
|
104
|
+
if(!okay)
|
|
105
|
+
{
|
|
106
|
+
kill i_test;
|
|
107
|
+
kill L_test;
|
|
108
|
+
return(0);
|
|
109
|
+
}
|
|
110
|
+
okay = parallelTestAND("Modprimdec::test_inclusion", arguments);
|
|
111
|
+
if(!okay)
|
|
112
|
+
{
|
|
113
|
+
kill i_test;
|
|
114
|
+
kill L_test;
|
|
115
|
+
return(0);
|
|
116
|
+
}
|
|
117
|
+
okay = test_intersection();
|
|
118
|
+
kill i_test;
|
|
119
|
+
kill L_test;
|
|
120
|
+
return(okay);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static proc test_component(int index)
|
|
124
|
+
{
|
|
125
|
+
/*
|
|
126
|
+
list L = parallelWaitFirst(list("primdecGTZ", "primdecSY",
|
|
127
|
+
"Modprimdec::primdecGTZ_wrapper"),
|
|
128
|
+
list(list(L_test[index][1]), list(L_test[index][1]),
|
|
129
|
+
list(L_test[index][1], 1, 0)));
|
|
130
|
+
int i;
|
|
131
|
+
for(i = 1; i <= 3; i++)
|
|
132
|
+
{
|
|
133
|
+
if(typeof(L[i]) != "none")
|
|
134
|
+
{
|
|
135
|
+
list P = L[i];
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if(i > 3)
|
|
140
|
+
{
|
|
141
|
+
ERROR("could not test component");
|
|
142
|
+
}
|
|
143
|
+
*/
|
|
144
|
+
list P = primdecGTZ(L_test[index][1]);
|
|
145
|
+
if(size(P) > 1)
|
|
146
|
+
{
|
|
147
|
+
return(0);
|
|
148
|
+
}
|
|
149
|
+
if(size(reduce(P[1][2], L_test[index][2], 1)))
|
|
150
|
+
{
|
|
151
|
+
return(0);
|
|
152
|
+
}
|
|
153
|
+
if(!attrib(P[1][2], "isSB"))
|
|
154
|
+
{
|
|
155
|
+
P[1][2] = modStd(P[1][2]);
|
|
156
|
+
}
|
|
157
|
+
if(size(reduce(L_test[index][2], P[1][2], 1)))
|
|
158
|
+
{
|
|
159
|
+
return(0);
|
|
160
|
+
}
|
|
161
|
+
return(1);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static proc test_inclusion(int index)
|
|
165
|
+
{
|
|
166
|
+
return(!size(reduce(i_test, L_test[index][1], 1)));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static proc test_intersection()
|
|
170
|
+
{
|
|
171
|
+
int i;
|
|
172
|
+
int size_L = size(L_test);
|
|
173
|
+
|
|
174
|
+
def br = basering;
|
|
175
|
+
list rl = ringlist(br);
|
|
176
|
+
for(i = size(rl[3]); i > 0; i--)
|
|
177
|
+
{
|
|
178
|
+
if(rl[3][i][1] == "c" || rl[3][i][1] == "C")
|
|
179
|
+
{
|
|
180
|
+
rl[3] = delete(rl[3], i);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
rl[3] = insert(rl[3], list("c", 0));
|
|
184
|
+
def newR = ring(rl);
|
|
185
|
+
setring(newR);
|
|
186
|
+
option(noredThrough); // these options are ring-dependent
|
|
187
|
+
option(noredTail);
|
|
188
|
+
list L = fetch(br, L_test);
|
|
189
|
+
ideal I = fetch(br, i_test);
|
|
190
|
+
attrib(I, "isSB", 1);
|
|
191
|
+
|
|
192
|
+
module M = module(matrix(1:(size_L+1)));
|
|
193
|
+
for(i = 1; i <= size_L; i++)
|
|
194
|
+
{
|
|
195
|
+
M = M + module(L[i][1]*gen(i));
|
|
196
|
+
}
|
|
197
|
+
M = M + module(I*gen(size_L+1));
|
|
198
|
+
|
|
199
|
+
M = modStd(M);
|
|
200
|
+
|
|
201
|
+
ideal J;
|
|
202
|
+
for(i = ncols(M); i > 0; i--)
|
|
203
|
+
{
|
|
204
|
+
if(M[i][1..size_L] == 0)
|
|
205
|
+
{
|
|
206
|
+
J = M[i][size_L+1], J;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
J = simplify(J, 2);
|
|
210
|
+
int res = !size(reduce(J, I, 1));
|
|
211
|
+
setring(br);
|
|
212
|
+
return(res);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
static proc minSat_parallel(ideal inew, ideal h, int exactness)
|
|
216
|
+
{
|
|
217
|
+
int i,k;
|
|
218
|
+
poly f=1;
|
|
219
|
+
ideal iold,fac;
|
|
220
|
+
list quotM,l;
|
|
221
|
+
|
|
222
|
+
for(i=1;i<=ncols(h);i++)
|
|
223
|
+
{
|
|
224
|
+
if(deg(h[i])>0)
|
|
225
|
+
{
|
|
226
|
+
fac=fac+factorize(h[i],1);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
fac=simplify(fac,6);
|
|
230
|
+
if(size(fac)==0)
|
|
231
|
+
{
|
|
232
|
+
l=inew,1;
|
|
233
|
+
return(l);
|
|
234
|
+
}
|
|
235
|
+
fac=sort(fac)[1];
|
|
236
|
+
for(i=1;i<=size(fac);i++)
|
|
237
|
+
{
|
|
238
|
+
f=f*fac[i];
|
|
239
|
+
}
|
|
240
|
+
quotM[1]=inew;
|
|
241
|
+
quotM[2]=fac;
|
|
242
|
+
quotM[3]=f;
|
|
243
|
+
f=1;
|
|
244
|
+
intvec op = option(get);
|
|
245
|
+
option(returnSB);
|
|
246
|
+
while(Primdec::specialIdealsEqual(iold,quotM[1])==0)
|
|
247
|
+
{
|
|
248
|
+
if(k>0)
|
|
249
|
+
{
|
|
250
|
+
f=f*quotM[3];
|
|
251
|
+
}
|
|
252
|
+
iold=quotM[1];
|
|
253
|
+
quotM=quotMin_parallel(quotM, exactness);
|
|
254
|
+
k++;
|
|
255
|
+
}
|
|
256
|
+
option(set,op);
|
|
257
|
+
l=quotM[1],f;
|
|
258
|
+
return(l);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
static proc quotMin_parallel(list tsil, int exactness)
|
|
262
|
+
{
|
|
263
|
+
int i,j,k,action;
|
|
264
|
+
ideal verg;
|
|
265
|
+
list l;
|
|
266
|
+
poly g;
|
|
267
|
+
|
|
268
|
+
ideal laedi=tsil[1];
|
|
269
|
+
ideal fac=tsil[2];
|
|
270
|
+
poly f=tsil[3];
|
|
271
|
+
|
|
272
|
+
ideal star = modQuotient(laedi, f, exactness);
|
|
273
|
+
|
|
274
|
+
if(Primdec::specialIdealsEqual(star,laedi))
|
|
275
|
+
{
|
|
276
|
+
l=star,fac,f;
|
|
277
|
+
return(l);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
action=1;
|
|
281
|
+
|
|
282
|
+
while(action==1)
|
|
283
|
+
{
|
|
284
|
+
if(size(fac)==1)
|
|
285
|
+
{
|
|
286
|
+
action=0;
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
for(i=1;i<=size(fac);i++)
|
|
290
|
+
{
|
|
291
|
+
g=1;
|
|
292
|
+
verg=laedi;
|
|
293
|
+
for(j=1;j<=size(fac);j++)
|
|
294
|
+
{
|
|
295
|
+
if(i!=j)
|
|
296
|
+
{
|
|
297
|
+
g=g*fac[j];
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
verg = modQuotient(laedi, g, exactness);
|
|
301
|
+
|
|
302
|
+
if(Primdec::specialIdealsEqual(verg,star)==1)
|
|
303
|
+
{
|
|
304
|
+
f=g;
|
|
305
|
+
fac[i]=0;
|
|
306
|
+
fac=simplify(fac,2);
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
if(i==size(fac))
|
|
310
|
+
{
|
|
311
|
+
action=0;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
l=star,fac,f;
|
|
316
|
+
return(l);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
static proc decomp_parallel(ideal i, int exactness, int mod_only, list #)
|
|
320
|
+
"USAGE: decomp_parallel(i, exactness); i ideal, exactness int
|
|
321
|
+
RETURN: list = list of primary ideals and their associated primes
|
|
322
|
+
(at even positions in the list)
|
|
323
|
+
NOTE: Algorithm of Gianni/Trager/Zacharias. Returns a primary
|
|
324
|
+
decomposition of i for sure if exactness != 0, and with high
|
|
325
|
+
probability, otherwise.
|
|
326
|
+
EXAMPLE: example decomp_parallel; shows an example
|
|
327
|
+
"
|
|
328
|
+
{
|
|
329
|
+
intvec op,@vv;
|
|
330
|
+
def @P = basering;
|
|
331
|
+
list primary,indep,ltras;
|
|
332
|
+
intvec @vh,isat,@w;
|
|
333
|
+
int @k,@n,@m,@n1,@n2,@n3,homo,seri,keepdi,ab,nn;
|
|
334
|
+
ideal peek=i;
|
|
335
|
+
ideal ser,tras;
|
|
336
|
+
int isS=(attrib(i,"isSB")==1);
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
if(size(#)>0)
|
|
340
|
+
{
|
|
341
|
+
seri=1;
|
|
342
|
+
peek=#[1];
|
|
343
|
+
ser=#[2];
|
|
344
|
+
}
|
|
345
|
+
homo=homog(i);
|
|
346
|
+
if(homo==1)
|
|
347
|
+
{
|
|
348
|
+
if(attrib(i,"isSB")!=1)
|
|
349
|
+
{
|
|
350
|
+
tras=modStd(i, exactness);
|
|
351
|
+
ltras=tras,tras;
|
|
352
|
+
attrib(ltras[1],"isSB",1);
|
|
353
|
+
}
|
|
354
|
+
else
|
|
355
|
+
{
|
|
356
|
+
ltras=i,i;
|
|
357
|
+
attrib(ltras[1],"isSB",1);
|
|
358
|
+
}
|
|
359
|
+
tras=ltras[1];
|
|
360
|
+
attrib(tras,"isSB",1);
|
|
361
|
+
if((dim(tras)==0))
|
|
362
|
+
{
|
|
363
|
+
primary[1]=ltras[2];
|
|
364
|
+
primary[2]=maxideal(1);
|
|
365
|
+
return(primary);
|
|
366
|
+
}
|
|
367
|
+
for(@n=1;@n<=nvars(basering);@n++)
|
|
368
|
+
{
|
|
369
|
+
@w[@n]=ord(var(@n));
|
|
370
|
+
}
|
|
371
|
+
intvec @hilb=hilb(tras,1,@w);
|
|
372
|
+
intvec keephilb=@hilb;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
//----------------------------------------------------------------
|
|
376
|
+
//i is the zero-ideal
|
|
377
|
+
//----------------------------------------------------------------
|
|
378
|
+
|
|
379
|
+
if(size(i)==0)
|
|
380
|
+
{
|
|
381
|
+
primary=ideal(0),ideal(0);
|
|
382
|
+
return(primary);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
//----------------------------------------------------------------
|
|
386
|
+
//pass to the lexicographical ordering and compute a standardbasis
|
|
387
|
+
//----------------------------------------------------------------
|
|
388
|
+
|
|
389
|
+
int lp=Primdec::islp();
|
|
390
|
+
|
|
391
|
+
execute("ring gnir = ("+charstr(basering)+"),("+varstr(basering)+"),(C,lp);");
|
|
392
|
+
op=option(get);
|
|
393
|
+
option(redSB);
|
|
394
|
+
|
|
395
|
+
ideal ser=fetch(@P,ser);
|
|
396
|
+
|
|
397
|
+
if(homo==1)
|
|
398
|
+
{
|
|
399
|
+
if(!lp)
|
|
400
|
+
{
|
|
401
|
+
ideal @j=modStdHilb(fetch(@P,i),@hilb,@w,exactness);
|
|
402
|
+
}
|
|
403
|
+
else
|
|
404
|
+
{
|
|
405
|
+
ideal @j=fetch(@P,tras);
|
|
406
|
+
attrib(@j,"isSB",1);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else
|
|
410
|
+
{
|
|
411
|
+
if(lp&&isS)
|
|
412
|
+
{
|
|
413
|
+
ideal @j=fetch(@P,i);
|
|
414
|
+
attrib(@j,"isSB",1);
|
|
415
|
+
}
|
|
416
|
+
else
|
|
417
|
+
{
|
|
418
|
+
ideal @j=modStd(fetch(@P,i), exactness);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
option(set,op);
|
|
422
|
+
if(seri==1)
|
|
423
|
+
{
|
|
424
|
+
ideal peek=fetch(@P,peek);
|
|
425
|
+
attrib(peek,"isSB",1);
|
|
426
|
+
}
|
|
427
|
+
else
|
|
428
|
+
{
|
|
429
|
+
ideal peek=@j;
|
|
430
|
+
}
|
|
431
|
+
if((size(ser)==0))
|
|
432
|
+
{
|
|
433
|
+
ideal fried;
|
|
434
|
+
@n=size(@j);
|
|
435
|
+
for(@k=1;@k<=@n;@k++)
|
|
436
|
+
{
|
|
437
|
+
if(deg(lead(@j[@k]))==1)
|
|
438
|
+
{
|
|
439
|
+
fried[size(fried)+1]=@j[@k];
|
|
440
|
+
@j[@k]=0;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
if(size(fried)==nvars(basering))
|
|
444
|
+
{
|
|
445
|
+
setring @P;
|
|
446
|
+
primary[1]=i;
|
|
447
|
+
primary[2]=i;
|
|
448
|
+
return(primary);
|
|
449
|
+
}
|
|
450
|
+
if(size(fried)>0)
|
|
451
|
+
{
|
|
452
|
+
string newva;
|
|
453
|
+
string newma;
|
|
454
|
+
poly f;
|
|
455
|
+
for(@k=1;@k<=nvars(basering);@k++)
|
|
456
|
+
{
|
|
457
|
+
@n1=0;
|
|
458
|
+
for(@n=1;@n<=size(fried);@n++)
|
|
459
|
+
{
|
|
460
|
+
if(leadmonom(fried[@n])==var(@k))
|
|
461
|
+
{
|
|
462
|
+
@n1=1;
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
if(@n1==0)
|
|
467
|
+
{
|
|
468
|
+
newva=newva+string(var(@k))+",";
|
|
469
|
+
newma=newma+string(var(@k))+",";
|
|
470
|
+
}
|
|
471
|
+
else
|
|
472
|
+
{
|
|
473
|
+
newma=newma+string(0)+",";
|
|
474
|
+
fried[@n]=fried[@n]/leadcoef(fried[@n]);
|
|
475
|
+
f=fried[@n]-lead(fried[@n]);
|
|
476
|
+
@j=subst(@j,var(@k),-f);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
newva[size(newva)]=")";
|
|
480
|
+
newma[size(newma)]=";";
|
|
481
|
+
execute("ring @deirf=("+charstr(gnir)+"),("+newva+",lp;");
|
|
482
|
+
execute("map @kappa=gnir,"+newma);
|
|
483
|
+
ideal @j= @kappa(@j);
|
|
484
|
+
@j=modStd(@j, exactness);
|
|
485
|
+
|
|
486
|
+
list pr=decomp_parallel(@j, exactness, mod_only);
|
|
487
|
+
setring gnir;
|
|
488
|
+
list pr=imap(@deirf,pr);
|
|
489
|
+
for(@k=1;@k<=size(pr);@k++)
|
|
490
|
+
{
|
|
491
|
+
@j=pr[@k]+fried;
|
|
492
|
+
pr[@k]=@j;
|
|
493
|
+
}
|
|
494
|
+
setring @P;
|
|
495
|
+
primary=imap(gnir,pr);
|
|
496
|
+
return(primary);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
//----------------------------------------------------------------
|
|
500
|
+
//j is the ring
|
|
501
|
+
//----------------------------------------------------------------
|
|
502
|
+
|
|
503
|
+
if (dim(@j)==-1)
|
|
504
|
+
{
|
|
505
|
+
setring @P;
|
|
506
|
+
primary=ideal(1),ideal(1);
|
|
507
|
+
return(primary);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
//----------------------------------------------------------------
|
|
511
|
+
// the case of one variable
|
|
512
|
+
//----------------------------------------------------------------
|
|
513
|
+
|
|
514
|
+
if(nvars(basering)==1)
|
|
515
|
+
{
|
|
516
|
+
list fac=Primdec::factor(@j[1]);
|
|
517
|
+
list gprimary;
|
|
518
|
+
for(@k=1;@k<=size(fac[1]);@k++)
|
|
519
|
+
{
|
|
520
|
+
gprimary[2*@k-1]=ideal(fac[1][@k]^fac[2][@k]);
|
|
521
|
+
gprimary[2*@k]=ideal(fac[1][@k]);
|
|
522
|
+
}
|
|
523
|
+
setring @P;
|
|
524
|
+
primary=fetch(gnir,gprimary);
|
|
525
|
+
return(primary);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
//------------------------------------------------------------------
|
|
529
|
+
//the zero-dimensional case
|
|
530
|
+
//------------------------------------------------------------------
|
|
531
|
+
if (dim(@j)==0)
|
|
532
|
+
{
|
|
533
|
+
op=option(get);
|
|
534
|
+
option(redSB);
|
|
535
|
+
list gprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
|
|
536
|
+
|
|
537
|
+
setring @P;
|
|
538
|
+
primary=fetch(gnir,gprimary);
|
|
539
|
+
|
|
540
|
+
if(size(ser)>0)
|
|
541
|
+
{
|
|
542
|
+
primary=Primdec::cleanPrimary(primary);
|
|
543
|
+
}
|
|
544
|
+
option(set,op);
|
|
545
|
+
return(primary);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
poly @gs,@gh,@p;
|
|
549
|
+
string @va;
|
|
550
|
+
list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep;
|
|
551
|
+
ideal @h;
|
|
552
|
+
int jdim=dim(@j);
|
|
553
|
+
list fett;
|
|
554
|
+
int lauf,di,newtest;
|
|
555
|
+
//------------------------------------------------------------------
|
|
556
|
+
//search for a maximal independent set indep,i.e.
|
|
557
|
+
//look for subring such that the intersection with the ideal is zero
|
|
558
|
+
//j intersected with K[var(indep[3]+1),...,var(nvar] is zero,
|
|
559
|
+
//indep[1] is the new varstring and indep[2] the string for block-ordering
|
|
560
|
+
//------------------------------------------------------------------
|
|
561
|
+
allindep=Primdec::independSet(@j);
|
|
562
|
+
for(@m=1;@m<=size(allindep);@m++)
|
|
563
|
+
{
|
|
564
|
+
if(allindep[@m][3]==jdim)
|
|
565
|
+
{
|
|
566
|
+
di++;
|
|
567
|
+
indep[di]=allindep[@m];
|
|
568
|
+
}
|
|
569
|
+
else
|
|
570
|
+
{
|
|
571
|
+
lauf++;
|
|
572
|
+
restindep[lauf]=allindep[@m];
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
ideal jkeep=@j;
|
|
577
|
+
if(ordstr(@P)[1]=="w")
|
|
578
|
+
{
|
|
579
|
+
execute("ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),("+ordstr(@P)+");");
|
|
580
|
+
}
|
|
581
|
+
else
|
|
582
|
+
{
|
|
583
|
+
execute( "ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),(C,dp);");
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
if(homo==1)
|
|
587
|
+
{
|
|
588
|
+
if((ordstr(@P)[3]=="d")||(ordstr(@P)[1]=="d")||(ordstr(@P)[1]=="w")
|
|
589
|
+
||(ordstr(@P)[3]=="w"))
|
|
590
|
+
{
|
|
591
|
+
ideal jwork=imap(@P,tras);
|
|
592
|
+
attrib(jwork,"isSB",1);
|
|
593
|
+
}
|
|
594
|
+
else
|
|
595
|
+
{
|
|
596
|
+
ideal jwork=modStdHilb(imap(gnir,@j),@hilb,@w,exactness);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
else
|
|
600
|
+
{
|
|
601
|
+
ideal jwork=modStd(imap(gnir,@j), exactness);
|
|
602
|
+
}
|
|
603
|
+
list hquprimary;
|
|
604
|
+
poly @p,@q;
|
|
605
|
+
ideal @h,fac,ser;
|
|
606
|
+
ideal @Ptest=1;
|
|
607
|
+
di=dim(jwork);
|
|
608
|
+
keepdi=di;
|
|
609
|
+
|
|
610
|
+
setring gnir;
|
|
611
|
+
for(@m=1;@m<=size(indep);@m++)
|
|
612
|
+
{
|
|
613
|
+
isat=0;
|
|
614
|
+
@n2=0;
|
|
615
|
+
if((indep[@m][1]==varstr(basering))&&(@m==1))
|
|
616
|
+
//this is the good case, nothing to do, just to have the same notations
|
|
617
|
+
//change the ring
|
|
618
|
+
{
|
|
619
|
+
execute("ring gnir1 = ("+charstr(basering)+"),("+varstr(basering)+"),("
|
|
620
|
+
+ordstr(basering)+");");
|
|
621
|
+
ideal @j=fetch(gnir,@j);
|
|
622
|
+
attrib(@j,"isSB",1);
|
|
623
|
+
ideal ser=fetch(gnir,ser);
|
|
624
|
+
}
|
|
625
|
+
else
|
|
626
|
+
{
|
|
627
|
+
@va=string(maxideal(1));
|
|
628
|
+
if(@m==1)
|
|
629
|
+
{
|
|
630
|
+
@j=fetch(@P,i);
|
|
631
|
+
}
|
|
632
|
+
execute("ring gnir1 = ("+charstr(basering)+"),("+indep[@m][1]+"),("
|
|
633
|
+
+indep[@m][2]+");");
|
|
634
|
+
execute("map phi=gnir,"+@va+";");
|
|
635
|
+
op=option(get);
|
|
636
|
+
option(redSB);
|
|
637
|
+
if(homo==1)
|
|
638
|
+
{
|
|
639
|
+
ideal @j=modStdHilb(phi(@j),@hilb,@w,exactness);
|
|
640
|
+
}
|
|
641
|
+
else
|
|
642
|
+
{
|
|
643
|
+
ideal @j=modStd(phi(@j), exactness);
|
|
644
|
+
}
|
|
645
|
+
ideal ser=phi(ser);
|
|
646
|
+
|
|
647
|
+
option(set,op);
|
|
648
|
+
}
|
|
649
|
+
if((deg(@j[1])==0)||(dim(@j)<jdim))
|
|
650
|
+
{
|
|
651
|
+
setring gnir;
|
|
652
|
+
break;
|
|
653
|
+
}
|
|
654
|
+
for (lauf=1;lauf<=size(@j);lauf++)
|
|
655
|
+
{
|
|
656
|
+
fett[lauf]=size(@j[lauf]);
|
|
657
|
+
}
|
|
658
|
+
//------------------------------------------------------------------------
|
|
659
|
+
//we have now the following situation:
|
|
660
|
+
//j intersected with K[var(nnp+1),..,var(nva)] is zero so we may pass
|
|
661
|
+
//to this quotientring, j is their still a standardbasis, the
|
|
662
|
+
//leading coefficients of the polynomials there (polynomials in
|
|
663
|
+
//K[var(nnp+1),..,var(nva)]) are collected in the list h,
|
|
664
|
+
//we need their ggt, gh, because of the following: let
|
|
665
|
+
//(j:gh^n)=(j:gh^infinity) then j*K(var(nnp+1),..,var(nva))[..the rest..]
|
|
666
|
+
//intersected with K[var(1),...,var(nva)] is (j:gh^n)
|
|
667
|
+
//on the other hand j=(j,gh^n) intersected with (j:gh^n)
|
|
668
|
+
|
|
669
|
+
//------------------------------------------------------------------------
|
|
670
|
+
|
|
671
|
+
//arrangement for quotientring K(var(nnp+1),..,var(nva))[..the rest..] and
|
|
672
|
+
//map phi:K[var(1),...,var(nva)] --->K(var(nnpr+1),..,var(nva))[..rest..]
|
|
673
|
+
//------------------------------------------------------------------------
|
|
674
|
+
|
|
675
|
+
def quotring=Primdec::prepareQuotientring(nvars(basering)-indep[@m][3],"lp");
|
|
676
|
+
|
|
677
|
+
//---------------------------------------------------------------------
|
|
678
|
+
//we pass to the quotientring K(var(nnp+1),..,var(nva))[..the rest..]
|
|
679
|
+
//---------------------------------------------------------------------
|
|
680
|
+
|
|
681
|
+
ideal @jj=lead(@j); //!! vorn vereinbaren
|
|
682
|
+
setring quotring;
|
|
683
|
+
|
|
684
|
+
ideal @jj=imap(gnir1,@jj);
|
|
685
|
+
@vv=Primdec::clearSBNeu(@jj,fett); //!! vorn vereinbaren
|
|
686
|
+
setring gnir1;
|
|
687
|
+
@k=size(@j);
|
|
688
|
+
for (lauf=1;lauf<=@k;lauf++)
|
|
689
|
+
{
|
|
690
|
+
if(@vv[lauf]==1)
|
|
691
|
+
{
|
|
692
|
+
@j[lauf]=0;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
@j=simplify(@j,2);
|
|
696
|
+
setring quotring;
|
|
697
|
+
// @j considered in the quotientring
|
|
698
|
+
ideal @j=imap(gnir1,@j);
|
|
699
|
+
|
|
700
|
+
ideal ser=imap(gnir1,ser);
|
|
701
|
+
|
|
702
|
+
kill gnir1;
|
|
703
|
+
|
|
704
|
+
//j is a standardbasis in the quotientring but usually not minimal
|
|
705
|
+
//here it becomes minimal
|
|
706
|
+
|
|
707
|
+
attrib(@j,"isSB",1);
|
|
708
|
+
|
|
709
|
+
//we need later ggt(h[1],...)=gh for saturation
|
|
710
|
+
ideal @h;
|
|
711
|
+
if(deg(@j[1])>0)
|
|
712
|
+
{
|
|
713
|
+
for(@n=1;@n<=size(@j);@n++)
|
|
714
|
+
{
|
|
715
|
+
@h[@n]=leadcoef(@j[@n]);
|
|
716
|
+
}
|
|
717
|
+
//the primary decomposition of j*K(var(nnp+1),..,var(nva))[..the rest..]
|
|
718
|
+
op=option(get);
|
|
719
|
+
option(redSB);
|
|
720
|
+
|
|
721
|
+
list uprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
|
|
722
|
+
option(set,op);
|
|
723
|
+
}
|
|
724
|
+
else
|
|
725
|
+
{
|
|
726
|
+
list uprimary;
|
|
727
|
+
uprimary[1]=ideal(1);
|
|
728
|
+
uprimary[2]=ideal(1);
|
|
729
|
+
}
|
|
730
|
+
//we need the intersection of the ideals in the list quprimary with the
|
|
731
|
+
//polynomialring, i.e. let q=(f1,...,fr) in the quotientring such an ideal
|
|
732
|
+
//but fi polynomials, then the intersection of q with the polynomialring
|
|
733
|
+
//is the saturation of the ideal generated by f1,...,fr with respect to
|
|
734
|
+
//h which is the lcm of the leading coefficients of the fi considered in
|
|
735
|
+
//in the quotientring: this is coded in saturn
|
|
736
|
+
|
|
737
|
+
list saturn;
|
|
738
|
+
ideal hpl;
|
|
739
|
+
|
|
740
|
+
for(@n=1;@n<=size(uprimary);@n++)
|
|
741
|
+
{
|
|
742
|
+
uprimary[@n]=interred(uprimary[@n]); // temporary fix
|
|
743
|
+
hpl=0;
|
|
744
|
+
for(@n1=1;@n1<=size(uprimary[@n]);@n1++)
|
|
745
|
+
{
|
|
746
|
+
hpl=hpl,leadcoef(uprimary[@n][@n1]);
|
|
747
|
+
}
|
|
748
|
+
saturn[@n]=hpl;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
//--------------------------------------------------------------------
|
|
752
|
+
//we leave the quotientring K(var(nnp+1),..,var(nva))[..the rest..]
|
|
753
|
+
//back to the polynomialring
|
|
754
|
+
//---------------------------------------------------------------------
|
|
755
|
+
setring gnir;
|
|
756
|
+
|
|
757
|
+
collectprimary=imap(quotring,uprimary);
|
|
758
|
+
lsau=imap(quotring,saturn);
|
|
759
|
+
@h=imap(quotring,@h);
|
|
760
|
+
|
|
761
|
+
kill quotring;
|
|
762
|
+
|
|
763
|
+
@n2=size(quprimary);
|
|
764
|
+
@n3=@n2;
|
|
765
|
+
|
|
766
|
+
for(@n1=1;@n1<=size(collectprimary) div 2;@n1++)
|
|
767
|
+
{
|
|
768
|
+
if(deg(collectprimary[2*@n1][1])>0)
|
|
769
|
+
{
|
|
770
|
+
@n2++;
|
|
771
|
+
quprimary[@n2]=collectprimary[2*@n1-1];
|
|
772
|
+
lnew[@n2]=lsau[2*@n1-1];
|
|
773
|
+
@n2++;
|
|
774
|
+
lnew[@n2]=lsau[2*@n1];
|
|
775
|
+
quprimary[@n2]=collectprimary[2*@n1];
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
//here the intersection with the polynomialring
|
|
779
|
+
//mentioned above is really computed
|
|
780
|
+
for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
|
|
781
|
+
{
|
|
782
|
+
task t(@n) = "Modprimdec::sat_component",
|
|
783
|
+
list(quprimary[2*@n-1], quprimary[2*@n], lnew[2*@n-1], lnew[2*@n]);
|
|
784
|
+
}
|
|
785
|
+
if(@n2 > @n3)
|
|
786
|
+
{
|
|
787
|
+
startTasks(t((@n3 div 2+1)..(@n2 div 2)));
|
|
788
|
+
waitAllTasks(t((@n3 div 2+1)..(@n2 div 2)));
|
|
789
|
+
}
|
|
790
|
+
for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
|
|
791
|
+
{
|
|
792
|
+
quprimary[2*@n-1] = getResult(t(@n))[1];
|
|
793
|
+
quprimary[2*@n] = getResult(t(@n))[2];
|
|
794
|
+
killTask(t(@n));
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
if(size(@h)>0)
|
|
798
|
+
{
|
|
799
|
+
//---------------------------------------------------------------
|
|
800
|
+
//we change to @Phelp to have the ordering dp for saturation
|
|
801
|
+
//---------------------------------------------------------------
|
|
802
|
+
setring @Phelp;
|
|
803
|
+
@h=imap(gnir,@h);
|
|
804
|
+
if(defined(@LL)){kill @LL;}
|
|
805
|
+
list @LL=minSat_parallel(jwork,@h,exactness);
|
|
806
|
+
@Ptest=intersect(@Ptest,@LL[1]);
|
|
807
|
+
@q=@LL[2];
|
|
808
|
+
jwork=jwork,@q;
|
|
809
|
+
jwork=modStd(jwork, exactness);
|
|
810
|
+
keepdi=dim(jwork);
|
|
811
|
+
if(keepdi<di)
|
|
812
|
+
{
|
|
813
|
+
setring gnir;
|
|
814
|
+
@j=imap(@Phelp,jwork);
|
|
815
|
+
break;
|
|
816
|
+
}
|
|
817
|
+
if(homo==1)
|
|
818
|
+
{
|
|
819
|
+
@hilb=hilb(jwork,1,@w);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
setring gnir;
|
|
823
|
+
@j=imap(@Phelp,jwork);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
if((size(quprimary)==0))
|
|
828
|
+
{
|
|
829
|
+
keepdi=di-1;
|
|
830
|
+
quprimary[1]=ideal(1);
|
|
831
|
+
quprimary[2]=ideal(1);
|
|
832
|
+
}
|
|
833
|
+
//---------------------------------------------------------------
|
|
834
|
+
//notice that j=sat(j,gh) intersected with (j,gh^n)
|
|
835
|
+
//we finished with sat(j,gh) and have to start with (j,gh^n)
|
|
836
|
+
//---------------------------------------------------------------
|
|
837
|
+
if((deg(@j[1])!=0))
|
|
838
|
+
{
|
|
839
|
+
if(size(quprimary)>0)
|
|
840
|
+
{
|
|
841
|
+
setring @Phelp;
|
|
842
|
+
ser=imap(gnir,ser);
|
|
843
|
+
hquprimary=imap(gnir,quprimary);
|
|
844
|
+
ideal htest=@Ptest;
|
|
845
|
+
|
|
846
|
+
if(size(ser)>0)
|
|
847
|
+
{
|
|
848
|
+
ser=intersect(htest,ser);
|
|
849
|
+
}
|
|
850
|
+
else
|
|
851
|
+
{
|
|
852
|
+
ser=htest;
|
|
853
|
+
}
|
|
854
|
+
setring gnir;
|
|
855
|
+
ser=imap(@Phelp,ser);
|
|
856
|
+
}
|
|
857
|
+
if(size(reduce(ser,peek,1))!=0)
|
|
858
|
+
{
|
|
859
|
+
for(@m=1;@m<=size(restindep);@m++)
|
|
860
|
+
{
|
|
861
|
+
isat=0;
|
|
862
|
+
@n2=0;
|
|
863
|
+
|
|
864
|
+
if(restindep[@m][1]==varstr(basering))
|
|
865
|
+
//the good case, nothing to do, just to have the same notations
|
|
866
|
+
//change the ring
|
|
867
|
+
{
|
|
868
|
+
execute("ring gnir1 = ("+charstr(basering)+"),("+
|
|
869
|
+
varstr(basering)+"),("+ordstr(basering)+");");
|
|
870
|
+
ideal @j=fetch(gnir,jkeep);
|
|
871
|
+
attrib(@j,"isSB",1);
|
|
872
|
+
}
|
|
873
|
+
else
|
|
874
|
+
{
|
|
875
|
+
@va=string(maxideal(1));
|
|
876
|
+
execute("ring gnir1 = ("+charstr(basering)+"),("+
|
|
877
|
+
restindep[@m][1]+"),(" +restindep[@m][2]+");");
|
|
878
|
+
execute("map phi=gnir,"+@va+";");
|
|
879
|
+
op=option(get);
|
|
880
|
+
option(redSB);
|
|
881
|
+
if(homo==1)
|
|
882
|
+
{
|
|
883
|
+
ideal @j=modStdHilb(phi(jkeep),keephilb,@w,exactness);
|
|
884
|
+
}
|
|
885
|
+
else
|
|
886
|
+
{
|
|
887
|
+
ideal @j=modStd(phi(jkeep), exactness);
|
|
888
|
+
}
|
|
889
|
+
ideal ser=phi(ser);
|
|
890
|
+
option(set,op);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
for (lauf=1;lauf<=size(@j);lauf++)
|
|
894
|
+
{
|
|
895
|
+
fett[lauf]=size(@j[lauf]);
|
|
896
|
+
}
|
|
897
|
+
//------------------------------------------------------------------
|
|
898
|
+
//we have now the following situation:
|
|
899
|
+
//j intersected with K[var(nnp+1),..,var(nva)] is zero so we may
|
|
900
|
+
//pass to this quotientring, j is their still a standardbasis, the
|
|
901
|
+
//leading coefficients of the polynomials there (polynomials in
|
|
902
|
+
//K[var(nnp+1),..,var(nva)]) are collected in the list h,
|
|
903
|
+
//we need their ggt, gh, because of the following:
|
|
904
|
+
//let (j:gh^n)=(j:gh^infinity) then
|
|
905
|
+
//j*K(var(nnp+1),..,var(nva))[..the rest..]
|
|
906
|
+
//intersected with K[var(1),...,var(nva)] is (j:gh^n)
|
|
907
|
+
//on the other hand j=(j,gh^n) intersected with (j:gh^n)
|
|
908
|
+
|
|
909
|
+
//------------------------------------------------------------------
|
|
910
|
+
|
|
911
|
+
//the arrangement for the quotientring
|
|
912
|
+
// K(var(nnp+1),..,var(nva))[..the rest..]
|
|
913
|
+
//and the map phi:K[var(1),...,var(nva)] ---->
|
|
914
|
+
//--->K(var(nnpr+1),..,var(nva))[..the rest..]
|
|
915
|
+
//------------------------------------------------------------------
|
|
916
|
+
|
|
917
|
+
def quotring=
|
|
918
|
+
Primdec::prepareQuotientring(nvars(basering)-restindep[@m][3],
|
|
919
|
+
"lp");
|
|
920
|
+
|
|
921
|
+
//------------------------------------------------------------------
|
|
922
|
+
//we pass to the quotientring K(var(nnp+1),..,var(nva))[..rest..]
|
|
923
|
+
//------------------------------------------------------------------
|
|
924
|
+
|
|
925
|
+
setring quotring;
|
|
926
|
+
|
|
927
|
+
// @j considered in the quotientring
|
|
928
|
+
ideal @j=imap(gnir1,@j);
|
|
929
|
+
ideal ser=imap(gnir1,ser);
|
|
930
|
+
|
|
931
|
+
kill gnir1;
|
|
932
|
+
|
|
933
|
+
//j is a standardbasis in the quotientring but usually not minimal
|
|
934
|
+
//here it becomes minimal
|
|
935
|
+
@j=Primdec::clearSB(@j,fett);
|
|
936
|
+
attrib(@j,"isSB",1);
|
|
937
|
+
|
|
938
|
+
//we need later ggt(h[1],...)=gh for saturation
|
|
939
|
+
ideal @h;
|
|
940
|
+
|
|
941
|
+
for(@n=1;@n<=size(@j);@n++)
|
|
942
|
+
{
|
|
943
|
+
@h[@n]=leadcoef(@j[@n]);
|
|
944
|
+
}
|
|
945
|
+
//the primary decomposition of j*K(var(nnp+1),..,var(nva))[..rest..]
|
|
946
|
+
|
|
947
|
+
op=option(get);
|
|
948
|
+
option(redSB);
|
|
949
|
+
list uprimary = zero_decomp_parallel(@j, ser, exactness, mod_only);
|
|
950
|
+
option(set,op);
|
|
951
|
+
|
|
952
|
+
//we need the intersection of the ideals in the list quprimary with
|
|
953
|
+
//the polynomialring, i.e. let q=(f1,...,fr) in the quotientring
|
|
954
|
+
//such an ideal but fi polynomials, then the intersection of q with
|
|
955
|
+
//the polynomialring is the saturation of the ideal generated by
|
|
956
|
+
//f1,...,fr with respect toh which is the lcm of the leading
|
|
957
|
+
//coefficients of the fi considered in the quotientring:
|
|
958
|
+
//this is coded in saturn
|
|
959
|
+
|
|
960
|
+
list saturn;
|
|
961
|
+
ideal hpl;
|
|
962
|
+
|
|
963
|
+
for(@n=1;@n<=size(uprimary);@n++)
|
|
964
|
+
{
|
|
965
|
+
hpl=0;
|
|
966
|
+
for(@n1=1;@n1<=size(uprimary[@n]);@n1++)
|
|
967
|
+
{
|
|
968
|
+
hpl=hpl,leadcoef(uprimary[@n][@n1]);
|
|
969
|
+
}
|
|
970
|
+
saturn[@n]=hpl;
|
|
971
|
+
}
|
|
972
|
+
//------------------------------------------------------------------
|
|
973
|
+
//we leave the quotientring K(var(nnp+1),..,var(nva))[..rest..]
|
|
974
|
+
//back to the polynomialring
|
|
975
|
+
//------------------------------------------------------------------
|
|
976
|
+
setring gnir;
|
|
977
|
+
collectprimary=imap(quotring,uprimary);
|
|
978
|
+
lsau=imap(quotring,saturn);
|
|
979
|
+
@h=imap(quotring,@h);
|
|
980
|
+
|
|
981
|
+
kill quotring;
|
|
982
|
+
|
|
983
|
+
@n2=size(quprimary);
|
|
984
|
+
@n3=@n2;
|
|
985
|
+
|
|
986
|
+
for(@n1=1;@n1<=size(collectprimary) div 2;@n1++)
|
|
987
|
+
{
|
|
988
|
+
if(deg(collectprimary[2*@n1][1])>0)
|
|
989
|
+
{
|
|
990
|
+
@n2++;
|
|
991
|
+
quprimary[@n2]=collectprimary[2*@n1-1];
|
|
992
|
+
lnew[@n2]=lsau[2*@n1-1];
|
|
993
|
+
@n2++;
|
|
994
|
+
lnew[@n2]=lsau[2*@n1];
|
|
995
|
+
quprimary[@n2]=collectprimary[2*@n1];
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
|
|
1000
|
+
//here the intersection with the polynomialring
|
|
1001
|
+
//mentioned above is really computed
|
|
1002
|
+
|
|
1003
|
+
for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
|
|
1004
|
+
{
|
|
1005
|
+
task t(@n) = "Modprimdec::sat_component",
|
|
1006
|
+
list(quprimary[2*@n-1], quprimary[2*@n], lnew[2*@n-1], lnew[2*@n]);
|
|
1007
|
+
}
|
|
1008
|
+
if(@n2 > @n3)
|
|
1009
|
+
{
|
|
1010
|
+
startTasks(t((@n3 div 2+1)..(@n2 div 2)));
|
|
1011
|
+
waitAllTasks(t((@n3 div 2+1)..(@n2 div 2)));
|
|
1012
|
+
}
|
|
1013
|
+
for(@n = @n3 div 2+1; @n <= @n2 div 2; @n++)
|
|
1014
|
+
{
|
|
1015
|
+
quprimary[2*@n-1] = getResult(t(@n))[1];
|
|
1016
|
+
quprimary[2*@n] = getResult(t(@n))[2];
|
|
1017
|
+
killTask(t(@n));
|
|
1018
|
+
}
|
|
1019
|
+
if(@n2>=@n3+2)
|
|
1020
|
+
{
|
|
1021
|
+
setring @Phelp;
|
|
1022
|
+
ser=imap(gnir,ser);
|
|
1023
|
+
hquprimary=imap(gnir,quprimary);
|
|
1024
|
+
for(@n=@n3 div 2+1;@n<=@n2 div 2;@n++)
|
|
1025
|
+
{
|
|
1026
|
+
ser=intersect(ser,hquprimary[2*@n-1]);
|
|
1027
|
+
}
|
|
1028
|
+
setring gnir;
|
|
1029
|
+
ser=imap(@Phelp,ser);
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
if(size(reduce(ser,peek,1))!=0)
|
|
1033
|
+
{
|
|
1034
|
+
htprimary=decomp_parallel(@j, exactness, mod_only, peek, ser);
|
|
1035
|
+
// here we collect now both results primary(sat(j,gh))
|
|
1036
|
+
// and primary(j,gh^n)
|
|
1037
|
+
@n=size(quprimary);
|
|
1038
|
+
for (@k=1;@k<=size(htprimary);@k++)
|
|
1039
|
+
{
|
|
1040
|
+
quprimary[@n+@k]=htprimary[@k];
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
//---------------------------------------------------------------------------
|
|
1046
|
+
//back to the ring we started with
|
|
1047
|
+
//the final result: primary
|
|
1048
|
+
//---------------------------------------------------------------------------
|
|
1049
|
+
setring @P;
|
|
1050
|
+
primary=imap(gnir,quprimary);
|
|
1051
|
+
primary=Primdec::cleanPrimary(primary);
|
|
1052
|
+
return(primary);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
static proc primdecGTZ_wrapper(ideal i, int exactness, int mod_only, list #)
|
|
1056
|
+
"USAGE: primdecGTZ_wrapper(i, exactness); i ideal, exactness int
|
|
1057
|
+
RETURN: a list pr of primary ideals and their associated primes:
|
|
1058
|
+
@format
|
|
1059
|
+
pr[i][1] the i-th primary component,
|
|
1060
|
+
pr[i][2] the i-th prime component.
|
|
1061
|
+
@end format
|
|
1062
|
+
NOTE: - Parallel version of the algorithm of Gianni/Trager/Zacharias.
|
|
1063
|
+
- Works in characteristic 0 only.
|
|
1064
|
+
- For local orderings, the result is considered in the localization
|
|
1065
|
+
of the polynomial ring, not in the power series ring
|
|
1066
|
+
- For local and mixed orderings, the decomposition in the
|
|
1067
|
+
corresponding global ring is returned if the string 'global'
|
|
1068
|
+
is specified as second argument
|
|
1069
|
+
- Returns a primary decomposition of i for sure if exactness != 0, and
|
|
1070
|
+
with high probability, otherwise.
|
|
1071
|
+
|
|
1072
|
+
EXAMPLE: example primdecGTZ_wrapper; shows an example
|
|
1073
|
+
"
|
|
1074
|
+
{
|
|
1075
|
+
if(char(basering) != 0)
|
|
1076
|
+
{
|
|
1077
|
+
ERROR("The characteristic must be zero.");
|
|
1078
|
+
}
|
|
1079
|
+
if(size(#)>0)
|
|
1080
|
+
{
|
|
1081
|
+
int keep_comp=1;
|
|
1082
|
+
}
|
|
1083
|
+
if(attrib(basering,"global")!=1)
|
|
1084
|
+
{
|
|
1085
|
+
// algorithms only work in global case!
|
|
1086
|
+
// pass to appropriate global ring
|
|
1087
|
+
def r=basering;
|
|
1088
|
+
def s=changeord(list(list("dp",1:nvars(basering))));
|
|
1089
|
+
setring s;
|
|
1090
|
+
ideal i=imap(r,i);
|
|
1091
|
+
// decompose and go back
|
|
1092
|
+
list li=primdecGTZ_wrapper(i, exactness, mod_only);
|
|
1093
|
+
setring r;
|
|
1094
|
+
def li=imap(s,li);
|
|
1095
|
+
// clean up
|
|
1096
|
+
if(!defined(keep_comp))
|
|
1097
|
+
{
|
|
1098
|
+
for(int k=size(li);k>=1;k--)
|
|
1099
|
+
{
|
|
1100
|
+
if(mindeg(std(lead(li[k][2]))[1])==0)
|
|
1101
|
+
{
|
|
1102
|
+
// 1 contained in ideal, i.e. component does not meet origin in local ordering
|
|
1103
|
+
li=delete(li,k);
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
return(li);
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
i=simplify(i,2); // erase 0-generators
|
|
1111
|
+
if (ncols(i) >= 1) {
|
|
1112
|
+
if ((i[1]==0)||(i[1]==1))
|
|
1113
|
+
{
|
|
1114
|
+
list L = list(ideal(i[1]), ideal(i[1]) );
|
|
1115
|
+
return(list(L));
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
if((ncols(i)==1)&&(attrib(basering,"ring_cf")==0)) // handle principal ideal
|
|
1119
|
+
{
|
|
1120
|
+
list @fac=factorize(i[1],2);
|
|
1121
|
+
list result;
|
|
1122
|
+
for(int @i=size(@fac[1]);@i>0;@i--)
|
|
1123
|
+
{
|
|
1124
|
+
result[@i]=list(ideal(@fac[1][@i]^@fac[2][@i]),
|
|
1125
|
+
ideal(@fac[1][@i]));
|
|
1126
|
+
}
|
|
1127
|
+
return(result);
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
if(minpoly!=0)
|
|
1131
|
+
{
|
|
1132
|
+
return(Primdec::algeDeco(i,0));
|
|
1133
|
+
}
|
|
1134
|
+
return(Primdec::convList(decomp_parallel(i, exactness, mod_only)));
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
/* mod_only == 0: try both zero_decomp() and zero_decomp_modular() in parallel
|
|
1138
|
+
* (default).
|
|
1139
|
+
* mod_only != 0: try only zero_decomp_modular().
|
|
1140
|
+
*/
|
|
1141
|
+
static proc zero_decomp_parallel(ideal j, ideal ser, int exactness,
|
|
1142
|
+
int mod_only)
|
|
1143
|
+
{
|
|
1144
|
+
list result;
|
|
1145
|
+
if(mod_only)
|
|
1146
|
+
{
|
|
1147
|
+
result = zero_decomp_modular(j, ser, exactness);
|
|
1148
|
+
}
|
|
1149
|
+
else
|
|
1150
|
+
{
|
|
1151
|
+
task t_standard = "zero_decomp", list(j, ser, 0);
|
|
1152
|
+
task t_modular = "Modprimdec::zero_decomp_modular",
|
|
1153
|
+
list(j, ser, exactness);
|
|
1154
|
+
startTasks(t_standard, t_modular);
|
|
1155
|
+
list finished = waitTasks(list(t_standard, t_modular), 1);
|
|
1156
|
+
if(finished[1] == 1)
|
|
1157
|
+
{
|
|
1158
|
+
result = getResult(t_standard);
|
|
1159
|
+
}
|
|
1160
|
+
else
|
|
1161
|
+
{
|
|
1162
|
+
result = getResult(t_modular);
|
|
1163
|
+
}
|
|
1164
|
+
killTask(t_standard);
|
|
1165
|
+
killTask(t_modular);
|
|
1166
|
+
}
|
|
1167
|
+
return(result);
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
static proc zero_decomp_modular(ideal j, ideal ser, int exactness)
|
|
1171
|
+
{
|
|
1172
|
+
if(size(ser) > 0 && size(reduce(ser, j, 1)) == 0)
|
|
1173
|
+
{
|
|
1174
|
+
return(list(ideal(1), ideal(1)));
|
|
1175
|
+
}
|
|
1176
|
+
list assprimes = assPrimes(j, exactness);
|
|
1177
|
+
int size_assprimes = size(assprimes);
|
|
1178
|
+
int i;
|
|
1179
|
+
for(i = size_assprimes; i > 0; i--)
|
|
1180
|
+
{
|
|
1181
|
+
if(!attrib(assprimes[i], "isSB"))
|
|
1182
|
+
{
|
|
1183
|
+
assprimes[i] = modStd(assprimes[i], exactness);
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
list separators;
|
|
1187
|
+
for(i = size_assprimes; i > 0; i--)
|
|
1188
|
+
{
|
|
1189
|
+
separators[i] = separator(assprimes, i);
|
|
1190
|
+
}
|
|
1191
|
+
list res;
|
|
1192
|
+
for(i = size_assprimes; i > 0; i--)
|
|
1193
|
+
{
|
|
1194
|
+
task t(i) = "Modquotient::modSat", list(j, separators[i], exactness);
|
|
1195
|
+
}
|
|
1196
|
+
startTasks(t(1..size_assprimes));
|
|
1197
|
+
waitAllTasks(t(1..size_assprimes));
|
|
1198
|
+
for(i = size_assprimes; i > 0; i--)
|
|
1199
|
+
{
|
|
1200
|
+
res[2*i] = assprimes[i];
|
|
1201
|
+
res[2*i-1] = getResult(t(i))[1];
|
|
1202
|
+
killTask(t(i));
|
|
1203
|
+
}
|
|
1204
|
+
if(size(ser) > 0)
|
|
1205
|
+
{
|
|
1206
|
+
for(i = size_assprimes; i > 0; i--)
|
|
1207
|
+
{
|
|
1208
|
+
if(size(reduce(ser, res[2*i-1], 1)) == 0)
|
|
1209
|
+
{
|
|
1210
|
+
res[2*i] = ideal(1);
|
|
1211
|
+
res[2*i-1] = ideal(1);
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
return(res);
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
static proc separator(list assprimes, int i)
|
|
1219
|
+
{
|
|
1220
|
+
poly m = 1;
|
|
1221
|
+
int j;
|
|
1222
|
+
int k;
|
|
1223
|
+
int ncols_j;
|
|
1224
|
+
for(j = size(assprimes); j > 0; j--)
|
|
1225
|
+
{
|
|
1226
|
+
if(i != j)
|
|
1227
|
+
{
|
|
1228
|
+
ncols_j = ncols(assprimes[j]);
|
|
1229
|
+
for(k = 1; k <= ncols_j; k++)
|
|
1230
|
+
{
|
|
1231
|
+
if(reduce(assprimes[j][k], assprimes[i]) != 0)
|
|
1232
|
+
{
|
|
1233
|
+
m = m*assprimes[j][k];
|
|
1234
|
+
break;
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
return(m);
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
static proc sat_component(ideal q1, ideal q2, ideal l1, ideal l2)
|
|
1243
|
+
{
|
|
1244
|
+
if(Primdec::specialIdealsEqual(q1, q2))
|
|
1245
|
+
{
|
|
1246
|
+
q1 = Primdec::sat2(q1, l1)[1];
|
|
1247
|
+
q2 = q1;
|
|
1248
|
+
}
|
|
1249
|
+
else
|
|
1250
|
+
{
|
|
1251
|
+
q1 = Primdec::sat2(q1, l1)[1];
|
|
1252
|
+
q2 = Primdec::sat2(q2, l2)[1];
|
|
1253
|
+
}
|
|
1254
|
+
return(list(q1, q2));
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
static proc modStdHilb(ideal I, intvec h, intvec w, int exactness)
|
|
1258
|
+
{
|
|
1259
|
+
/* save options */
|
|
1260
|
+
intvec opt = option(get);
|
|
1261
|
+
option(redSB);
|
|
1262
|
+
|
|
1263
|
+
/* call modular() */
|
|
1264
|
+
if (exactness) {
|
|
1265
|
+
I = modular("std", list(I, h, w), Modstd::primeTest_std,
|
|
1266
|
+
Modstd::deleteUnluckyPrimes_std, Modstd::pTest_std,
|
|
1267
|
+
Modstd::finalTest_std);
|
|
1268
|
+
}
|
|
1269
|
+
else {
|
|
1270
|
+
I = modular("std", list(I, h, w), Modstd::primeTest_std,
|
|
1271
|
+
Modstd::deleteUnluckyPrimes_std, Modstd::pTest_std);
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
/* return the result */
|
|
1275
|
+
attrib(I, "isSB", 1);
|
|
1276
|
+
option(set, opt);
|
|
1277
|
+
return(I);
|
|
1278
|
+
}
|