passagemath-singular 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.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-x86_64-linux-musl.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +493 -0
- passagemath_singular-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_singular-10.6.31rc3.dist-info/top_level.txt +3 -0
- passagemath_singular.libs/libSingular-4-67059f19.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-30166d29.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-9d37bcf4.4.1.so +0 -0
- passagemath_singular.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
- passagemath_singular.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_singular.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_singular.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
- passagemath_singular.libs/libntl-26885ca2.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-e9ff96db.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-8bcf8e7d.4.1.so +0 -0
- passagemath_singular.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- passagemath_singular.libs/libreadline-06542304.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-73bf7623.4.1.so +0 -0
- passagemath_singular.libs/libstdc++-5d72f927.so.6.0.33 +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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/polynomial.pxd +39 -0
- sage/libs/singular/polynomial.pyx +661 -0
- sage/libs/singular/ring.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/singular/ring.pxd +58 -0
- sage/libs/singular/ring.pyx +893 -0
- sage/libs/singular/singular.cpython-314-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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-x86_64-linux-musl.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,1782 @@
|
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version primdecint.lib 4.4.1.1 Feb_2025 "; // $Id: c3a7a5c16612ce896fb311ab4e8c3ca7dff29ea4 $
|
|
3
|
+
category = "Commutative Algebra";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: primdecint.lib primary decomposition of an ideal in the polynomial
|
|
6
|
+
ring over the integers
|
|
7
|
+
|
|
8
|
+
AUTHORS: G. Pfister pfister@mathematik.uni-kl.de
|
|
9
|
+
@* A. Sadiq afshanatiq@gmail.com
|
|
10
|
+
@* S. Steidel steidel@mathematik.uni-kl.de
|
|
11
|
+
|
|
12
|
+
OVERVIEW:
|
|
13
|
+
|
|
14
|
+
A library for computing the primary decomposition of an ideal in the
|
|
15
|
+
polynomial ring over the integers, Z[x_1,...,x_n].
|
|
16
|
+
The first procedure 'primdecZ' can be used in parallel.
|
|
17
|
+
The coefficients must always be ZZ.
|
|
18
|
+
|
|
19
|
+
Reference: Pfister, Sadiq, Steidel , \"An Algorithm for primary decomposition in polynomial rings over the integers\" , arXiv:1008.2074
|
|
20
|
+
|
|
21
|
+
PROCEDURES:
|
|
22
|
+
primdecZ(I); compute the primary decomposition of ideal I
|
|
23
|
+
primdecZM(I); compute the primary decomposition of module I
|
|
24
|
+
minAssZ(I); compute the minimal associated primes of I
|
|
25
|
+
radicalZ(I); compute the radical of I
|
|
26
|
+
heightZ(I); compute the height of I
|
|
27
|
+
equidimZ(I); compute the equidimensional part of I
|
|
28
|
+
intersectZ(I,J) compute the intersection of I and J
|
|
29
|
+
|
|
30
|
+
SEE ALSO: primdec_lib
|
|
31
|
+
KEYWORDS: primary decomposition
|
|
32
|
+
";
|
|
33
|
+
|
|
34
|
+
LIB "primdec.lib";
|
|
35
|
+
LIB "ring.lib";
|
|
36
|
+
|
|
37
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
38
|
+
|
|
39
|
+
proc primdecZ(ideal I, list #)
|
|
40
|
+
"USAGE: primdecZ(I[, n]); I ideal, n integer (number of processors)
|
|
41
|
+
NOTE: If size(#) > 0, then #[1] is the number of available processors for
|
|
42
|
+
the computation.@*
|
|
43
|
+
The coefficients must be ZZ.
|
|
44
|
+
RETURN: a list pr of primary ideals and their associated primes:
|
|
45
|
+
@format
|
|
46
|
+
pr[i][1] the i-th primary component,
|
|
47
|
+
pr[i][2] the i-th prime component.
|
|
48
|
+
@end format
|
|
49
|
+
EXAMPLE: example primdecZ; shows an example
|
|
50
|
+
"
|
|
51
|
+
{
|
|
52
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
53
|
+
if(size(I)==0){return(list(list(ideal(0),ideal(0))));}
|
|
54
|
+
|
|
55
|
+
//-------------------- Initialize optional parameters ------------------------
|
|
56
|
+
if(size(#) > 0)
|
|
57
|
+
{
|
|
58
|
+
if(size(#) == 1)
|
|
59
|
+
{
|
|
60
|
+
int n = #[1];
|
|
61
|
+
ideal TES = 1;
|
|
62
|
+
}
|
|
63
|
+
if(size(#) == 2)
|
|
64
|
+
{
|
|
65
|
+
int n = #[1];
|
|
66
|
+
ideal TES = #[2];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else
|
|
70
|
+
{
|
|
71
|
+
int n = 1;
|
|
72
|
+
ideal TES = 1;
|
|
73
|
+
}
|
|
74
|
+
if (system("cpu")<=1) { n=1; }
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
if(size(I)==1 && deg(I[1]) == 0)
|
|
78
|
+
{
|
|
79
|
+
ideal J = I;
|
|
80
|
+
}
|
|
81
|
+
else
|
|
82
|
+
{
|
|
83
|
+
ideal J = stdZ(I);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
ideal K,N;
|
|
87
|
+
def R=basering;
|
|
88
|
+
number s;
|
|
89
|
+
list rl=ring_list(R);
|
|
90
|
+
int i,j,p,m,ex,nu,k_link;
|
|
91
|
+
list P,B,IS;
|
|
92
|
+
ideal Q,JJ;
|
|
93
|
+
ideal TQ=1;
|
|
94
|
+
if(deg(J[1])==0)
|
|
95
|
+
{
|
|
96
|
+
//=== I intersected with Z is not zero
|
|
97
|
+
list rp=rl;
|
|
98
|
+
rp[1]=0;
|
|
99
|
+
//=== q is generator of I intersect Z
|
|
100
|
+
number q=leadcoef(J[1]);
|
|
101
|
+
def Rhelp=ring(rp);
|
|
102
|
+
setring Rhelp;
|
|
103
|
+
number q=imap(R,q);
|
|
104
|
+
//=== computes the primes occurring in a generator of I intersect Z
|
|
105
|
+
list L = primefactors(q);
|
|
106
|
+
|
|
107
|
+
list A;
|
|
108
|
+
A[1]= ideal(0);
|
|
109
|
+
ideal J = imap(R,J);
|
|
110
|
+
|
|
111
|
+
for(j=1;j<=size(L[2]);j++)
|
|
112
|
+
{
|
|
113
|
+
if(L[2][j] > 1){ ex = 1; break; }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if(printlevel >= 10)
|
|
117
|
+
{
|
|
118
|
+
"n = "+string(n);
|
|
119
|
+
"size(L[2]) = "+string(size(L[2]));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
int RT = rtimer;
|
|
123
|
+
if((n > 1) && (n < size(L[2])))
|
|
124
|
+
{
|
|
125
|
+
|
|
126
|
+
//----- Create n1 links l(1),...,l(n1), open all of them and compute ---------
|
|
127
|
+
//----- standard basis for the primes L[1][2],...,L[1][n + 1]. ---------
|
|
128
|
+
|
|
129
|
+
for(i = 1; i <= n; i++)
|
|
130
|
+
{
|
|
131
|
+
p=int(L[1][i + 1]);
|
|
132
|
+
nu=int(L[2][i + 1]);
|
|
133
|
+
link l(i) = "ssi:fork";
|
|
134
|
+
open(l(i));
|
|
135
|
+
write(l(i), quote(modp(eval(J), eval(p), eval(nu))));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
p = int(L[1][1]);
|
|
139
|
+
nu = int(L[2][1]);
|
|
140
|
+
int t = timer;
|
|
141
|
+
A[size(A)+1] = modp(J, p, nu);
|
|
142
|
+
t = timer - t;
|
|
143
|
+
if(t > 60) { t = 60; }
|
|
144
|
+
int i_sleep = system("sh", "sleep "+string(t));
|
|
145
|
+
|
|
146
|
+
j = n + 2;
|
|
147
|
+
|
|
148
|
+
while(j <= size(L[2]) + 1)
|
|
149
|
+
{
|
|
150
|
+
for(i = 1; i <= n; i++)
|
|
151
|
+
{
|
|
152
|
+
//=== ask if link l(i) is ready otherwise sleep for t seconds
|
|
153
|
+
if(status(l(i), "read", "ready"))
|
|
154
|
+
{
|
|
155
|
+
//=== read the result from l(i)
|
|
156
|
+
A[size(A)+1] = read(l(i));
|
|
157
|
+
|
|
158
|
+
if(j <= size(L[2]))
|
|
159
|
+
{
|
|
160
|
+
p=int(L[1][j]);
|
|
161
|
+
nu=int(L[2][j]);
|
|
162
|
+
write(l(i), quote(modp(eval(J), eval(p), eval(nu))));
|
|
163
|
+
j++;
|
|
164
|
+
}
|
|
165
|
+
else
|
|
166
|
+
{
|
|
167
|
+
k_link++;
|
|
168
|
+
close(l(i));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//=== k_link describes the number of closed links
|
|
173
|
+
if(k_link == n)
|
|
174
|
+
{
|
|
175
|
+
j++;
|
|
176
|
+
}
|
|
177
|
+
i_sleep = system("sh", "sleep "+string(t));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else
|
|
181
|
+
{
|
|
182
|
+
for(j=1;j<=size(L[2]);j++)
|
|
183
|
+
{
|
|
184
|
+
p=int(L[1][j]);
|
|
185
|
+
nu=int(L[2][j]);
|
|
186
|
+
A[size(A)+1] = modp(J, p,nu );
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
setring R;
|
|
191
|
+
list A = imap(Rhelp,A);
|
|
192
|
+
if(printlevel >= 10)
|
|
193
|
+
{
|
|
194
|
+
"A is computed in "+string(rtimer - RT)+" seconds.";
|
|
195
|
+
}
|
|
196
|
+
for(i=2;i<=size(A);i++)
|
|
197
|
+
{
|
|
198
|
+
//=== computes for all p in L the minimal associated primes of
|
|
199
|
+
//=== IZ/p[variables]
|
|
200
|
+
p = int(A[i][2]);
|
|
201
|
+
if(printlevel >= 10)
|
|
202
|
+
{
|
|
203
|
+
"p = "+string(p);
|
|
204
|
+
RT = rtimer;
|
|
205
|
+
}
|
|
206
|
+
nu = int(A[i][3]);
|
|
207
|
+
//=== maximal power of p dividing q, generator of I intersect Z
|
|
208
|
+
s = p^nu;
|
|
209
|
+
|
|
210
|
+
rp[1] = p;
|
|
211
|
+
def S = ring(rp);
|
|
212
|
+
setring S;
|
|
213
|
+
ideal J = imap(R,J);
|
|
214
|
+
setring R;
|
|
215
|
+
|
|
216
|
+
if(nu>1)
|
|
217
|
+
{
|
|
218
|
+
//=== p is of multiplicity > 1 in q
|
|
219
|
+
|
|
220
|
+
B = A[i][1];
|
|
221
|
+
for(j=1;j<=size(B);j++)
|
|
222
|
+
{
|
|
223
|
+
//=== the minimal associated primes of I
|
|
224
|
+
K=B[j],p;
|
|
225
|
+
K=stdZ(K);
|
|
226
|
+
B[j]=K;
|
|
227
|
+
}
|
|
228
|
+
for(j=1;j<=size(B);j++)
|
|
229
|
+
{
|
|
230
|
+
K=B[j];
|
|
231
|
+
//=== compute maximal independent set for KZ/p[variables]
|
|
232
|
+
|
|
233
|
+
setring S;
|
|
234
|
+
J=imap(R,K);
|
|
235
|
+
J=simplify(J,2);
|
|
236
|
+
attrib(J,"isSB",1);
|
|
237
|
+
IS=Primdec::maxIndependSet(J);
|
|
238
|
+
setring R;
|
|
239
|
+
//=== computing the pseudo primary and extract it
|
|
240
|
+
N=J,s;
|
|
241
|
+
N=stdZ(N);
|
|
242
|
+
Q=extractZ(N,j,IS,B);
|
|
243
|
+
//=== test for useless primaries
|
|
244
|
+
if(size(reduce(TES,Q,5))>0)
|
|
245
|
+
{
|
|
246
|
+
TQ=intersectZ(TQ,Q);
|
|
247
|
+
//TQ=intersect(TQ,Q);
|
|
248
|
+
P[size(P)+1]=list(Q,K);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else
|
|
253
|
+
{
|
|
254
|
+
//=== p is of multiplicity 1 in q we can compute the
|
|
255
|
+
//=== primary decomposition directly
|
|
256
|
+
|
|
257
|
+
B = A[i][1];
|
|
258
|
+
for(j=1;j<=size(B);j++)
|
|
259
|
+
{
|
|
260
|
+
K=B[j][2],p;
|
|
261
|
+
K=stdZ(K);
|
|
262
|
+
Q=B[j][1],p;
|
|
263
|
+
Q=stdZ(Q);
|
|
264
|
+
if(size(reduce(TES,Q,5))>0)
|
|
265
|
+
{
|
|
266
|
+
//TQ=intersectZ(TQ,Q);
|
|
267
|
+
P[size(P)+1]=list(Q,K);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if(ex)
|
|
271
|
+
{
|
|
272
|
+
JJ=imap(S,J);
|
|
273
|
+
JJ=JJ,p;
|
|
274
|
+
JJ=stdZ(JJ);
|
|
275
|
+
TQ=intersectZ(TQ,JJ);
|
|
276
|
+
//TQ=intersect(TQ,JJ);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
kill S;
|
|
280
|
+
if(printlevel >= 10)
|
|
281
|
+
{
|
|
282
|
+
string(p)+" done in "+string(rtimer - RT)+" seconds.";
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
setring R;
|
|
287
|
+
if(!ex){return(P);}
|
|
288
|
+
J=stdZ(J);
|
|
289
|
+
TQ=intersectZ(TQ,TES);
|
|
290
|
+
//TQ=intersect(TQ,TES);
|
|
291
|
+
if(size(reduce(TQ,J,5))!=0)
|
|
292
|
+
{
|
|
293
|
+
//=== taking care about embedded components
|
|
294
|
+
K=stdZ(quotientZ(J,TQ));
|
|
295
|
+
ideal W=K;
|
|
296
|
+
m++;
|
|
297
|
+
while(size(reduce(intersectZ(W,TQ),J,5))!=0)
|
|
298
|
+
//while(size(reduce(intersect(W,TQ),J,5))!=0)
|
|
299
|
+
{
|
|
300
|
+
W=stdZ(I+specialPowerZ(K,m));
|
|
301
|
+
m++;
|
|
302
|
+
}
|
|
303
|
+
list E=primdecZ(W,n,TQ);
|
|
304
|
+
for(i=1;i<=size(E);i++)
|
|
305
|
+
{
|
|
306
|
+
P[size(P)+1]=E[i];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return(P);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
//==== the ideal intersected with Z is zero
|
|
313
|
+
rl[1]=0;
|
|
314
|
+
def Rhelp=ring(rl);
|
|
315
|
+
setring Rhelp;
|
|
316
|
+
ideal J=imap(R,J);
|
|
317
|
+
J=std(J);
|
|
318
|
+
//=== the primary decomposition over Q which gives the primary
|
|
319
|
+
//=== decomposition of I:h for a suitable integer h
|
|
320
|
+
list pr=primdecGTZ(J);
|
|
321
|
+
for(i=1;i<=size(pr);i++)
|
|
322
|
+
{
|
|
323
|
+
pr[i]=list(std(pr[i][1]),std(pr[i][2]));
|
|
324
|
+
}
|
|
325
|
+
setring R;
|
|
326
|
+
list pr=imap(Rhelp,pr);
|
|
327
|
+
//=== intersection with Z[variables]
|
|
328
|
+
for(i=1;i<=size(pr);i++)
|
|
329
|
+
{
|
|
330
|
+
pr[i]=list(coefZ(pr[i][1])[1],coefZ(pr[i][2])[1]);
|
|
331
|
+
}
|
|
332
|
+
//=== find h in Z such that I is the intersection of I:h and <I,h>
|
|
333
|
+
//=== and I:h = IQ[variables] intersected with Z[variables]
|
|
334
|
+
list H =coefZ(J);
|
|
335
|
+
ideal Y=H[1];
|
|
336
|
+
int h=H[2];
|
|
337
|
+
J=J,h;
|
|
338
|
+
//=== call primary decomposition over Z for <I,h>
|
|
339
|
+
ideal testid = 1;
|
|
340
|
+
for(i = 1; i<=size(pr); i++)
|
|
341
|
+
{
|
|
342
|
+
testid = intersect(testid, pr[i][1]);
|
|
343
|
+
}
|
|
344
|
+
list M;
|
|
345
|
+
if(h!=1)
|
|
346
|
+
{
|
|
347
|
+
M=primdecZ(J,n,Y);
|
|
348
|
+
j=0;
|
|
349
|
+
//=== remove useless primary ideals
|
|
350
|
+
while(j<size(M))
|
|
351
|
+
{
|
|
352
|
+
j++;
|
|
353
|
+
M[j][1]=stdZ(M[j][1]);
|
|
354
|
+
testid = intersect(testid, M[j][1]);
|
|
355
|
+
if((reduce(testid, std(I))+0 == 0) && (reduce(I, std(testid))+0 == 0))
|
|
356
|
+
{
|
|
357
|
+
for(i=1;i<=j;i++)
|
|
358
|
+
{
|
|
359
|
+
pr[size(pr)+1]=M[i];
|
|
360
|
+
}
|
|
361
|
+
return(pr);
|
|
362
|
+
}
|
|
363
|
+
for(i=1;i<=size(pr);i++)
|
|
364
|
+
{
|
|
365
|
+
if(size(reduce(pr[i][1],M[j][1],5))==0)
|
|
366
|
+
{
|
|
367
|
+
M=delete(M,j);
|
|
368
|
+
j--;
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
for(i=1;i<=size(M);i++)
|
|
374
|
+
{
|
|
375
|
+
pr[size(pr)+1]=M[i];
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return(pr);
|
|
379
|
+
}
|
|
380
|
+
example
|
|
381
|
+
{ "EXAMPLE:"; echo = 2;
|
|
382
|
+
ring R=integer,(a,b,c,d),dp;
|
|
383
|
+
ideal I1=9,a,b;
|
|
384
|
+
ideal I2=3,c;
|
|
385
|
+
ideal I3=11,2a,7b;
|
|
386
|
+
ideal I4=13a2,17b4;
|
|
387
|
+
ideal I5=9c5,6d5;
|
|
388
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
389
|
+
ideal I=intersectZ(I1,I2);
|
|
390
|
+
I=intersectZ(I,I3);
|
|
391
|
+
I=intersectZ(I,I4);
|
|
392
|
+
I=intersectZ(I,I5);
|
|
393
|
+
I=intersectZ(I,I6);
|
|
394
|
+
primdecZ(I);
|
|
395
|
+
ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
|
|
396
|
+
primdecZ(J);
|
|
397
|
+
ideal K=intersectZ(ideal(9,a+3),ideal(9,b+3));
|
|
398
|
+
primdecZ(K);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
402
|
+
|
|
403
|
+
proc minAssZ(ideal I)
|
|
404
|
+
"USAGE: minAssZ(I); I ideal
|
|
405
|
+
The coefficients must be ZZ.
|
|
406
|
+
RETURN: a list pr of associated primes:
|
|
407
|
+
EXAMPLE: example minAssZ; shows an example
|
|
408
|
+
"
|
|
409
|
+
{
|
|
410
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
411
|
+
if(size(I)==0){return(list(ideal(0)));}
|
|
412
|
+
if(deg(I[1])==0)
|
|
413
|
+
{
|
|
414
|
+
ideal J=I;
|
|
415
|
+
}
|
|
416
|
+
else
|
|
417
|
+
{
|
|
418
|
+
ideal J=stdZ(I);
|
|
419
|
+
}
|
|
420
|
+
ideal K;
|
|
421
|
+
def R=basering;
|
|
422
|
+
list rl=ring_list(R);
|
|
423
|
+
int i,j,p,m;
|
|
424
|
+
list P,B;
|
|
425
|
+
if(deg(J[1])==0)
|
|
426
|
+
{
|
|
427
|
+
//=== I intersected with Z is not zero
|
|
428
|
+
list rp=rl;
|
|
429
|
+
rp[1]=0;
|
|
430
|
+
number q=leadcoef(J[1]);
|
|
431
|
+
def Rhelp=ring(rp);
|
|
432
|
+
setring Rhelp;
|
|
433
|
+
number q=imap(R,q);
|
|
434
|
+
//=== computes the primes occurring in a generator of I intersect Z
|
|
435
|
+
//list L=PollardRho(q,5000,1);
|
|
436
|
+
list L=primefactors(q)[1];
|
|
437
|
+
for(i=1;i<=size(L);i++)
|
|
438
|
+
{
|
|
439
|
+
//=== computes for all p in L the minimal associated primes of
|
|
440
|
+
//=== IZ/p[variables]
|
|
441
|
+
p=int(L[i]);
|
|
442
|
+
setring R;
|
|
443
|
+
rp[1]=p;
|
|
444
|
+
def S=ring(rp);
|
|
445
|
+
setring S;
|
|
446
|
+
ideal J=imap(R,J);
|
|
447
|
+
list A=minAssGTZ(J);
|
|
448
|
+
setring R;
|
|
449
|
+
B=imap(S,A);
|
|
450
|
+
kill S;
|
|
451
|
+
for(j=1;j<=size(B);j++)
|
|
452
|
+
{
|
|
453
|
+
//=== the minimal associated primes of I
|
|
454
|
+
if(B[j][1]!=1)
|
|
455
|
+
{
|
|
456
|
+
K=B[j],p;
|
|
457
|
+
K=stdZ(K);
|
|
458
|
+
P[size(P)+1]=K;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
setring Rhelp;
|
|
462
|
+
}
|
|
463
|
+
setring R;
|
|
464
|
+
return(P);
|
|
465
|
+
}
|
|
466
|
+
//==== the ideal intersected with Z is zero
|
|
467
|
+
rl[1]=0;
|
|
468
|
+
def Rhelp=ring(rl);
|
|
469
|
+
setring Rhelp;
|
|
470
|
+
ideal J=imap(R,J);
|
|
471
|
+
J=std(J);
|
|
472
|
+
//=== the primary decomposition over Q which gives the primary
|
|
473
|
+
//=== decomposition of I:h for a suitable integer h
|
|
474
|
+
list pr=minAssGTZ(J);
|
|
475
|
+
for(i=1;i<=size(pr);i++)
|
|
476
|
+
{
|
|
477
|
+
pr[i]=std(pr[i]);
|
|
478
|
+
}
|
|
479
|
+
setring R;
|
|
480
|
+
list pr=imap(Rhelp,pr);
|
|
481
|
+
//=== intersection with Z[variables]
|
|
482
|
+
for(i=1;i<=size(pr);i++)
|
|
483
|
+
{
|
|
484
|
+
pr[i]=coefZ(pr[i])[1];
|
|
485
|
+
}
|
|
486
|
+
//=== find h in Z such that I is the intersection of I:h and I,h
|
|
487
|
+
//=== and I:h =IQ[variables] intersected with Z[variables]
|
|
488
|
+
list H=coefZ(J);
|
|
489
|
+
int h=H[2];
|
|
490
|
+
J=J,h;
|
|
491
|
+
//=== call associated primes over Z for I,h
|
|
492
|
+
list M;
|
|
493
|
+
if(h!=1)
|
|
494
|
+
{
|
|
495
|
+
M=minAssZ(J);
|
|
496
|
+
//=== remove non-minimal primes
|
|
497
|
+
j=0;
|
|
498
|
+
while(j<size(M))
|
|
499
|
+
{
|
|
500
|
+
j++;
|
|
501
|
+
M[j]=stdZ(M[j]);
|
|
502
|
+
for(i=1;i<=size(pr);i++)
|
|
503
|
+
{
|
|
504
|
+
if(size(reduce(pr[i],M[j],5))==0)
|
|
505
|
+
{
|
|
506
|
+
M=delete(M,j);
|
|
507
|
+
j--;
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
for(i=1;i<=size(M);i++)
|
|
513
|
+
{
|
|
514
|
+
pr[size(pr)+1]=M[i];
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return(pr);
|
|
518
|
+
}
|
|
519
|
+
example
|
|
520
|
+
{ "EXAMPLE:"; echo = 2;
|
|
521
|
+
ring R=integer,(a,b,c,d),dp;
|
|
522
|
+
ideal I1=9,a,b;
|
|
523
|
+
ideal I2=3,c;
|
|
524
|
+
ideal I3=11,2a,7b;
|
|
525
|
+
ideal I4=13a2,17b4;
|
|
526
|
+
ideal I5=9c5,6d5;
|
|
527
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
528
|
+
ideal I=intersectZ(I1,I2);
|
|
529
|
+
I=intersectZ(I,I3);
|
|
530
|
+
I=intersectZ(I,I4);
|
|
531
|
+
I=intersectZ(I,I5);
|
|
532
|
+
I=intersectZ(I,I6);
|
|
533
|
+
minAssZ(I);
|
|
534
|
+
ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
|
|
535
|
+
minAssZ(J);
|
|
536
|
+
ideal K=intersectZ(ideal(9,a+3),ideal(9,b+3));
|
|
537
|
+
minAssZ(K);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
541
|
+
|
|
542
|
+
proc heightZ(ideal I)
|
|
543
|
+
"USAGE: heightZ(I); I ideal
|
|
544
|
+
The coefficients must be ZZ.
|
|
545
|
+
RETURN: the height of the input ideal
|
|
546
|
+
EXAMPLE: example heightZ; shows an example
|
|
547
|
+
"
|
|
548
|
+
{
|
|
549
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
550
|
+
if(size(I)==0){return(0);}
|
|
551
|
+
if(deg(I[1])==0)
|
|
552
|
+
{
|
|
553
|
+
ideal J=I;
|
|
554
|
+
}
|
|
555
|
+
else
|
|
556
|
+
{
|
|
557
|
+
ideal J=stdZ(I);
|
|
558
|
+
}
|
|
559
|
+
ideal K=1;
|
|
560
|
+
def R=basering;
|
|
561
|
+
list rl=ring_list(R);
|
|
562
|
+
int i,j,p,m;
|
|
563
|
+
list P;
|
|
564
|
+
ideal B;
|
|
565
|
+
if(deg(J[1])==0)
|
|
566
|
+
{
|
|
567
|
+
//=== I intersected with Z is not zero
|
|
568
|
+
m=nvars(R);
|
|
569
|
+
list rp=rl;
|
|
570
|
+
rp[1]=0;
|
|
571
|
+
number q=leadcoef(J[1]);
|
|
572
|
+
def Rhelp=ring(rp);
|
|
573
|
+
setring Rhelp;
|
|
574
|
+
number q=imap(R,q);
|
|
575
|
+
//=== computes the primes occurring in a generator of I intersect Z
|
|
576
|
+
//list L=PollardRho(q,5000,1);
|
|
577
|
+
list L=primefactors(q)[1];
|
|
578
|
+
for(i=1;i<=size(L);i++)
|
|
579
|
+
{
|
|
580
|
+
//=== computes for all p in L the std of IZ/p[variables]
|
|
581
|
+
p=int(L[i]);
|
|
582
|
+
setring R;
|
|
583
|
+
rp[1]=p;
|
|
584
|
+
def S=ring(rp);
|
|
585
|
+
setring S;
|
|
586
|
+
ideal J=imap(R,J);
|
|
587
|
+
j=nvars(R)-dim(std(J));
|
|
588
|
+
if(j<m){m=j;}
|
|
589
|
+
setring Rhelp;
|
|
590
|
+
kill S;
|
|
591
|
+
}
|
|
592
|
+
setring R;
|
|
593
|
+
return(m+1);
|
|
594
|
+
}
|
|
595
|
+
//==== the ideal intersected with Z is zero
|
|
596
|
+
rl[1]=0;
|
|
597
|
+
def Rhelp=ring(rl);
|
|
598
|
+
setring Rhelp;
|
|
599
|
+
ideal J=imap(R,J);
|
|
600
|
+
J=std(J);
|
|
601
|
+
m=nvars(R)-dim(J);
|
|
602
|
+
//=== the height over Q
|
|
603
|
+
//=== of I:h for a suitable integer h
|
|
604
|
+
setring R;
|
|
605
|
+
//=== find h in Z such that I is the intersection of I:h and I,h
|
|
606
|
+
//=== and I:h =IQ[variables] intersected with Z[variables]
|
|
607
|
+
list H=coefZ(J);
|
|
608
|
+
int h=H[2];
|
|
609
|
+
J=J,h;
|
|
610
|
+
//=== call height over Z for I,h
|
|
611
|
+
if(h!=1)
|
|
612
|
+
{
|
|
613
|
+
j=heightZ(J);
|
|
614
|
+
if(j<m){m=j;}
|
|
615
|
+
}
|
|
616
|
+
return(m);
|
|
617
|
+
}
|
|
618
|
+
example
|
|
619
|
+
{ "EXAMPLE:"; echo = 2;
|
|
620
|
+
ring R=integer,(a,b,c,d),dp;
|
|
621
|
+
ideal I1=9,a,b;
|
|
622
|
+
ideal I2=3,c;
|
|
623
|
+
ideal I3=11,2a,7b;
|
|
624
|
+
ideal I4=13a2,17b4;
|
|
625
|
+
ideal I5=9c5,6d5;
|
|
626
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
627
|
+
ideal I=intersectZ(I1,I2);
|
|
628
|
+
I=intersectZ(I,I3);
|
|
629
|
+
I=intersectZ(I,I4);
|
|
630
|
+
I=intersectZ(I,I5);
|
|
631
|
+
I=intersectZ(I,I6);
|
|
632
|
+
heightZ(I);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
636
|
+
|
|
637
|
+
proc radicalZ(ideal I)
|
|
638
|
+
"USAGE: radicalZ(I); I ideal
|
|
639
|
+
The coefficients must be ZZ.
|
|
640
|
+
RETURN: the radcal of the input ideal
|
|
641
|
+
EXAMPLE: example radicalZ; shows an example
|
|
642
|
+
"
|
|
643
|
+
{
|
|
644
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
645
|
+
if(size(I)==0){return(ideal(0));}
|
|
646
|
+
if(deg(I[1])==0)
|
|
647
|
+
{
|
|
648
|
+
ideal J=I;
|
|
649
|
+
}
|
|
650
|
+
else
|
|
651
|
+
{
|
|
652
|
+
ideal J=stdZ(I);
|
|
653
|
+
}
|
|
654
|
+
ideal K=1;
|
|
655
|
+
def R=basering;
|
|
656
|
+
list rl=ring_list(R);
|
|
657
|
+
int i,j,p,m;
|
|
658
|
+
list P;
|
|
659
|
+
ideal B;
|
|
660
|
+
if(deg(J[1])==0)
|
|
661
|
+
{
|
|
662
|
+
//=== I intersected with Z is not zero
|
|
663
|
+
list rp=rl;
|
|
664
|
+
rp[1]=0;
|
|
665
|
+
number q=leadcoef(J[1]);
|
|
666
|
+
def Rhelp=ring(rp);
|
|
667
|
+
setring Rhelp;
|
|
668
|
+
number q=imap(R,q);
|
|
669
|
+
//=== computes the primes occurring in a generator of I intersect Z
|
|
670
|
+
//list L=PollardRho(q,5000,1);
|
|
671
|
+
list L=primefactors(q)[1];
|
|
672
|
+
for(i=1;i<=size(L);i++)
|
|
673
|
+
{
|
|
674
|
+
//=== computes for all p in L the radical of IZ/p[variables]
|
|
675
|
+
p=int(L[i]);
|
|
676
|
+
setring R;
|
|
677
|
+
rp[1]=p;
|
|
678
|
+
def S=ring(rp);
|
|
679
|
+
setring S;
|
|
680
|
+
ideal J=imap(R,J);
|
|
681
|
+
ideal A=radical(J);
|
|
682
|
+
setring R;
|
|
683
|
+
B=imap(S,A);
|
|
684
|
+
kill S;
|
|
685
|
+
B=B,p;
|
|
686
|
+
B=stdZ(B);
|
|
687
|
+
K=stdZ(intersectZ(K,B));
|
|
688
|
+
//K=stdZ(intersect(K,B));
|
|
689
|
+
setring Rhelp;
|
|
690
|
+
}
|
|
691
|
+
setring R;
|
|
692
|
+
return(K);
|
|
693
|
+
}
|
|
694
|
+
//==== the ideal intersected with Z is zero
|
|
695
|
+
rl[1]=0;
|
|
696
|
+
def Rhelp=ring(rl);
|
|
697
|
+
setring Rhelp;
|
|
698
|
+
ideal J=imap(R,J);
|
|
699
|
+
J=std(J);
|
|
700
|
+
//=== the radical over Q which gives the radical
|
|
701
|
+
//=== of I:h for a suitable integer h
|
|
702
|
+
ideal K=std(radical(J));
|
|
703
|
+
setring R;
|
|
704
|
+
K=imap(Rhelp,K);
|
|
705
|
+
//=== intersection with Z[variables]
|
|
706
|
+
K=coefZ(K)[1];
|
|
707
|
+
//=== find h in Z such that I is the intersection of I:h and I,h
|
|
708
|
+
//=== and I:h =IQ[variables] intersected with Z[variables]
|
|
709
|
+
list H=coefZ(J);
|
|
710
|
+
int h=H[2];
|
|
711
|
+
J=J,h;
|
|
712
|
+
//=== call radical over Z for I,h
|
|
713
|
+
if(h!=1)
|
|
714
|
+
{
|
|
715
|
+
ideal M=radicalZ(J);
|
|
716
|
+
K=intersectZ(K,M);
|
|
717
|
+
//K=intersect(K,M);
|
|
718
|
+
}
|
|
719
|
+
return(K);
|
|
720
|
+
}
|
|
721
|
+
example
|
|
722
|
+
{ "EXAMPLE:"; echo = 2;
|
|
723
|
+
ring R=integer,(a,b,c,d),dp;
|
|
724
|
+
ideal I1=9,a,b;
|
|
725
|
+
ideal I2=3,c;
|
|
726
|
+
ideal I3=11,2a,7b;
|
|
727
|
+
ideal I4=13a2,17b4;
|
|
728
|
+
ideal I5=9c5,6d5;
|
|
729
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
730
|
+
ideal I=intersectZ(I1,I2);
|
|
731
|
+
I=intersectZ(I,I3);
|
|
732
|
+
I=intersectZ(I,I4);
|
|
733
|
+
I=intersectZ(I,I5);
|
|
734
|
+
I=intersectZ(I,I6);
|
|
735
|
+
radicalZ(I);
|
|
736
|
+
ideal J=intersectZ(ideal(17,a),ideal(17,a2,b));
|
|
737
|
+
radicalZ(J);
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
741
|
+
|
|
742
|
+
proc equidimZ(ideal I)
|
|
743
|
+
"USAGE: equidimZ(I); I ideal
|
|
744
|
+
The coefficients must be ZZ.
|
|
745
|
+
RETURN: the part of minimal height
|
|
746
|
+
EXAMPLE: example equidimZ; shows an example
|
|
747
|
+
"
|
|
748
|
+
{
|
|
749
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
750
|
+
if(size(I)==0){return(ideal(0));}
|
|
751
|
+
if(deg(I[1])==0)
|
|
752
|
+
{
|
|
753
|
+
ideal J=I;
|
|
754
|
+
}
|
|
755
|
+
else
|
|
756
|
+
{
|
|
757
|
+
ideal J=stdZ(I);
|
|
758
|
+
}
|
|
759
|
+
int he=heightZ(J);
|
|
760
|
+
ideal K,N;
|
|
761
|
+
def R=basering;
|
|
762
|
+
bigint s;
|
|
763
|
+
list rl=ring_list(R);
|
|
764
|
+
int i,j,p,m,ex;
|
|
765
|
+
list P,IS,B;
|
|
766
|
+
ideal Q,JJ,E;
|
|
767
|
+
ideal TQ=1;
|
|
768
|
+
if(deg(J[1])==0)
|
|
769
|
+
{
|
|
770
|
+
//=== I intersected with Z is not zero
|
|
771
|
+
list rp=rl;
|
|
772
|
+
rp[1]=0;
|
|
773
|
+
//=== generator of I intersect Z
|
|
774
|
+
number q=leadcoef(J[1]);
|
|
775
|
+
def Rhelp=ring(rp);
|
|
776
|
+
setring Rhelp;
|
|
777
|
+
number q=imap(R,q);
|
|
778
|
+
//=== computes the primes occurring in a generator of I intersect Z
|
|
779
|
+
//list L=PollardRho(q,5000,1);
|
|
780
|
+
list L=primefactors(q)[1];
|
|
781
|
+
list Le;
|
|
782
|
+
for(i=1;i<=size(L);i++)
|
|
783
|
+
{
|
|
784
|
+
L[i]=int(L[i]);
|
|
785
|
+
p=int(L[i]);
|
|
786
|
+
j=0;
|
|
787
|
+
s=bigint(q);
|
|
788
|
+
while((s mod p)==0)
|
|
789
|
+
{
|
|
790
|
+
j++;
|
|
791
|
+
s=s div p;
|
|
792
|
+
}
|
|
793
|
+
Le[i]=j;
|
|
794
|
+
}
|
|
795
|
+
for(i=1;i<=size(L);i++)
|
|
796
|
+
{
|
|
797
|
+
//=== computes for all p in L the minimal associated primes of
|
|
798
|
+
//=== IZ/p[variables]
|
|
799
|
+
p=int(L[i]);
|
|
800
|
+
j=Le[i];
|
|
801
|
+
setring R;
|
|
802
|
+
//=== maximal power of p dividing q, generator of I intersect Z
|
|
803
|
+
s=p^j;
|
|
804
|
+
rp[1]=p;
|
|
805
|
+
def S=ring(rp);
|
|
806
|
+
setring S;
|
|
807
|
+
ideal J=imap(R,J);
|
|
808
|
+
J=std(J);
|
|
809
|
+
if(nvars(R)-dim(J)+1==he)
|
|
810
|
+
{
|
|
811
|
+
if(j>1)
|
|
812
|
+
{
|
|
813
|
+
//=== p is of multiplicity >1 in q
|
|
814
|
+
list A=minAssGTZ(J);
|
|
815
|
+
j=0;
|
|
816
|
+
while(j<size(A))
|
|
817
|
+
{
|
|
818
|
+
j++;
|
|
819
|
+
if(dim(std(A[j]))!=nvars(R)-he+1)
|
|
820
|
+
{
|
|
821
|
+
A=delete(A,j);
|
|
822
|
+
j--;
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
setring R;
|
|
826
|
+
B=imap(S,A);
|
|
827
|
+
for(j=1;j<=size(B);j++)
|
|
828
|
+
{
|
|
829
|
+
//=== the minimal associated primes of I
|
|
830
|
+
K=B[j],p;
|
|
831
|
+
K=stdZ(K);
|
|
832
|
+
B[j]=K;
|
|
833
|
+
}
|
|
834
|
+
for(j=1;j<=size(B);j++)
|
|
835
|
+
{
|
|
836
|
+
K=B[j];
|
|
837
|
+
//=== compute maximal independent set for KZ/p[variables]
|
|
838
|
+
setring S;
|
|
839
|
+
J=imap(R,K);
|
|
840
|
+
J=simplify(J,2);
|
|
841
|
+
attrib(J,"isSB",1);
|
|
842
|
+
IS=Primdec::maxIndependSet(J);
|
|
843
|
+
setring R;
|
|
844
|
+
//=== computing the pseudo primary and extract it
|
|
845
|
+
N=J,s;
|
|
846
|
+
N=stdZ(N);
|
|
847
|
+
Q=extractZ(N,j,IS,B);
|
|
848
|
+
TQ=intersectZ(TQ,Q);
|
|
849
|
+
//TQ=intersect(TQ,Q);
|
|
850
|
+
}
|
|
851
|
+
setring Rhelp;
|
|
852
|
+
}
|
|
853
|
+
else
|
|
854
|
+
{
|
|
855
|
+
//=== p is of multiplicity 1 in q we can compute the
|
|
856
|
+
//=== equidimensional part directly
|
|
857
|
+
ideal E=equidimMax(J);
|
|
858
|
+
setring R;
|
|
859
|
+
E=imap(S,E);
|
|
860
|
+
E=E,p;
|
|
861
|
+
E=stdZ(E);
|
|
862
|
+
TQ=intersectZ(TQ,E);
|
|
863
|
+
//TQ=intersect(TQ,E);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
kill S;
|
|
867
|
+
setring Rhelp;
|
|
868
|
+
}
|
|
869
|
+
setring R;
|
|
870
|
+
return(TQ);
|
|
871
|
+
}
|
|
872
|
+
//==== the ideal intersected with Z is zero
|
|
873
|
+
rl[1]=0;
|
|
874
|
+
def Rhelp=ring(rl);
|
|
875
|
+
setring Rhelp;
|
|
876
|
+
ideal J=imap(R,J);
|
|
877
|
+
J=std(J);
|
|
878
|
+
//=== the equidimensional part over Q which gives the equdimensional
|
|
879
|
+
//=== part of I:h for a suitable integer h
|
|
880
|
+
ideal E=1;
|
|
881
|
+
if(nvars(R)-he==dim(J))
|
|
882
|
+
{
|
|
883
|
+
E=std(equidimMax(J));
|
|
884
|
+
}
|
|
885
|
+
setring R;
|
|
886
|
+
E =imap(Rhelp,E);
|
|
887
|
+
//=== intersection with Z[variables]
|
|
888
|
+
E=coefZ(E)[1];
|
|
889
|
+
//=== find h in Z such that I is the intersection of I:h and I,h
|
|
890
|
+
//=== and I:h =IQ[variables] intersected with Z[variables]
|
|
891
|
+
int h =coefZ(J)[2];
|
|
892
|
+
J=J,h;
|
|
893
|
+
//=== call equidimensional part over Z for I,h
|
|
894
|
+
ideal M;
|
|
895
|
+
if(h!=1)
|
|
896
|
+
{
|
|
897
|
+
M=equidimZ(J);
|
|
898
|
+
if(he==heightZ(M))
|
|
899
|
+
{
|
|
900
|
+
E=intersectZ(M,E);
|
|
901
|
+
//E=intersect(M,E);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
return(E);
|
|
905
|
+
}
|
|
906
|
+
example
|
|
907
|
+
{ "EXAMPLE:"; echo = 2;
|
|
908
|
+
ring R=integer,(a,b,c,d),dp;
|
|
909
|
+
ideal I1=9,a,b;
|
|
910
|
+
ideal I2=3,c;
|
|
911
|
+
ideal I3=11,2a,7b;
|
|
912
|
+
ideal I4=13a2,17b4;
|
|
913
|
+
ideal I5=9c5,6d5;
|
|
914
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
915
|
+
ideal I=intersectZ(I1,I2);
|
|
916
|
+
I=intersectZ(I,I3);
|
|
917
|
+
I=intersectZ(I,I4);
|
|
918
|
+
I=intersectZ(I,I5);
|
|
919
|
+
I=intersectZ(I,I6);
|
|
920
|
+
equidimZ(I);
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
924
|
+
|
|
925
|
+
proc intersectZ(ideal I, ideal J)
|
|
926
|
+
"USAGE: intersectZ(I,J); I,J ideals
|
|
927
|
+
The coefficients must be ZZ.
|
|
928
|
+
RETURN: the intersection of the input ideals
|
|
929
|
+
NOTE: this is an alternative to intersect(I,J) over integers,
|
|
930
|
+
is faster for some examples and should be kept for debug purposes.
|
|
931
|
+
EXAMPLE: example intersectZ; shows an example
|
|
932
|
+
{
|
|
933
|
+
if (coeffs(basering)!=ZZ) { ERROR("coefficoents must be ZZ"); }
|
|
934
|
+
def R = basering;
|
|
935
|
+
ring S=integer,( X(1..nvars(R)) ), ( dp(nvars(R)) );
|
|
936
|
+
ideal I = fetch(R,I);
|
|
937
|
+
ideal J = fetch(R,J);
|
|
938
|
+
ring St=integer, ( t, X(1..nvars(R)) ), ( dp(1), dp(nvars(R)) );
|
|
939
|
+
ideal I = imap(S,I);
|
|
940
|
+
ideal J = imap(S,J);
|
|
941
|
+
ideal K = var(1)*I+(1-var(1))*J;
|
|
942
|
+
K = std(K);
|
|
943
|
+
int i;
|
|
944
|
+
ideal L;
|
|
945
|
+
for(i=1; i<=size(K); i++)
|
|
946
|
+
{
|
|
947
|
+
if ( lead(K[i])/var(1)==0 ) { L[size(L)+1] = K[i]; }
|
|
948
|
+
}
|
|
949
|
+
setring S;
|
|
950
|
+
ideal L = imap(St, L);
|
|
951
|
+
setring R;
|
|
952
|
+
ideal L = fetch(S, L);
|
|
953
|
+
return(L);
|
|
954
|
+
}
|
|
955
|
+
example
|
|
956
|
+
{ "EXAMPLE:"; echo = 2;
|
|
957
|
+
ring R=integer,(a,b,c,d),dp;
|
|
958
|
+
ideal I1=9,a,b;
|
|
959
|
+
ideal I2=3,c;
|
|
960
|
+
ideal I3=11,2a,7b;
|
|
961
|
+
ideal I4=13a2,17b4;
|
|
962
|
+
ideal I5=9c5,6d5;
|
|
963
|
+
ideal I6=17,a15,b15,c15,d15;
|
|
964
|
+
ideal I=intersectZ(I1,I2); I;
|
|
965
|
+
I=intersectZ(I,I3); I;
|
|
966
|
+
I=intersectZ(I,I4); I;
|
|
967
|
+
I=intersectZ(I,I5); I;
|
|
968
|
+
I=intersectZ(I,I6); I;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
972
|
+
|
|
973
|
+
static proc modp(ideal J, int p, int nu)
|
|
974
|
+
{
|
|
975
|
+
//=== computes the minimal associated primes (if nu > 1) resp. the primary
|
|
976
|
+
//=== decomposition (else) of J in Z/p and maps the result back to the basering
|
|
977
|
+
def R = basering;
|
|
978
|
+
list rp = ring_list(R);
|
|
979
|
+
rp[1] = p;
|
|
980
|
+
def Rp = ring(rp);
|
|
981
|
+
setring Rp;
|
|
982
|
+
ideal J = imap(R,J);
|
|
983
|
+
int sizeA;
|
|
984
|
+
if(nu > 1)
|
|
985
|
+
{
|
|
986
|
+
//=== p is of multiplicity > 1 in q
|
|
987
|
+
list A = minAssGTZ(J);
|
|
988
|
+
}
|
|
989
|
+
else
|
|
990
|
+
{
|
|
991
|
+
list A = primdecGTZ(J);
|
|
992
|
+
}
|
|
993
|
+
sizeA = size(A);
|
|
994
|
+
setring R;
|
|
995
|
+
list A;
|
|
996
|
+
if (sizeA>0) { A = imap(Rp,A); }
|
|
997
|
+
return(list(A,p,nu));
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1001
|
+
|
|
1002
|
+
static proc coefPrimeZ(ideal I)
|
|
1003
|
+
{
|
|
1004
|
+
//=== computes the primes occurring in the product of the leading coefficients
|
|
1005
|
+
//=== of I
|
|
1006
|
+
number h=1;
|
|
1007
|
+
int i;
|
|
1008
|
+
I = simplify(I,2); // del zero generators
|
|
1009
|
+
for(i=1;i<=size(I);i++)
|
|
1010
|
+
{
|
|
1011
|
+
h=h*leadcoef(I[i]); // besser machen (gleich zerlegen,
|
|
1012
|
+
// nicht ausmultiplizieren)
|
|
1013
|
+
}
|
|
1014
|
+
def R=basering;
|
|
1015
|
+
ring Rhelp=0,x,dp;
|
|
1016
|
+
number h=imap(R,h);
|
|
1017
|
+
//list L=PollardRho(h,5000,1);
|
|
1018
|
+
list L=primefactors(h)[1];
|
|
1019
|
+
for(i=1;i<=size(L);i++){L[i]=int(L[i]);}
|
|
1020
|
+
setring R;
|
|
1021
|
+
return(L);
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1025
|
+
|
|
1026
|
+
static proc coefZ(ideal I)
|
|
1027
|
+
{
|
|
1028
|
+
//=== assume IQ[variables]=<g_1,...,g_s>, Groebner basis, g_i in Z[variables]
|
|
1029
|
+
//=== computes an integer h such that
|
|
1030
|
+
//=== <g_1,...,g_s>Z[variables]:h^infinity = IQ[variables] intersected
|
|
1031
|
+
//=== with Z[variables]
|
|
1032
|
+
//=== returns a list with IQ[variables] intersected with Z[variables] and h
|
|
1033
|
+
int h=1;
|
|
1034
|
+
int i,e;
|
|
1035
|
+
ideal K=1;
|
|
1036
|
+
attrib(I,"isSB",1);
|
|
1037
|
+
list L=coefPrimeZ(I);
|
|
1038
|
+
if(size(L)==0){return(list(I,1));}
|
|
1039
|
+
int d=1;
|
|
1040
|
+
while(d!=0)
|
|
1041
|
+
{
|
|
1042
|
+
i++;
|
|
1043
|
+
K=quotientOneZ(I,L[i]);
|
|
1044
|
+
if(size(reduce(K,I,5))!=0)
|
|
1045
|
+
{
|
|
1046
|
+
h=h*L[i];
|
|
1047
|
+
I=stdZ(K);
|
|
1048
|
+
e=1;
|
|
1049
|
+
}
|
|
1050
|
+
if(i==size(L))
|
|
1051
|
+
{
|
|
1052
|
+
i=0;
|
|
1053
|
+
if(e)
|
|
1054
|
+
{
|
|
1055
|
+
e=0;
|
|
1056
|
+
}
|
|
1057
|
+
else
|
|
1058
|
+
{
|
|
1059
|
+
d=0;
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
if(h<0){h=-h;}
|
|
1064
|
+
return(list(K,h));
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1068
|
+
|
|
1069
|
+
static proc specialPowerZ(ideal I, int m)
|
|
1070
|
+
{
|
|
1071
|
+
//=== computes the ideal generated by the m-th power of the generators of I
|
|
1072
|
+
int i;
|
|
1073
|
+
for(i=1;i<=ncols(I);i++) // use ncols to allow zero generators in I
|
|
1074
|
+
{
|
|
1075
|
+
I[i]=I[i]^m;
|
|
1076
|
+
}
|
|
1077
|
+
return(I);
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1081
|
+
|
|
1082
|
+
static proc separatorsZ(int j, list B)
|
|
1083
|
+
{
|
|
1084
|
+
//=== computes s such that s is not in B[j] but s is in B[i] for all i!=j
|
|
1085
|
+
int i,k;
|
|
1086
|
+
poly s=1;
|
|
1087
|
+
for(i=1;i<=size(B);i++)
|
|
1088
|
+
{
|
|
1089
|
+
if(i!=j)
|
|
1090
|
+
{
|
|
1091
|
+
for(k=1;k<=size(B[i]);k++)
|
|
1092
|
+
{
|
|
1093
|
+
if(reduce(B[i][k],B[j])!=0)
|
|
1094
|
+
{
|
|
1095
|
+
s=s*B[i][k];
|
|
1096
|
+
break;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
return(s);
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
1105
|
+
static proc extractZ(ideal J, int j, list L, list B)
|
|
1106
|
+
{
|
|
1107
|
+
//=== P is an associated prime of J, the corresponding primary ideal is
|
|
1108
|
+
//=== computed,
|
|
1109
|
+
//=== L is a list of maximal independent sets for P in Z/p[variables]
|
|
1110
|
+
def R=basering;
|
|
1111
|
+
ideal P=B[j];
|
|
1112
|
+
|
|
1113
|
+
//=== first compute a pseudo primary ideal I, radical of I is P
|
|
1114
|
+
//=== method of Eisenbud
|
|
1115
|
+
//ideal I=J+specialPowerZ(P,20);
|
|
1116
|
+
|
|
1117
|
+
//=== method of Shimoyama-Yokoyama
|
|
1118
|
+
poly s=separatorsZ(j,B);
|
|
1119
|
+
ideal I=satZ(J,s);
|
|
1120
|
+
//=== size(L)=0 means P is maximal ideal and I is primary
|
|
1121
|
+
if(size(L)>0)
|
|
1122
|
+
{
|
|
1123
|
+
if(L[1][3]!=0)
|
|
1124
|
+
{
|
|
1125
|
+
//=== if u in x is an independent set of L then we compute a Groebner
|
|
1126
|
+
//=== Basis in Z[u][x-u]
|
|
1127
|
+
ring S = create_ring(list("integer"), "("+L[1][1]+")", "lp");
|
|
1128
|
+
ideal I=imap(R,I);
|
|
1129
|
+
I=stdZ(I);
|
|
1130
|
+
list rl=ring_list(S);
|
|
1131
|
+
rl[1]=0;
|
|
1132
|
+
def Shelp =ring(rl);
|
|
1133
|
+
setring Shelp;
|
|
1134
|
+
ideal I=imap(S,I);
|
|
1135
|
+
I[1]=0;
|
|
1136
|
+
I=simplify(I,2);
|
|
1137
|
+
if(L[1][3]==nvars(basering))
|
|
1138
|
+
{
|
|
1139
|
+
list C;
|
|
1140
|
+
C[1]= ideal(0); //add dummy entry to tie C to current ring
|
|
1141
|
+
int i;
|
|
1142
|
+
ASSUME(1, size(I)==ncols(I) || size(I)==0);
|
|
1143
|
+
for(i=1;i<=size(I);i++)
|
|
1144
|
+
{
|
|
1145
|
+
C[i+1]=I[i];
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
else
|
|
1149
|
+
{
|
|
1150
|
+
//=== this is our way to obtain the coefficients in Z[u] of the
|
|
1151
|
+
//=== leading terms of the Groebner basis above
|
|
1152
|
+
def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp");
|
|
1153
|
+
setring quring;
|
|
1154
|
+
ideal I=imap(Shelp,I);
|
|
1155
|
+
list C;
|
|
1156
|
+
C[1]= ideal(0); //add dummy entry to tie C to current ring
|
|
1157
|
+
int i;
|
|
1158
|
+
ASSUME(1, size(I)==ncols(I) || size(I)==0);
|
|
1159
|
+
for(i=1;i<=size(I);i++)
|
|
1160
|
+
{
|
|
1161
|
+
C[i+1]=leadcoef(I[i]);
|
|
1162
|
+
}
|
|
1163
|
+
setring Shelp;
|
|
1164
|
+
list C=imap(quring,C);
|
|
1165
|
+
}
|
|
1166
|
+
setring R;
|
|
1167
|
+
list C=imap(Shelp,C);
|
|
1168
|
+
}
|
|
1169
|
+
else
|
|
1170
|
+
{
|
|
1171
|
+
I=stdZ(I);
|
|
1172
|
+
list C;
|
|
1173
|
+
C[1]= ideal(0); //add dummy entry to tie C to current ring
|
|
1174
|
+
int i;
|
|
1175
|
+
ASSUME(1, size(I)==ncols(I) || size(I)==0);
|
|
1176
|
+
for(i=1;i<=size(I);i++)
|
|
1177
|
+
{
|
|
1178
|
+
C[i+1]=I[i];
|
|
1179
|
+
}
|
|
1180
|
+
list rl=ring_list(R);
|
|
1181
|
+
rl[1]=0;
|
|
1182
|
+
def Shelp =ring(rl);
|
|
1183
|
+
}
|
|
1184
|
+
poly h=1;
|
|
1185
|
+
for(i=2;i<=size(C);i++) // leave out first dummy entry in C.
|
|
1186
|
+
{
|
|
1187
|
+
if(deg(C[i])>0){h=h*C[i];} // das muss noch besser gemacht werden,
|
|
1188
|
+
// nicht ausmultiplizieren!
|
|
1189
|
+
}
|
|
1190
|
+
setring Shelp;
|
|
1191
|
+
poly h=imap(R,h);
|
|
1192
|
+
ideal fac=factorize(h,1);
|
|
1193
|
+
setring R;
|
|
1194
|
+
ideal fac=imap(Shelp,fac);
|
|
1195
|
+
ASSUME(1, size(fac)==ncols(fac) || size(fac)==0);
|
|
1196
|
+
for(i=1;i<=size(fac);i++)
|
|
1197
|
+
{
|
|
1198
|
+
I=satZ(I,fac[i]);
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
I=stdZ(I);
|
|
1202
|
+
return(I);
|
|
1203
|
+
}
|
|
1204
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1205
|
+
|
|
1206
|
+
static proc normalizeZ(ideal I)
|
|
1207
|
+
{
|
|
1208
|
+
//=== if I[1]=q in Z, it replaces all other coeffs of polys in I by there value
|
|
1209
|
+
//=== mod q, std should do this automatically and then this procedure should be
|
|
1210
|
+
//=== removed
|
|
1211
|
+
if(deg(I[1])>0){return(I);}
|
|
1212
|
+
int i,j;
|
|
1213
|
+
number n;
|
|
1214
|
+
poly p;
|
|
1215
|
+
for(i=2;i<=ncols(I);i++)
|
|
1216
|
+
{
|
|
1217
|
+
j=1;
|
|
1218
|
+
while(j<=size(I[i]))
|
|
1219
|
+
{
|
|
1220
|
+
n=leadcoef(I[i][j]) mod leadcoef(I[1]);
|
|
1221
|
+
p=n*leadmonom(I[i][j]);
|
|
1222
|
+
I[i]=I[i]-I[i][j]+p;
|
|
1223
|
+
if(p!=0){j++;}
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
return(I);
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1230
|
+
|
|
1231
|
+
static proc satZ(ideal I,poly h)
|
|
1232
|
+
{
|
|
1233
|
+
//=== saturates I by h
|
|
1234
|
+
ideal J=quotientOneZ(I,h);
|
|
1235
|
+
while(size(reduce(J,stdZ(I),5))!=0)
|
|
1236
|
+
{
|
|
1237
|
+
I=J;
|
|
1238
|
+
J=quotientOneZ(I,h);
|
|
1239
|
+
J=normalizeZ(J);
|
|
1240
|
+
}
|
|
1241
|
+
return(J);
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1245
|
+
|
|
1246
|
+
static proc quotientOneZ(ideal I, poly f)
|
|
1247
|
+
{
|
|
1248
|
+
//=== this is needed because quotient(I,f) does not work properly, should be
|
|
1249
|
+
//=== replaced by quotient later
|
|
1250
|
+
if ( f==0 ) { return( ideal(1) ); }
|
|
1251
|
+
def R=basering;
|
|
1252
|
+
int i;
|
|
1253
|
+
ideal K=intersectZ(I,ideal(f));
|
|
1254
|
+
//ideal K=intersect(I,ideal(f));
|
|
1255
|
+
//=== K[i]/f; does not work in rings with integer! This should be replaced
|
|
1256
|
+
//=== later
|
|
1257
|
+
ring Rhelp = create_ring(0, "("+varstr(R)+")", "dp");
|
|
1258
|
+
ideal K=imap(R,K);
|
|
1259
|
+
poly f=imap(R,f);
|
|
1260
|
+
ASSUME(1, ncols(K)==size(K) || size(K)==0 ); // postcondition intersectZ
|
|
1261
|
+
for(i=1;i<=ncols(K);i++)
|
|
1262
|
+
{
|
|
1263
|
+
K[i]=K[i]/f;
|
|
1264
|
+
}
|
|
1265
|
+
setring R;
|
|
1266
|
+
K=imap(Rhelp,K);
|
|
1267
|
+
return(K);
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1271
|
+
|
|
1272
|
+
static proc quotientZ(ideal I, ideal J)
|
|
1273
|
+
{
|
|
1274
|
+
//=== this is needed because quotient(I,J) does not work properly, should be
|
|
1275
|
+
//=== replaced by quotient later
|
|
1276
|
+
if ( size(J)==0 ) { return( ideal(1) ); }
|
|
1277
|
+
J = simplify(J, 2); // del zero generators
|
|
1278
|
+
int i;
|
|
1279
|
+
ideal K=quotientOneZ(I,J[1]);
|
|
1280
|
+
// we had a bug here: either it is mandatory to kick out zero generators of J(done) or to use ncols(J)
|
|
1281
|
+
for(i=2;i<=ncols(J);i++)
|
|
1282
|
+
{
|
|
1283
|
+
K=intersectZ(K,quotientOneZ(I,J[i]));
|
|
1284
|
+
//K=intersect(K,quotientOneZ(I,J[i]));
|
|
1285
|
+
}
|
|
1286
|
+
return(K);
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1290
|
+
|
|
1291
|
+
static proc reduceZ(poly f, ideal I)
|
|
1292
|
+
{
|
|
1293
|
+
//=== this is needed because reduce(f,I) does not work properly, should be
|
|
1294
|
+
//=== replaced by reduce later
|
|
1295
|
+
if(f==0){return(f);}
|
|
1296
|
+
if (not attrib(I,"isSB") ) { print ("// ** I is no standard basis"); }
|
|
1297
|
+
def R=basering;
|
|
1298
|
+
ring Rhelp = create_ring(0, "("+varstr(R)+")", "dp");
|
|
1299
|
+
ideal I=imap(R,I);
|
|
1300
|
+
poly f=imap(R,f);
|
|
1301
|
+
int i,j;
|
|
1302
|
+
poly m;
|
|
1303
|
+
number n;
|
|
1304
|
+
I = simplify(I, 2); // del zero gens (otherwise the following loop may fail with an error (div by 0))
|
|
1305
|
+
while(!i)
|
|
1306
|
+
{
|
|
1307
|
+
i=1;
|
|
1308
|
+
j=0;
|
|
1309
|
+
while(j<size(I))
|
|
1310
|
+
{
|
|
1311
|
+
j++;
|
|
1312
|
+
m=leadmonom(f)/leadmonom(I[j]);
|
|
1313
|
+
if(m!=0)
|
|
1314
|
+
{
|
|
1315
|
+
n=leadcoef(f) mod leadcoef(I[j]);
|
|
1316
|
+
if(n==0)
|
|
1317
|
+
{
|
|
1318
|
+
f=f-leadcoef(f)/leadcoef(I[j])*m*I[j];
|
|
1319
|
+
if(f==0){setring R;return(poly(0));}
|
|
1320
|
+
i=0;
|
|
1321
|
+
break;
|
|
1322
|
+
}
|
|
1323
|
+
if(n!=leadcoef(f))
|
|
1324
|
+
{
|
|
1325
|
+
f=f+(n-leadcoef(f))/leadcoef(I[j])*m*I[j];
|
|
1326
|
+
i=0;
|
|
1327
|
+
break;
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
setring R;
|
|
1333
|
+
f=imap(Rhelp,f);
|
|
1334
|
+
return(lead(f)+reduceZ(f-lead(f),I));
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1338
|
+
|
|
1339
|
+
static proc stdZ(ideal I)
|
|
1340
|
+
{
|
|
1341
|
+
//=== this is needed because we want the leading coefficients to be positive
|
|
1342
|
+
//=== otherwise reduce gives wrong results! should be replaced later by std
|
|
1343
|
+
I=simplify(I,2);
|
|
1344
|
+
I=normalizeZ(I); // why is this done before std() call?
|
|
1345
|
+
// normalizeZ works only if I[1] == ( std(I) )[1]
|
|
1346
|
+
ideal J=std(I);
|
|
1347
|
+
int i;
|
|
1348
|
+
for(i=1;i<=size(J);i++)
|
|
1349
|
+
{
|
|
1350
|
+
if(leadcoef(J[i])<0){J[i]=-J[i];}
|
|
1351
|
+
}
|
|
1352
|
+
J=normalizeZ(J);
|
|
1353
|
+
attrib(J,"isSB",1);
|
|
1354
|
+
return(J);
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1358
|
+
|
|
1359
|
+
static proc testPrimaryZ(ideal I, list L)
|
|
1360
|
+
{
|
|
1361
|
+
//=== test whether I is the intersection of the primary ideals in L
|
|
1362
|
+
int i;
|
|
1363
|
+
ideal K=L[1][1];
|
|
1364
|
+
for(i=2;i<=size(L);i++)
|
|
1365
|
+
{
|
|
1366
|
+
K=intersectZ(K,L[i][1]);
|
|
1367
|
+
//K=intersect(K,L[i][1]);
|
|
1368
|
+
}
|
|
1369
|
+
i=size(reduce(K,stdZ(I),5))+size(reduce(I,stdZ(K),5));
|
|
1370
|
+
if(!i){return(1);}
|
|
1371
|
+
return(0);
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1375
|
+
|
|
1376
|
+
static proc pseudo_primdecZM(module N)
|
|
1377
|
+
{
|
|
1378
|
+
ideal I=quotient(N,freemodule(nrows(N)));
|
|
1379
|
+
if(size(I)==0){return(list(list(N,I)));}
|
|
1380
|
+
|
|
1381
|
+
list B=minAssZ(I);
|
|
1382
|
+
list S,R,L;
|
|
1383
|
+
ideal K;
|
|
1384
|
+
if(size(B)==0){return(S);}
|
|
1385
|
+
for(int i=1;i<=size(B);i++)
|
|
1386
|
+
{
|
|
1387
|
+
S[i]=separatorsZ(i,B);
|
|
1388
|
+
}
|
|
1389
|
+
for(i=1;i<=size(B);i++)
|
|
1390
|
+
{
|
|
1391
|
+
L=sat_with_exp(N,S[i]);
|
|
1392
|
+
K[i]=S[i]^L[2];
|
|
1393
|
+
R[i]=list(L[1],B[i]);
|
|
1394
|
+
}
|
|
1395
|
+
L=pseudo_primdecZM(N+K*freemodule(nrows(N)));
|
|
1396
|
+
for(i=1;i<=size(L);i++)
|
|
1397
|
+
{
|
|
1398
|
+
R[size(R)+1]=L[i];
|
|
1399
|
+
}
|
|
1400
|
+
return(R);
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
|
|
1404
|
+
|
|
1405
|
+
static proc prepare_extractZM(list L)
|
|
1406
|
+
{
|
|
1407
|
+
def R=basering;
|
|
1408
|
+
module N=L[1];
|
|
1409
|
+
ideal I=quotient(N,freemodule(nrows(N)));
|
|
1410
|
+
list B=primdecZ(I);
|
|
1411
|
+
list M;
|
|
1412
|
+
if(size(B)==1){return(M);}
|
|
1413
|
+
I=std(I);
|
|
1414
|
+
list rl=ring_list(R);
|
|
1415
|
+
if(deg(I[1])==0)
|
|
1416
|
+
{
|
|
1417
|
+
execute("int p="+string(I[1])+";");
|
|
1418
|
+
rl[1]=p;
|
|
1419
|
+
}
|
|
1420
|
+
else
|
|
1421
|
+
{
|
|
1422
|
+
rl[1]=0;
|
|
1423
|
+
}
|
|
1424
|
+
def Shelp =ring(rl);
|
|
1425
|
+
setring Shelp;
|
|
1426
|
+
ideal I=imap(R,I);
|
|
1427
|
+
I=std(I);
|
|
1428
|
+
M=Primdec::maxIndependSet(I);
|
|
1429
|
+
setring R;
|
|
1430
|
+
return(M);
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
|
|
1434
|
+
static proc extractZM(list M, list L)
|
|
1435
|
+
{
|
|
1436
|
+
//=== M is a list of a pseudo primary module and the corresponding prime
|
|
1437
|
+
//=== L is a list of maximal independent sets for P
|
|
1438
|
+
def R=basering;
|
|
1439
|
+
ideal P=M[2];
|
|
1440
|
+
module I=M[1];
|
|
1441
|
+
poly h=1;
|
|
1442
|
+
|
|
1443
|
+
//=== size(L)=0 means P is maximal ideal and I is primary
|
|
1444
|
+
if(size(L)>0)
|
|
1445
|
+
{
|
|
1446
|
+
if(L[1][3]!=0)
|
|
1447
|
+
{
|
|
1448
|
+
//=== if u in x is an independent set of L then we compute a Groebner
|
|
1449
|
+
//=== Basis in Z[u][x-u]
|
|
1450
|
+
ring S = create_ring(list("integer"), "("+L[1][1]+")", "lp");
|
|
1451
|
+
module I=imap(R,I);
|
|
1452
|
+
I=std(I);
|
|
1453
|
+
list rl=ring_list(S);
|
|
1454
|
+
rl[1]=0;
|
|
1455
|
+
def Shelp =ring(rl);
|
|
1456
|
+
setring Shelp;
|
|
1457
|
+
module I=imap(S,I);
|
|
1458
|
+
//=== this is our way to obtain the coefficients in Z[u] of the
|
|
1459
|
+
//=== leading terms of the Groebner basis above
|
|
1460
|
+
def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp");
|
|
1461
|
+
setring quring;
|
|
1462
|
+
module I=imap(Shelp,I);
|
|
1463
|
+
list C;
|
|
1464
|
+
int i;
|
|
1465
|
+
for(i=1;i<=size(I);i++)
|
|
1466
|
+
{
|
|
1467
|
+
C[i]=leadcoef(I[i]);
|
|
1468
|
+
}
|
|
1469
|
+
setring Shelp;
|
|
1470
|
+
list C=imap(quring,C);
|
|
1471
|
+
setring R;
|
|
1472
|
+
list C=imap(Shelp,C);
|
|
1473
|
+
}
|
|
1474
|
+
else
|
|
1475
|
+
{
|
|
1476
|
+
// this is the case that P=<p>, p prime
|
|
1477
|
+
I=std(I);
|
|
1478
|
+
ideal IC=simplify(flatten(lead(I)),2);
|
|
1479
|
+
list C;
|
|
1480
|
+
int i;
|
|
1481
|
+
for(i=1;i<=size(IC);i++)
|
|
1482
|
+
{
|
|
1483
|
+
C[i]=I[i];
|
|
1484
|
+
}
|
|
1485
|
+
list rl=ring_list(R);
|
|
1486
|
+
rl[1]=0;
|
|
1487
|
+
def Shelp =ring(rl);
|
|
1488
|
+
}
|
|
1489
|
+
for(i=1;i<=size(C);i++)
|
|
1490
|
+
{
|
|
1491
|
+
if(deg(C[i])>0){h=h*C[i];} // das muss noch besser gemacht werden,
|
|
1492
|
+
// nicht ausmultiplizieren!
|
|
1493
|
+
}
|
|
1494
|
+
setring Shelp;
|
|
1495
|
+
poly h=imap(R,h);
|
|
1496
|
+
ideal fac=factorize(h,1);
|
|
1497
|
+
setring R;
|
|
1498
|
+
list II;
|
|
1499
|
+
h=1;
|
|
1500
|
+
ideal fac=imap(Shelp,fac);
|
|
1501
|
+
ASSUME(1, size(fac)==ncols(fac) || size(fac)==0);
|
|
1502
|
+
for(i=1;i<=size(fac);i++)
|
|
1503
|
+
{
|
|
1504
|
+
II=sat_with_exp(I,fac[i]);
|
|
1505
|
+
I=II[1];
|
|
1506
|
+
h=h*fac[i]^II[2];
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
I=std(I);
|
|
1510
|
+
return(list(I,h));
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
|
|
1514
|
+
proc primdecZM(module N)
|
|
1515
|
+
"USAGE: primdecZM(N); N module
|
|
1516
|
+
The coefficients must be ZZ.
|
|
1517
|
+
RETURN: a list pr of primary modules and their associated primes:
|
|
1518
|
+
@format
|
|
1519
|
+
pr[i][1] the i-th primary component,
|
|
1520
|
+
pr[i][2] the i-th prime component.
|
|
1521
|
+
@end format
|
|
1522
|
+
EXAMPLE: example primdecZM; shows an example
|
|
1523
|
+
"
|
|
1524
|
+
{
|
|
1525
|
+
list P,K,S;
|
|
1526
|
+
int i,j;
|
|
1527
|
+
list L=pseudo_primdecZM(N);
|
|
1528
|
+
list M,O;
|
|
1529
|
+
for(i=1;i<=size(L);i++)
|
|
1530
|
+
{
|
|
1531
|
+
if(size(L[i][2])!=0)
|
|
1532
|
+
{
|
|
1533
|
+
M=prepare_extractZM(L[i]);
|
|
1534
|
+
O=extractZM(L[i],M);
|
|
1535
|
+
P[size(P)+1]=list(O[1],L[i][2]);
|
|
1536
|
+
K[size(K)+1]=L[i][1]+O[2]*freemodule(nrows(L[i][1]));
|
|
1537
|
+
}
|
|
1538
|
+
else
|
|
1539
|
+
{
|
|
1540
|
+
P[size(P)+1]=L[i];
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
for(j=1;j<=size(K);j++)
|
|
1544
|
+
{
|
|
1545
|
+
S=primdecZM(K[j]);
|
|
1546
|
+
for(i=1;i<=size(S);i++)
|
|
1547
|
+
{
|
|
1548
|
+
P[size(P)+1]=S[i];
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
return(P);
|
|
1552
|
+
}
|
|
1553
|
+
example
|
|
1554
|
+
{ "EXAMPLE:"; echo = 2;
|
|
1555
|
+
ring R=integer,(x,y),(c,lp);
|
|
1556
|
+
module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18x];
|
|
1557
|
+
primdecZM(N);
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
|
|
1561
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1562
|
+
|
|
1563
|
+
/*
|
|
1564
|
+
Examples:
|
|
1565
|
+
|
|
1566
|
+
//=== IQ[a,b,c,d,e,f,g] intersect Z[a,b,c,d,e,f,g] = I (takes some time)
|
|
1567
|
+
ring R1=integer,(a,b,c,d,e,f,g),dp;
|
|
1568
|
+
ideal I=a2+2de+2cf+2bg+a,
|
|
1569
|
+
2ab+e2+2df+2cg+b,
|
|
1570
|
+
b2+2ac+2ef+2dg+c,
|
|
1571
|
+
2bc+2ad+f2+2eg+d,
|
|
1572
|
+
c2+2bd+2ae+2fg+e,
|
|
1573
|
+
2cd+2be+2af+g2+f,
|
|
1574
|
+
d2+2ce+2bf+2ag+g;
|
|
1575
|
+
|
|
1576
|
+
ring R2=integer,(a,b,c,d,e,f,g),dp;
|
|
1577
|
+
ideal I=181*32003,
|
|
1578
|
+
a2+2de+2cf+2bg+a,
|
|
1579
|
+
2ab+e2+2df+2cg+b,
|
|
1580
|
+
b2+2ac+2ef+2dg+c,
|
|
1581
|
+
2bc+2ad+f2+2eg+d,
|
|
1582
|
+
c2+2bd+2ae+2fg+e,
|
|
1583
|
+
2cd+2be+2af+g2+f,
|
|
1584
|
+
d2+2ce+2bf+2ag+g;
|
|
1585
|
+
|
|
1586
|
+
ring R3=integer,(w,z,y,x),dp;
|
|
1587
|
+
ideal I=xzw+(-y^2+y)*z^2,
|
|
1588
|
+
(-x^2+x)*w^2+yzw,
|
|
1589
|
+
((y^4-2*y^3+y^2)*x-y^4+y^3)*z^3,
|
|
1590
|
+
y2z2w+(-y*4+2*y^3-y^2)*z3;
|
|
1591
|
+
|
|
1592
|
+
ring R4=integer,(w,z,y,x),dp;
|
|
1593
|
+
ideal I=-2*yxzw+(-yx-y^2+y)*z^2,
|
|
1594
|
+
xw^2-yz^2,
|
|
1595
|
+
(yx^2-(2*y^2+2*y)*x+y^3-2*y^2+y)*z^3,
|
|
1596
|
+
(-2*y^2+2*y)*z^2*w+(yx-3*y^2-y)*z^3;
|
|
1597
|
+
|
|
1598
|
+
ring R5=integer,(x,y,z),dp;
|
|
1599
|
+
ideal I=x2-y2-z2,
|
|
1600
|
+
xy-z2,
|
|
1601
|
+
y3+xz2-yz2+2z3+xy-z2,
|
|
1602
|
+
-y2z2+2z4+x2-y2+z2,
|
|
1603
|
+
y3z9+3y2z10+3yz11+z12-y2z2+2z4;
|
|
1604
|
+
|
|
1605
|
+
ring R6=integer,(h, l, s, x, y, z),dp; //takes some time
|
|
1606
|
+
ideal I=hl-l2-4ls+hy,
|
|
1607
|
+
h2s-6ls3+h2z,
|
|
1608
|
+
xh2-l2s-h3;
|
|
1609
|
+
|
|
1610
|
+
ring R7=integer,(x,y,z),dp;
|
|
1611
|
+
ideal I=x2-y2-(z+2)^2,
|
|
1612
|
+
xy-(z+2)^2,
|
|
1613
|
+
y3+x*(z+2)^2-y*(z+2)^2+2*(z+2)^3+xy-(z+2)^2,
|
|
1614
|
+
-y^2*(z+2)^2+2*(z+2)^4+x2-y2+(z+2)^2,
|
|
1615
|
+
y3z9+3y2z10+3yz11+z12-y2z2+2z4;
|
|
1616
|
+
|
|
1617
|
+
ring R8=integer,(x,y,z),dp;
|
|
1618
|
+
ideal I=x2-y2-(z+2)^2,
|
|
1619
|
+
xy-(z+2)^2,
|
|
1620
|
+
y3+x*(z+2)^2-y*(z+2)^2+2*(z+2)^3+xy-(z+2)^2,
|
|
1621
|
+
-y^2*(z+2)^2+2*(z+2)^4+x2-y2+(z+2)^2,
|
|
1622
|
+
y3z9+3y2z10+3yz11+z12-y2z2+2z4;
|
|
1623
|
+
|
|
1624
|
+
ring R9=integer,(w,z,y,x),dp;
|
|
1625
|
+
ideal I=630,
|
|
1626
|
+
((y^2-y)*x-y^3+y^2)*z^2,
|
|
1627
|
+
(x-y)*zw,
|
|
1628
|
+
(x-y^2)*zw+(-y^2+y)*z^2,
|
|
1629
|
+
(-x^2+x)*w^2+(-yx+y)*zw;
|
|
1630
|
+
|
|
1631
|
+
ring R10=integer,(w,z,y,x),dp;
|
|
1632
|
+
ideal I=1260,
|
|
1633
|
+
-yxzw+(-y^2+y)*z^2,
|
|
1634
|
+
(-x^2+x)*w^2-yxzw,
|
|
1635
|
+
((-y^2+y)*x-y^3+2*y^2-y)*z^3,
|
|
1636
|
+
(y^2-y)*z^2*w+(-y^2+y)*z^2*w+(-y^2+y)*z^3;
|
|
1637
|
+
|
|
1638
|
+
ring R11=integer,(w,z,y,x),dp;
|
|
1639
|
+
ideal I=(4*y^2*x^2+(4*y^3+4*y^2-y)*x-y^2-y)*z^2,
|
|
1640
|
+
(x+y+1)*zw+(-4*y^2*x-4*y^3-4*y^2)*z^2,
|
|
1641
|
+
(-x-2*y^2 - 2*y - 1)*zw + (8*y^3*x + 8*y^4 + 8*y^3 + 2*y^2+y)*z^2,
|
|
1642
|
+
((y^3 + y^2)*x - y^2 - y)*z^2,
|
|
1643
|
+
(y +1)*zw + (-y^3 -y^2)*z^2,
|
|
1644
|
+
(x + 1)*zw +(- y^2 -y)*z^2,
|
|
1645
|
+
(x^2 +x)*w^2 + (-yx - y)*zw;
|
|
1646
|
+
|
|
1647
|
+
ring R12=integer,(w,z,y,x),dp;
|
|
1648
|
+
ideal I=72,
|
|
1649
|
+
((y^3 + y^2)*x - y^2 - y)*z^2,
|
|
1650
|
+
(y + 1)*zw + (-y^3 -y^2)*z^2,
|
|
1651
|
+
(x + 1)*zw + (-y^2 -y)*z^2, (x^2 + x)*w^2 + (-yx - y)*zw;
|
|
1652
|
+
|
|
1653
|
+
ring R13=integer,(w,z,y,x),dp;
|
|
1654
|
+
ideal I=(((12*y+8)*x^2 +(2*y+2)*x)*zw +((-15*y^2 -4*y)*x-4*y^2 -y)*z^2,
|
|
1655
|
+
-x*w^2 +((-12*y -8)*x+2*y)*zw +(15*y^2+4*y)*z^2,
|
|
1656
|
+
(81*y^4*x^2 +(-54*y^3 -12*y^2)*x-12*y^3 -3*y^2)*z^3,
|
|
1657
|
+
(-24*yx+6*y^2-6*y)*z^2*w + (-81*y^4*x + 81*y^3 + 24*y^2)*z^3,
|
|
1658
|
+
(48*x^2 + (-30*y + 12)*x - 6*y)*z^2*w + ((81*y^3 -54*y^2 -24*y)*x
|
|
1659
|
+
-21*y^2 -6*y)*z^3,
|
|
1660
|
+
(-96*yx-18*y^3 +18*y^2-24*y)*z^2*w +(243*y^5*x-243*y^4 +72*y^3
|
|
1661
|
+
+48*y^2)*z^3,
|
|
1662
|
+
6*y*z^2*w^2 +((576*y+384)*x^2 + (-81*y^3 -306*y^2 -168*y+96)*x+81*y^2
|
|
1663
|
+
-18*y)*z^3*w +((-720*y^2 - 192*y)*x + 450*y^3 - 60*y^2 - 48*y)*z^4);
|
|
1664
|
+
|
|
1665
|
+
ring R14=integer,(x(1),x(2),x(3),x(4)),dp;
|
|
1666
|
+
ideal I=181*49^2,
|
|
1667
|
+
x(4)^4,
|
|
1668
|
+
x(1)*x(4)^3,
|
|
1669
|
+
x(1)*x(2)*x(4)^2,
|
|
1670
|
+
x(2)^2*x(4)^2,
|
|
1671
|
+
x(2)^2*x(3)*x(4),
|
|
1672
|
+
x(1)*x(2)*x(3)*x(4),
|
|
1673
|
+
x(1)*x(3)^2*x(4),
|
|
1674
|
+
x(3)^3*x(4);
|
|
1675
|
+
|
|
1676
|
+
|
|
1677
|
+
ring R15=integer,(x,y,z),dp;
|
|
1678
|
+
ideal I=32003*181*64,
|
|
1679
|
+
((z^2-z)*y^2 + (z^2 -z)*y)*x; (z*y^3 + z*y^2)*x,
|
|
1680
|
+
(y^4 - y^2)*x, (z^2 - z)*y*x^2, (y^3 - y^2)*x^2,
|
|
1681
|
+
(z^3 - z^2)*x^4 + (2*z^3 -2*z^2)*x^3 + (z^3 -z^2)*x^2,
|
|
1682
|
+
z*y^2*x^2, z*y*x^4 +z*y*x^3,
|
|
1683
|
+
2*y^2*x^4 +6*y^2*x^3 +6*y^2*x^2 + (y^3 +y^2)*x, z*x^5 + (z^2 +z)*x^4
|
|
1684
|
+
+ (2*z^2 -z)*x^3 + (z^2 -z)*x^2,
|
|
1685
|
+
y*x^6 + 3*y*x^5 + 3*y*x^4 + y*x^3;
|
|
1686
|
+
|
|
1687
|
+
|
|
1688
|
+
ring R16=integer,(x(1),x(2),x(3),x(4),x(5)),dp;
|
|
1689
|
+
ideal I=x(5)^5,
|
|
1690
|
+
x(1)*x(5)^4,
|
|
1691
|
+
x(1)*x(2)*x(5)^3,
|
|
1692
|
+
x(2)^2*x(5)^3,
|
|
1693
|
+
x(2)^2*x(3)*x(5)^2,
|
|
1694
|
+
x(1)*x(2)*x(3)*x(5)^2,
|
|
1695
|
+
x(1)*x(3)^2*x(5)^2,
|
|
1696
|
+
x(3)^3*x(5)^2,
|
|
1697
|
+
x(3)^3*x(4)*x(5),
|
|
1698
|
+
x(1)*x(3)^2*x(4)*x(5),
|
|
1699
|
+
x(1)*x(2)*x(3)*x(4)*x(5),
|
|
1700
|
+
x(2)^2*x(3)*x(4)*x(5),
|
|
1701
|
+
x(2)^2*x(4)^2*x(5),
|
|
1702
|
+
x(1)*x(2)*x(4)^2*x(5),
|
|
1703
|
+
x(1)*x(4)^3*x(5),
|
|
1704
|
+
x(4)^4*x(5);
|
|
1705
|
+
I=intersectZ(I,ideal(64*181,x(1)^2));
|
|
1706
|
+
|
|
1707
|
+
ring R17=integer,(x,y,z),dp;
|
|
1708
|
+
ideal I=374,
|
|
1709
|
+
(z+2)^8-140z6+2622*(z+2)^4-1820*(z+2)^2+169,
|
|
1710
|
+
17y*(z+2)^4-374*y*(z+2)^2+221y+2z7-281z5+5240z3-3081z,
|
|
1711
|
+
204y2+136yz3-3128yz+z6-149z4+2739z2+117,
|
|
1712
|
+
17xz4-374xz2+221x+2z7-281z5+5240z3-3081z,
|
|
1713
|
+
136xy-136xz-136yz+2z6-281z4+5376z2-3081,
|
|
1714
|
+
204x2+136xz3-3128xz+z6-149z4+2739z2+117;
|
|
1715
|
+
|
|
1716
|
+
ring R18=integer,(B,D,F,b,d,f),dp;
|
|
1717
|
+
ideal I=6,
|
|
1718
|
+
(b-d)*(B-D)-2*F+2,
|
|
1719
|
+
(b-d)*(B+D-2*F)+2*(B-D),
|
|
1720
|
+
(b-d)^2-2*(b+d)+f+1,
|
|
1721
|
+
B^2*b^3-1,
|
|
1722
|
+
D^2*d^3-1,
|
|
1723
|
+
F^2*f^3-1;
|
|
1724
|
+
|
|
1725
|
+
ring R19=integer,(a,b,c,d,e,f),dp;
|
|
1726
|
+
ideal I=24,
|
|
1727
|
+
2*(f+2)*b+2ec+d2+a2+a,
|
|
1728
|
+
2*(f+2)*c+2ed+2ba+b,
|
|
1729
|
+
2*(f+2)*d+e2+2ca+c+b2,
|
|
1730
|
+
2*(f+2)*e+2da+d+2cb,
|
|
1731
|
+
(f+2)^2+2ea+e+2db+c2,
|
|
1732
|
+
2*(f+2)*a+f+2eb+2dc;
|
|
1733
|
+
|
|
1734
|
+
ring R20=integer,(x,y,z,w,u),dp;
|
|
1735
|
+
ideal I=24,
|
|
1736
|
+
2x2-2y2+2z2-2w2+2u2-1,
|
|
1737
|
+
2x3-2y3+2z3-2w3+2u3-1,
|
|
1738
|
+
2x4-2y4+2z4-2w4+2u4-1,
|
|
1739
|
+
2x5-2y5+2z5-2w5+2u5-1,
|
|
1740
|
+
2x6-2y6+2z6-2w6+2u6-1;
|
|
1741
|
+
|
|
1742
|
+
ring R21=integer,(x,y,z,t,u,v,h),dp;
|
|
1743
|
+
ideal I=66,
|
|
1744
|
+
2x2+2y2+2z2+2t2+2u2+v2-vh,
|
|
1745
|
+
xy+yz+2zt+2tu+2uv-uh,
|
|
1746
|
+
2xz+2yt+2zu+u2+2tv-th,
|
|
1747
|
+
2xt+2yu+2tu+2zv-zh,
|
|
1748
|
+
t2+2xv+2yv+2zv-yh,
|
|
1749
|
+
2x+2y+2z+2t+2u+v-h,
|
|
1750
|
+
x3+y3+z3+t3+u3+v3;
|
|
1751
|
+
|
|
1752
|
+
ring R22=integer,(s,p,S,P,T,F,f),dp;
|
|
1753
|
+
ideal I=35,
|
|
1754
|
+
2*T-S*s-2*F+2,
|
|
1755
|
+
8*F*p-4*p*S-2*F*s^2+S*s^2+4*T-2*S*s,
|
|
1756
|
+
-2*s-4*p+s^2+f+1,
|
|
1757
|
+
s*T^2-p*s*P-p*S*T-2,
|
|
1758
|
+
p^3*P^2-1,
|
|
1759
|
+
F^2*f^3-1;
|
|
1760
|
+
|
|
1761
|
+
ring R=integer,(x,y),(c,lp);
|
|
1762
|
+
module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18x];
|
|
1763
|
+
|
|
1764
|
+
ring R=integer,(x,y),(c,lp);
|
|
1765
|
+
module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,2xy-x],[x,0,-xy],[0,0,18];
|
|
1766
|
+
|
|
1767
|
+
ring R=integer,(x,y),(c,lp);
|
|
1768
|
+
module N=[-y,7,0],[2y3-y2],[3x,y2],[2y-y2,x],[4,5x3];
|
|
1769
|
+
|
|
1770
|
+
ring r=integer,(x,y),(c,lp);
|
|
1771
|
+
module N=[0,0,xy2-x2-xy],[0,y,x],[0,x,xy-x],[x,0,-xy],[5x,0,0];
|
|
1772
|
+
|
|
1773
|
+
ring R2=integer,(a(1),a(2),a(3),b(1),b(2),b(3)),(c,lp);
|
|
1774
|
+
module N=[a(1)*b(1),a(2)*b(1),a(3)*b(1)],[a(1)*b(2),a(2)*b(2),a(3)*b(2)],[a(1)*b(3),a(2)*b(3),a(3)*b(3)];
|
|
1775
|
+
|
|
1776
|
+
ring R3=integer,(x,y,z),(c,lp);
|
|
1777
|
+
module N=[y2+z2,xy,xz],[xy,x2+z2,yz],[xz,yz,x2+y2];
|
|
1778
|
+
|
|
1779
|
+
ring R4=integer,(x,y,z,a,b,c),(c,lp);
|
|
1780
|
+
module N=[x3y2z2c,x2y3z2c,x2y2z3c],[x3y2z2b,x2y3z2b,x2y2z3b],[x3y2z2a,x2y3z2a,x2y2z3a];
|
|
1781
|
+
|
|
1782
|
+
*/
|